云服务器分区助手在哪深入学习SpringCloud(一):微服务架构与SpringCloud概述

联想云服务器维护工资 系列说明:本系列文章基于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。

本系列使用的版本

<properties><java.version>17

您好:云优数据云计算 www.yunyoushuju.cn 2核2G6M最低19.9元/月 欢迎开机

发表评论

评论列表
未查询到任何数据!