前面我们介绍了微服务架构的各个组件以及各组件的职责,在Java领域中,Spring可以说是无人不知无人不晓的,我们现代的企业级应用和互联网应用,很大一部分都是构建在Spring生态体系上的,同样,实现微服务架构的SpringCloud也是在Spring基础上生根发芽的。
下面我们来看一下Spring、Springboot、SpringCloud之间的关系:
Spring是整个微服务开发的基石,在此基础上对Spring进行简化和封装,形成Springboot敏捷开发框架,而想掌握SpringCloud微服务开发,必须先掌握Springboot。
SpringCloud提供了完整的微服务架构技术生态,像我们上篇文章提到的各类组件,在SpringCloud中都有着对应的实现。(如上图)
1、SpringCloud 实现微服务架构的具体组件
不过在这里需要注意一点,SpringCloud各组件并不是完全由Spring机构自行研发的,秉持着不重复造轮子的观念,Spring机构整合了市面上各大厂商优秀的开源作品,比如在SpringCloud中使用的注册中心组件就是选用了Netflix 的 Eureka,在此基础上进行整合形成了完整的Java微服务架构解决方案。我们前面列举出来的8个微服务标准组件在SpringCloud中都对应着具体实现。并且同一类组件可能有着多个开源产品供我们选择,这些产品在SpringCloud中是彼此兼容的。下面我们一起来看看8大组件的具体实现产品:
(1)注册中心
SpringCloud中注册中心使用的组件有Netflix 的 Eureka 1.x 和HashiCorp Consul ,Eureka是Netflix公司提供的开源注册中心,2.x版本现已停止维护 。HashiCorp Consul倒是在持续维护,但商用授权版本于2020年受到贸易管制已禁止国内使用。
(2)负载均衡
SpringCloud中负载均衡使用的组件是Netflix Ribbon,属于微服务内置的客户端负载均衡组件,支持多种负载均衡策略。
(3)服务通信
SpringCloud中服务通信使用的组件是Netflix Feign 和SpringCloud RestTemplate ,Feign 是基于Ribbon声明式RESTful服务调用组件,已于2020年停止维护 。RestTemplate 是SpringCloud自研的服务间RESTful通信模板对象。
(4)API服务网关
SpringCloud中服务网关使用的组件是Netflix Zuul 和SpringCloud Gateway ,Zuul 属于SpringCloud第一代网关 ,于2020年停止维护 。Gateway 是SpringCloud自研的第二代网关,使用简单方便,功能更为强大。
(5)配置中心
SpringCloud中使用的配置中心组件是SpringCloud Config,属于SpringCloud 自研的配置中心组件,通过GitHub/Gitee统一托管微服务的应用配置文件。
(6)集中式日志管理
SpringCloud 中可以使用ELK进行日志统一管理,在SpringCloud中并未内置统一组件,如想实现此功能需自行搭建ELK集群实现。
(7)分布式链路追踪
SpringCloud中链路追踪组件使用的是SpringCloud Sleuth和Zipkin Server组件,Sleuth是SpringCloud分布式调用链路跟踪系统,用于产生链路数据。
(8)服务保护
SpringCloud中服务保护组件是Netflix Hystrix,属于容错管理工具,实现了断路器模式,通过控制服务节点从而对延迟和故障提供更强大的容错机制。
以上是SpringCloud的重要组成部分,还有很多组件没有提到,如果大家有兴趣可以自行去SpringCloud官网查看更多的组件及介绍。
从上述的描述中,我们可以发现一个问题 ,正是因为SpringCloud集众家之所长,导致它也受制于第三方厂商的掣肘,以Zuul为例,Netflix宣布停止维护,Spring机构不得不寻求其他的替代品或是自行研发 。同时,SpringCloud作为国外的产品引入国内后,也出现了一些问题,比如SpringCloud Config默认将配置文件托管在GitHub仓库中,但国内的厂商并不喜欢这样做,他们更希望的是将配置文件存储在自己的数据库中 。因此,阿里巴巴在原有的基础上结合多年的开源技术沉淀,设计了更符合国内需要的SpringCloud Alibaba。
2、SpringCloud Alibaba实现微服务架构的具体组件
SpringCloud Alibaba是隶属于SpringCloud子项目,是国内微服务开发一站式解决方案,与原有的SpringCloud兼容的同时,对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国人使用习惯的微服务架构。
下面我们再一起来看看SpringCloud Alibaba依托哪些组件实现微服务架构:
(1)注册中心
SpringCloud Alibaba中使用Alibaba Nacos 组件实现注册中心,Nacos提供了一组简单易用的特性集,可快速实现动态服务发现、服务配置、服务元数据及流量管理。
(2)负载均衡
SpringCloud Alibaba 使用Nacos服务端均衡实现负载均衡,与Ribbon在调用端负载不同,Nacos是在服务发现的同时利用负载均衡返回服务节点数据。
(3)服务通信
SpringCloud Alibaba 使用Netflix Feign 和Alibaba Dubbo 组件来实现服务通行,前者与SpringCloud采用了相同的方案,后者则是对自家的RPC 框架Dubbo也给予支持,为服务间通信提供另一种选择。
(4)API服务网关
SpringCloud Alibaba 在API服务网关 组件中,使用与SpringCloud相同的组件,即:SpringCloud Gateway。
(5)配置中心
SpringCloud Alibaba在配置中心组件中使用Nacos内置配置中心 ,Nacos内置的配置中心,可将配置信息存储保存在指定数据库中。
(6)集中式日志管理
SpringCloud Alibaba在原有的ELK方案外,还可以使用**阿里云日志服务(LOG)**实现日志集中式管理。
(7)分布式链路追踪
SpringCloud Alibaba在分布式链路组件 中采用与SpringCloud相同的方案,即:Sleuth/Zipkin Server。
(8)系统保护
SpringCloud Alibaba使用Alibaba Sentinel实现系统保护,Sentinel不仅功能更强大,实现系统保护比Hystrix更优雅,而且还拥有更好的UI界面。
在以上核心组件的实现基础上,SpringCloud Alibaba还在其他方面提供了通用组件,来使得我们的微服务架构更健壮。以下简单介绍一下:
(1)消息队列
SpringCloud Alibaba在原有SpringCloud支持的MQ基础上,对自己的开源消息队列产品RocketMQ组件进行集成。提供了更多的选择。
(2)分布式事务
SpringCloud Alibaba 在分布式事务上采用 Alibaba Seata组件,Seata是阿里巴巴开源分布式事务中间件,内置AT、TCC和SAGA三种模式适用不同的分布式事务场景。
(3)任务调度
SpringCloud Alibaba 在任务调度上采用 Alibaba Cloud SchedulerX组件,SchedulerX是阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时任务调度服务。
(4)分布式存储
SpringCloud Alibaba在分布式存储上采用Alibaba Cloud OSS组件,OSS是阿里云对象存储服务,是阿里云提供海量、安全、低成本、高可靠的云存储服务。
将SpringCloud 和SpringCloud Alibaba各维度组件对比发现,SpringCloud Alibaba对服务注册,配置中心与负载均衡都整合进了Nacos,这样简化了微服务架构的复杂度,出问题的概率也会降低,原有的服务保护组件也调整成了Sentinel,相较于Hysterix更强大,使用也更友好。同时在实现核心组件基础上,依托阿里云的强大能力,提供了更多的新特性,很多复杂场景通过SpringCloud Alibaba结合阿里云便可轻松实现。