Spring Cloud 教程(一) | 认识Spring Cloud
Spring Cloud Alibaba教程(一) | 认识Spring Cloud Alibaba
- 前言
- 一、SpringBoot和SpringCloud区别
- 二、SpringCloud 第一代(Spring Cloud + Netflix)
- 三、SpringCloud 第二代(Spring Cloud + Alibaba)
前言
springBoot = Spring + X, 就是对于Spring和其他技术的融合 进行了简化开发,所以x可以代表任何技术,比如 mybtis, mybatisPlus, redis… 对于集成这些常用框架,springBoot本身就预设了一些常用技术的集成方案,对于没有预设的,也可以通过自动化配置功能,快捷融入进来。
springCloud = 多个SpringBoot的融合,通过多个SpringBoot模块,完成一套微服务体系的搭建,并使其具备了服务发现与注册,服务治理,服务网关,服务监控,服务间调用等等一系列功能的集合,方便开发者们很容易的搭建一套微服务框架,只需把更多的精力投入到业务层的开发当中。
SpringCloud本身不是新的框架,他是一系列框架的有机组合,利用SpringBoot 的开发便利性巧妙地简化了分布式系统基础设施的开发。并非所有的组件都是Spring提供,Netflix扮演了重要角色。
一、SpringBoot和SpringCloud区别
- SpringBoot专注于开发方便的开发单个个体微服务
- SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务,整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、为代理、事件总栈、全局锁、决策竞选、分布式会话等等集成服务
- SpringBoot可以离开SpringCloud独立使用,开发项目,但SpringCloud离不开SpringBoot,属于依赖关系
- SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架
Spring Cloud Netflix 和 Spring Cloud Alibaba 都是 Spring Cloud 生态系统中的重要组成部分,它们各自提供了一套微服务开发所需的规范和标准,并集成了相应的组件来实现这些功能。以下是它们与 Spring Cloud 关系的详细解析:
二、SpringCloud 第一代(Spring Cloud + Netflix)
SpringCloud 第一代实际上都是用的Netflix开源的组件整合微服务解决方案。
最开始 SpringCloud 的第一代版本时,它的每个分布式组件都不是自己研发,而是在 GitHub 上找 Netflix 公司(制作视频网站),该公司研发了许多开源的微服务框架。
SpringCloud 就将所有的组件核心进行了整合。
但并不是 SpringCloud 写出的,因为 SpringCloud 目的是为了解决程序员在微服务架构中遇到的问题,因而其中的Eureka、Hystrix、Ribbon、Feign 和 Zuul 网关其实都并非 SpringCloud 写的,而使用的都是 Netflix 公司的。
需要注意的是,自2018年12月12日起,Netflix 公司宣布停止对其内部开源组件的维护,转而推荐社区自行维护。
这意味着 Spring Cloud Netflix 中的部分组件将不再得到官方更新和支持。
Spring Cloud 第一代构成:
组件 | 名称 | 来源 | 具体作用 |
---|---|---|---|
config | 配置中心 | Spring Cloud | 分布式配置中心 |
Eureka | 服务注册与发现 | Netflix | 允许服务通过REST API向Eureka注册自身信息 允许客户端通过Eureka发现已注册的服务 Eureka Server作为服务注册中心,维护服务清单,并监测服务健康状态 提供服务治理功能,如服务注册、发现、健康检查等 |
Ribbon | 客户端负载均衡 | Netflix | 提供客户端的软件负载均衡算法和服务调用 |
Feign | 声明式HTTP客户端 | Netflix | 基于 ribbon 和 hystrix 的声明式服务调用组件。 简化HTTP客户端的编写,使得HTTP请求如同调用本地方法一样 通过@FeignClient注解定义服务接口,Feign会自动生成代理类,并处理HTTP请求和响应 支持多种HTTP客户端实现,如JDK原生的URLConnection、Apache HttpClient等 |
Hystrix | 熔断器(服务保护框架) | Netflix | 提供熔断机制,当服务调用失败率达到一定阈值时,自动熔断,避免级联失败 |
Zuul | API网关 | Netflix | 提供统一的访问入口,为微服务架构提供路由和过滤功能网关组件 |
三、SpringCloud 第二代(Spring Cloud + Alibaba)
SpringCloud 第二代实际就是自己研发和 SpringCloudAalibaba 国内的优秀的微服务解决框架实现整合。
具体的体现如下:
网关方面:
第一代 是 zuul,而第二代时 使用的则是Spring Cloud 自己研发的 Gateway 网关。
在官网表述中可以得知 Gateway 网关性能远远好于 zuul 网关,
远程调用方面
第一代 是 Feign,而第二代时 Spring Cloud 团队在Feign的基础上进一步开发的一款框架。它在保留Feign原有功能的基础上,增加了对Spring MVC注解的支持。
客户端负载均衡器
第一代 是 Ribbon,而第二代时 使用的则是Spring Cloud 自己研发的 Loadbalancer
服务保护框架
第一代 是 Hystrix,而第二代时 Spring Cloud 自己研发的 r4j(Resilience4J),后续 Alibaba 研发 Sentinel 比较好用,所有就使用了Sentinel 。
核心组件
组件 | 名称 | 来源 | 具体作用 |
---|---|---|---|
Gateway | 云梯网关 | Spring Cloud | 提供统一的访问入口,为微服务架构提供路由和过滤功能网关组件 |
OpenFeign | 远程调用 | Spring Cloud | |
Loadbalancer | 客户端负载均衡器 | Spring Cloud | 提供客户端的软件负载均衡算法和服务调用 |
Nacos | 注册中心、配置中心 | Alibaba | 提供动态服务注册与发现的能力,支持服务的自动注册、发现、健康检查等,是微服务架构中服务治理的基础。 |
Sentinel | 流量控制、熔断降级(服务保护框架) | Alibaba | 作为流量控制、熔断降级的组件,Sentinel能够在系统面临高并发或下游服务故障时,自动进行流量控制、熔断降级等操作,保护系统不被压垮。 |
RocketMQ | 消息中间件 | Alibaba | 提供高性能、高可靠的分布式消息服务,支持发布/订阅模式和点对点模式,适用于解耦服务间通信、异步处理、数据流处理等场景。 |
Seata | 分布式事务 | Alibaba | 解决微服务架构下的分布式事务问题,提供全局事务的一致性管理,确保跨多个服务的业务操作数据一致性。 |
另外还有一些高级功能(存在收费)
Alibaba Cloud 0SS 阿里云存储
Alibaba Cloud SchedulerX分 布式任务调度平台
Alibaba Cloud SMS 分布式短信系统
关于远程服务调用这一块:
OpenFeign和Dubbo,两者都支持远程服务调用,使得服务消费者可以方便地调用服务提供者的接口。
1. 协议支持方面:
- Dubbo提供了多种协议支持,包括Dubbo协议、HTTP协议、Hessian协议、Thrift协议等,这使得Dubbo在协议选择上更加灵活。
- OpenFeign则主要支持HTTP协议,更适用于基于RESTful风格的微服务架构。
2. 实现方式方面:
- Dubbo是一种RPC(远程过程调用)框架,它提供了高性能、高可靠性的远程服务调用方案,并且支持多种负载均衡策略和容错策略。
- OpenFeign则是一种声明式的REST客户端,它通过注解方式定义REST API接口,并自动生成实现该接口的客户端代码,从而简化了RESTful服务的调用过程。
3. 应用场景:
- Dubbo更适合于传统的RPC调用场景,特别是在复杂的分布式系统中,Dubbo的高性能、高可扩展性和丰富的服务治理功能能够发挥重要作用。
- OpenFeign则更适合于轻量级的微服务架构,特别是在Spring Cloud体系中,OpenFeign能够很好地与Spring Cloud的其他组件集成,提供简洁、高效的HTTP客户端功能。
现如今 目前市面上最新的 Spring Cloud 架构 都是用的 Spring Cloud Alibaba 这一套
参考文章
【1】SpringCloud 第一代与第二代的区别 | 学习笔记
【2】Spring Cloud Alibaba-全面详解(学习总结—从入门到深化)
【3】SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结—从入门到深化)