联想云服务器维护工资 系列说明:本系列文章基于Spring Boot 3.2.x + Spring Cloud 2023.0.x + Spring Cloud Alibaba 2023.x编写,要求JDK 17+。如果您使用的是 Spring Boo···
联想云服务器维护工资
系列说明:本系列文章基于Spring Boot 3.2.x + Spring Cloud 2023.0.x + Spring Cloud Alibaba 2023.x编写,要求JDK 17+。如果您使用的是 Spring Boot 2.x 版本,部分配置和API可能有所不同,请注意甄别。
从单体架构到微服务架构
单体架构的困境
在软件开发的早期阶段,大多数应用都采用单体架构(Monolithic Architecture)。所有功能模块(用户管理、订单处理、商品服务、支付系统等)都打包在一个应用中,部署在一台或几台服务器上。
┌─────────────────────────────────────────────────────────────┐ │ 单体应用 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 用户模块 │ │ 订单模块 │ │ 商品模块 │ │ 支付模块 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ ┌────┴────┐ │ │ │ 数据库 │ │ │ └─────────┘ │ └─────────────────────────────────────────────────────────────┘单体架构的优点:
开发简单,IDE支持好部署方便,一个WAR/JAR包搞定测试容易,端到端测试直接运行但随着业务增长,单体架构的问题逐渐暴露:
问题
具体表现
代码臃肿
几十万行代码,新人上手困难,改一行代码要理解整个系统
部署困难
改一个小功能,整个应用要重新部署,部署时间从分钟变成小时
扩展受限
只能整体扩展,无法针对热点模块单独扩容
技术债务
被锁定在特定技术栈,想用新框架?重写整个系统吧
故障蔓延
一个模块OOM,整个系统崩溃
团队协作
几十人改同一个代码库,合并冲突是家常便饭
微服务架构的核心思想
微服务架构(Microservices Architecture)的核心思想是:将一个大型应用拆分为一组小型、独立的服务,每个服务运行在自己的进程中,通过轻量级的通信机制(通常是HTTP/REST或消息队列)进行交互。
┌─────────────────────────────────────────────────────────────────────┐ │ 微服务架构 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 用户服务 │ │ 订单服务 │ │ 商品服务 │ │ 支付服务 │ │ │ │:8001│ │:8002│ │:8003│ │:8004│ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ │ ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ │ │ │ 用户DB│ │ 订单DB│ │ 商品DB│ │ 支付DB│ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────────────────────────────────┘微服务的核心特征
服务组件化:每个服务是独立的组件,可以独立开发、测试、部署围绕业务能力组织:按业务领域拆分,而不是按技术层次去中心化治理:每个服务可以选择最适合的技术栈去中心化数据管理:每个服务拥有自己的数据库基础设施自动化:CI/CD、容器化部署容错设计:服务故障不会导致整个系统崩溃微服务带来的新挑战
微服务不是银弹,它在解决单体架构问题的同时,也引入了新的复杂性:
挑战
说明
服务发现
服务实例动态变化,如何找到目标服务?
负载均衡
多个服务实例,请求如何分发?
配置管理
几十个服务,配置如何统一管理?
服务通信
服务间如何高效、可靠地通信?
熔断降级
某个服务挂了,如何防止雪崩?
链路追踪
一个请求经过多个服务,出问题如何定位?
分布式事务
跨服务的数据一致性如何保证?
安全认证
服务间的认证授权如何处理?
Spring Cloud就是为了解决这些问题而生的!
Spring Cloud 全景概述
什么是Spring Cloud
Spring Cloud是一系列框架的有序集合,它利用Spring Boot的开发便利性,为分布式系统中的常见模式(配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、分布式会话等)提供了开箱即用的解决方案。
简单来说:Spring Cloud = 分布式系统的工具箱
Spring Cloud的三大生态
Spring Cloud经过多年发展,形成了三大主要生态:
1. Spring Cloud Netflix(经典,部分停更)
Netflix公司开源的一套微服务组件,Spring Cloud对其进行了封装。由于Netflix在2018年后逐步停止维护,目前仅建议了解,不推荐在新项目中使用。
组件
功能
状态
Eureka
服务注册与发现
⚠️ 维护模式,不再更新
Ribbon
客户端负载均衡
❌ 已停更,被LoadBalancer替代
苏州阿里云内部服务器
Hystrix
熔断器
❌ 已停更,被Resilience4j/Sentinel替代
Zuul
API网关
❌ 已停更,被Gateway替代
Feign
声明式HTTP客户端
✅ 演进为OpenFeign
2. Spring Cloud 官方组件(推荐)
Spring官方维护的组件,持续更新,与Spring Boot深度集成:
组件
功能
说明
Spring Cloud Gateway
API网关
基于WebFlux,性能优异,替代Zuul
Spring Cloud OpenFeign
声明式HTTP客户端
简化服务间调用
Spring Cloud LoadBalancer
负载均衡
替代Ribbon
Spring Cloud Config
配置中心
支持Git、本地文件等
Spring Cloud Sleuth
真地云巡根服务器
链路追踪
集成Zipkin、Brave
Spring Cloud Stream
消息驱动
统一消息中间件编程模型
Spring Cloud Bus
消息总线
配置刷新广播
3. Spring Cloud Alibaba(国内主流,强烈推荐)
阿里巴巴开源的微服务组件,经过双十一等大规模场景验证,是目前国内企业的首选:
组件
功能
优势
Nacos
服务注册与发现 + 配置中心
一站式解决方案,可视化界面
Sentinel
流量控制、熔断降级
功能比Hystrix强大,实时监控
Seata
分布式事务
支持AT、TCC、Saga等模式
RocketMQ
消息队列
高吞吐、低延迟
Dubbo
RPC框架
高性能服务调用(可选)
技术选型建议
根据2024年的技术趋势和实际生产经验,推荐以下组合:
┌─────────────────────────────────────────────────────────────────────┐ │ 推荐技术栈(2024) │ ├─────────────────────────────────────────────────────────────────────┤ │ 服务注册与发现 │ Nacos │ │ 配置中心 │ Nacos │ │ 服务调用 │ OpenFeign + LoadBalancer │ │ API网关 │ Spring Cloud Gateway │ │ 熔断降级 │ Sentinel │ │ 分布式事务 │ Seata │ │ 链路追踪 │ SkyWalking / Sleuth + Zipkin │ │ 消息队列 │ RocketMQ / Kafka │ └─────────────────────────────────────────────────────────────────────┘版本选择与兼容性
Spring Cloud版本命名规则
Spring Cloud的版本命名经历了两个阶段:
早期(2020年之前):使用伦敦地铁站名,按字母顺序排列
Angel → Brixton → Camden → Dalston → Edgware → Finchley → Greenwich → Hoxton现在(2020年之后):使用年份命名
2020.0.x(代号Ilford)2021.0.x(代号Jubilee)2022.0.x(代号Kilburn)2023.0.x(当前最新稳定版)版本对应关系(重要!)
选择版本时,必须保证Spring Boot、Spring Cloud、Spring Cloud Alibaba三者版本兼容,否则会出现各种奇怪的问题。
推荐版本组合(2024年)
Spring Boot
Spring Cloud
Spring Cloud Alibaba
JDK
3.2.x
2023.0.x
2023.0.x
17+
3.1.x
2022.0.x
2022.0.x
17+
3.0.x
2022.0.x
2022.0.x
17+
2.7.x
2021.0.x
2021.0.x
8+
2.6.x
2021.0.x
2021.0.x
8+
⚠️注意:Spring Boot 3.x 要求 JDK 17+,不再支持 JDK 8。如果您的项目必须使用 JDK 8,请选择 Spring Boot 2.7.x。

发表评论
最近发表
标签列表