现在对于微服务架构的复杂业务提供了很多的解决方案的同时,也给开发、测试、运维等工作带来了很多的麻烦。从开发者的角度上来讲,首先需要考虑到的就是拆分之后的微服务如何进行远程通信调用,现在市面上有很多的开源的RPC框架其中比较著名的就是Dubbo框架、gRPC框架等等内容。

有了远程通信之后,接下来需要讨论的就是有了这些服务之后如何让集群中的服务之间能够动态感知,也就是说有些服务的上下线操作能被其他服务感知到。例如A服务调用B服务,B服务有10个实例,那么A服务怎么感知这10个B服务的实例呢?

在微服务一体化解决方案出现之前,各个公司对于微服务的探索是相当费劲的,例如出现的ESB系统,是根据SOA架构设计出来的,当微服务的概念从2014年被提出之后,又出现了ESC系统等等的。不仅仅要对开源技术进行横向的比较,还在同时对针对公司业务的内部组件化的东西进行深入的挖掘。
直到Spring Cloud的出现,SpringCloud 是Pivotal公司在2015年的时候发布的一个项目,Spring 也是 Pivotal公司研发的产品。
什么是Spring Cloud
官方网站的描述如下
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer's own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
大致的意思是说Spring Cloud提供了一些让开发者快速构建应用的工具、例如说配置管理、服务发现、熔断机制、路由等等一些操作。可以在任何的分布式系统中高效地使用。
Spring Cloud主要解决的问题有如下一些
- 分布式配置
- 服务注册与发现
- 服务路由
- 服务调用
- 负载均衡
- 断路器
- 全局锁
- Leader选举以及集群状态
- 分布式消息
需要注意的是 Spring Cloud并不是一个新的技术框架,而是通过Spring Boot,将一些优秀的分布式解决方案进行了封装。简化了很多的配置。所以它并不是像是是Spring 或者Spring Boot这样的东西。准确的定位应该是一个微服务实现的一站式解决方案。它是由很多的Spring Boot的 starter 组成的一套实现规范。
Spring Cloud版本介绍
最新官网截图

Spring Cloud尽力的从上到下,如下的一些版本。
- Angel
- Brixton
- Camden
- Dalston
- Edgware
- Finchley
- Greenwich
- Hoxton
是英国伦敦地铁站的名字。官网还提供了Spring Cloud所依赖的Spring Boot的版本。

Spring Cloud 规范下的实现内容有哪些
在Spring Cloud提供的一套微服务实现规范下出现了有如下的一些项目
- Spring-Cloud-Bus
- Spring-Cloud-Netflix
- Spring-Cloud-Zookeeper
- Spring-Cloud-Gateway
当然在Spring Cloud官网上还提供了一切其他的内容,这些实现的内容大部分都是对已经有的内容进行了封装,进行一个统一的规范化的整合。使用者只需要通过一个简单的配置就可以使用其功能。
这也是Spring团队为了节省重复造轮子的时间,将Spring 框架提供的 IoC和AOP两个核心功能运用到了极致。
Spring团队有个习惯,不像是Apache团队,Spring团队只有在感觉到别人的东西用的不够好的情况下才会考虑开发新的内容。但是Apache团队则不然,不管别人的东西好不好,用得舒不舒服,反正就是要搞出来一个比你好的东西。
例如Spring MVC框架的出现,就是因为Spring 团队发现了Struts2 中出现了很多安全漏洞,不然的话Spring MVC是不会被Struts2代替的。再比如在Spring Cloud Netflix解决方案中有一个Zuul网关,因为性能问题,Spring团队才决定孵化了一个Spring Cloud Gateway来取代Zuul。
Spring团队是为了让开发者简化开发操作,提高开发效率。从Spring 框架到Spring Boot框架,到最后的Spring Cloud微服务一站式解决方案。
现在在Spring 微服务解决方案领域比较著名的就是亲儿子Spring Cloud Netflix另一个就是干儿子Spring Cloud Alibaba。从名字也可以看出来Spring Cloud Alibaba,是阿里整合了阿里系的产品打造出的微服务一站式解决方案。
Spring Cloud Netflix
Spring Cloud Netflix主要为微服务实现提供了如下的一些解决方案
- Eureka;服务注册与发现
- Zuul;服务网关
- Ribbon;负载均衡
- Feign;远程服务的客户端代理
- Hystrix;断路器,提供服务熔断和限流功能
- Hystrix Dashboard;控制面板
- Turbine;将各个服务实例上的Hystrix控制信息进行了整合。
而在Netflix OSS 所提供的微服务解决方案主要有如下一些
- Spring-Cloud-Netflix-Hystrix
- Spring-Cloud-Netflix-Ribbon
- Spring-Cloud-Netflix-Zuul
- Spring Cloud Alibaba
是阿里巴巴集团下的开源组件和云产品在Spring Cloud规范下的实现,是2018年10月31日,Spring Cloud Alibaba 正式进入Spring Cloud 官方的孵化器,并且发布了第一个版本,2019年8月1日在Alibaba仓库发布了第一个毕业版本。
Spring Cloud Alibaba 主要提供一些微服务实现的解决方案。下面是Spring Cloud Alibaba提供的一些开源组件和阿里云产品的额组件,而云产品是需要付费使用。
Sentinel 流量控制器和服务降级
Nacos 服务注册和发现,还提供了分布式配置中心的功能
- RocketMQ 消息队列
- Seate 分布式事务
- Dubbo RPC通信
- OSS 阿里云对象存储方案,是收费的。
优势
相对于Spring Cloud Netflix来说
Alibaba的开源组件没有接入Spring Cloud之前,各个大厂已经在使用了。在集成了Spring Cloud之后能够快速的实现一个版本迁移,例如Dubbo 、当当网开发的 Dubbox等等已经在有些公司落地实践很久了。
Alibaba是与Alibaba的云产品进行了整合,有点类似于软件与硬件的天然兼容,类似于苹果手机、苹果电脑,对软硬件都进行了适配优化。相比较于Spring Cloud Netflix来说可能更适合与国内的开发习惯。
最后,其实不管是Spring Cloud Netflix还是Spring Cloud Alibaba,只要能适合公司业务的发展就是最合适的工具。也没有具体的孰优孰劣,在某些场景下可能A更适合有些场景下可能N更适合。