什么是微服务
单个轻量级服务一般为一个单独微服务,微服务讲究的是 专注某个功能的实现,比如登录系统只专注于用户登录方面功能的实现,讲究的是职责单一,开箱即用,可以独立运行。微服务架构系统是一个分布式的系统,按照业务进行划分服务单元模块,解决单个系统的不足,满足越来越复杂的****业务需求。
对微服务想了解的更具体,或者想知道它是如何来的,请点击:WEB 系统架构演变
Spring Cloud 是啥?
Spring Cloud 也是 Spring 旗下的项目之一。众所周知 Spring 最擅长的事情就是把技术整合,把各个领域优秀的框架拿过来集成到自己的技术中。Spring Cloud 也是一样,它将现在非常流行的许多技术整合在一起,实现了例如:配置的管理,服务的发现,智能路由,负载均衡,集群状态,熔断器等等。其中主要涉及的组件包括:Eureka(注册中心)、Ribbon(负载均衡)、Zuul(服务网关)、Hystix(熔断器)、Feign(服务调用)。
微服务的分布式特性带来了挑战。Spring 可以帮助缓解这些问题。Spring Cloud 有几种现成的云模式,可以帮助进行服务发现、负载平衡、电路中断、分布式跟踪和监控。它甚至可以充当 API 网关。下图为 Spring Cloud 微服务架构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QnPuZdZD-1643616101785)(https://strive-md-1258023676.cos.ap-nanjing.myqcloud.com/md/diagram-microservices-88e01c7d34c688cb49556435c130d352.svg)]
Spring Cloud 主要子项目
Spring Cloud Config
集中配置管理工具,分布式系统中统一的外部配置管理,默认使用 Git 来存储配置,可以支持客户端配置的刷新及加密、解密操作。
Spring Cloud Netflix
Netflix OSS 开源组件集成,包括 Eureka
、Hystrix
、Ribbon
、Feign
、Zuul
等核心组件。
- Eureka:服务治理组件,包括服务端的注册中心和客户端的服务发现机制;
- Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;
- Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
- Feign:基于 Ribbon 和 Hystrix 的声明式服务调用组件;
- Zuul:API 网关组件,对请求提供路由及过滤功能;
现在推荐使用 Spring Cloud Alibaba 替换 Netflix
Spring Cloud Bus
用于管理和广播分布式系统中的消息,也就是消息引擎系统中的广播模式。当然作为 消息总线 的 Spring Cloud Bus 可以做很多事而不仅仅是客户端的配置刷新功能。
拥有了 Spring Cloud Bus 之后,我们只需要创建一个简单的请求,并且加上 @ResfreshScope
注解就能进行配置的动态修改了。下图为 Bus 工作的大致示意图:
Spring Cloud Consul
基于 Hashicorp Consul 的服务治理组件。
Spring Cloud Security
安全工具包,对 Zuul 代理中的负载均衡 OAuth2 客户端及登录认证进行支持。
Spring Cloud Sleuth
Spring Cloud 应用程序的分布式请求链路跟踪,支持使用 Zipkin、HTrac e和基于日志(例如 ELK)的跟踪。
Spring Cloud Stream
轻量级事件驱动微服务框架,可以使用简单的声明式模型来发送及接收消息,主要实现为 Apache Kafka 及 RabbitMQ。
Spring Cloud Task
用于快速构建短暂、有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性。
Spring Cloud Zookeeper
基于 Apache Zookeeper 的服务治理组件。
Spring Cloud Gateway
API 网关组件,对请求提供路由及过滤功能。
Spring Cloud OpenFeign
基于 Ribbon 和 Hystrix 的声明式服务调用组件,可以动态创建基于 Spring MVC 注解的接口实现用于服务调用,在 Spring Cloud 2.0 中已经取代 Feign 成为了一等公民。
SpringCloud 和 Dubbo
首先,他们都是分布式管理框架。
Dubbo 是二进制传输,占用带宽会少一点。SpringCloud 是 Http 传输,带宽会多一点,同时使用 Http 协议一般会使用 JSON 报文,消耗会更大。Dubbo 开发难度较大,所依赖的 jar 包有很多问题大型工程无法解决。
SpringCloud 对第三方的继承可以一键式生成,天然集成。SpringCloud 接口协议约定比较松散,需要强有力的行政措施来限制接口无序升级。
最大的区别: Spring Cloud 抛弃了 Dubbo 的 RPC 通信,采用的是基于 HTTP 的 REST 方式。
Spring Cloud 组件近况
Spring Cloud 大部分组件已经停更进维,所以不再推荐使用,适当了解即可。目前 Spring Cloud Alibaba 已经成为了分布式微服务系统的必需组件,逐渐代替 Spring Cloud 第一代,成为主流的微服务框架。
Spring Cloud 第一代实现(Netflix) | 状态 | Spring Cloud 第二代实现(Alibaba) | 状态 |
---|---|---|---|
Ereka | 2.0 孵化失败 | Nacos Discovery | 性能更好,感知力更强 |
Ribbon | 停更进维 | Spring Cloud Loadbalancer | Spring Cloud 原生组件,用于代替 Ribbon |
Hystrix | 停更进维 | Sentinel | 可视化配置,上手简单 |
Zuul | 停更进维 | Spring Cloud Gateway | 性能为 Zuul 的 1.6 倍 |
Spring Cloud Config | 搭建过程复杂,约定过多,无可视化界面,上手难点大 | Nacos Config | 搭建过程简单,有可视化界面,配置管理更简单,容易上手 |