
先来看一下第一代 spring cloud 的组件
组件名称 | 功能 | 描述 |
| Eureka | 服务治理(注册、发现......) | |
Ribbon | 客户端负载均衡器 | |
Hystrix | 服务之间远程调用时的熔断保护 | Hystrix 的使用主要有三种方式
|
Feign | 通过定义接口的方式直接调用其他服务的 API | |
| Zuul | 服务网关 | 提供了路由、监控、弹性、安全等服务。Zuul 能够与 Eureka、Ribbon、Hystrix 等组件配合使用。 |
Config | 分布式配置中心组件 | |
Sleuth | 用于请求链路跟踪 | |
Stream | 用来为微服务应用构建消息驱动能力 |
spring cloud 现在已经是一种标准了,各公司可以基于它的编程模型编写自己的组件 ,比如Netflix、阿里巴巴都有自己的一套通过spring cloud 编程模型开发的分布式服务组件 。
Spring Cloud Alibaba 主要包含 Sentinel、Nacos、RocketMQ、Dubbo、Seata 等组件。
Spring Cloud 二代组件
二代引入了 Spring Cloud Alibaba
第一代组件 | 第二代组件 |
Eureka | Nacos |
Config | Apollo |
Zuul | spring cloud gateway |
Hystrix | Sentinel |
Eureka VS Nacos
Eureka 之前官方也宣布了暂停了 2.X 版本的开发,1.X 的版本还会维护。其实对于一般的服务规模,目前的 Eureka 完全够用了。而 Nacos 作为后起之秀,目前更新频率很高,社区也更活跃,使用 Nacos 是一个正确的选择。
Apollo VS Spring Cloud Config
功能 | spring cloud config | apollo |
统一配置管理 | 集成Git | 自带存储(MySql) |
多环境区分 | 配置指定 | 配置指定 |
实时更新 | Bus消息总线 | Http长连接 |
定时拉取 | 需要自己扩展 | 支持 |
权限控制 | 需要Git支持 | 支持 |
版本管理 | Git版本 | 有直接的版本功能,一键恢复指定版本 |
Web管理后台 | 无 | 有 |
Zuul VS Spring Cloud Gateway
在 Spring Cloud Gateway 出现之前,网关都是用 Zuul 构建的,虽然 Netflix 开源了 Zuul2,由于各种原因,官方并没有打算将 Zuul2 集成到 Spring Cloud 体系中。而是自己研发了一个全新的网关 Spring Cloud Gateway,由于 Zuul1 基于 Servlet 构建,使用的是阻塞的 IO,性能并不是很理想。Spring Cloud Gateway 则基于 Spring 5、Spring boot 2 和 Reactor 构建,使用 Netty 作为运行时环境,比较完美的支持异步非阻塞编程。
官方提供的压测报告显示 Spring Cloud Gateway 的性能是 Zuul 的 1.5 倍,Spring Cloud Gateway 刚出不久,稳定性有待验证,主要是缺乏大规模流量的验证,而 Zuul 开源的时间较长,同时在 Netflix 内部经过了大规模流量的验证,比较稳定。长期发展来说,Spring Cloud Gateway 的优势比较大,毕竟官方主推。
Hystrix VS Sentinel
Hystrix 替换成了 Sentinel,Hystrix 也停止了开发,这个时候 Spring Cloud Alibaba 中的 Sentinel 的优势就很明显了,Sentinel 支持多样化的流量控制,熔断降级等功能,完全可以替代 Hystrix。
其他
分布式事务:Seata
消息队列: RocketMQ
调用链监控:Apache Skywalking
日志查询: ELK
指标监控: Prometheus
分布式缓存: Redis
分布式定时任务:XXL-JOB
整体架构组件
基于以上,如果我来设计系统架构,那么将用以下组件
组件 | 功能 |
Nacos | 服务注册中心 |
Apollo | 分布式配置中心 |
XXL-JOB | 分布式定时任务中心 |
SpringBoot | 微服务组件 |
Sentinel | 服务熔断限流组件 |
Spring Cloud Gateway | 微服务网关 |
Spring Cloud OpenFeign | 服务通信调用 |
Seata | 分布式事务 |
RocketMQ | 消息队列 |
Skywalking | 服务调用链监控系统 |
Redis | 分布式缓存 |
ELK | 日志收集、查询系统 |
Prometheus | Metrics指标监控系统 |
此外,微服务集群是以容器的方式部署的,用K8S进行docker集群管理。


关注公众号 获取更多精彩内容
