一、 Spring Cloud 是什么?
Spring Cloud 是将分布式系统中一系列基础框架/工具进行整合的框架。其中包含:服务注册与发现、服务网关、熔断器、配置中心、消息中心、服务链路追踪等等。
Spring Cloud 并没有重复造轮子,Spring Cloud只是依赖于Spring Boot屏蔽掉了各个框架复杂的配置。所有的组件就相当于Spring Cloud的插件,开发人员可以根据自己的需要自由结合使用。
有Spring Boot这个利器在,所有组件都可以轻松引入、便捷开发。也一定程度上降低了各组件的学习成本、调试成本、让开发人员可以轻松上手。
如果需要从0开始进行服务化体系构建,Spring Cloud一定是最低成本的选择。
至少 ken.io 这么觉得。:-)
二、 Spring Cloud 整合/集成了那些组件?
Spring Cloud Netflix
Netflix基本上可以说是公认的微服务架构建设的标杆,之所以Netflix能获得这样的称号,这个离不开Netflix已经开源这些优秀的组件( https://netflix.github.io/ ),这些组件也可以说是Spring Cloud的核心。
- Netflix Eureka
服务注册中心,支持基于HTTP的服务,支持自动服务的自动注册与发现、负载均衡、故障转移等。
- Netflix Hystrix
熔断器,为访问远程服务、系统提供了熔断机制,一旦外部服务超时或者发生故障,将会进行熔断,以防单个或者少数服务发生故障时引起连锁反应,导致所有服务上游或者相关服务被拖慢、甚至被拖垮。提高系统面对延迟和故障的容错能力。
- Netflix Zuul
服务网关,支持动态路由、监控等,通过zuul可以实现鉴权等功能,也可以结合Hystrix做一些基础的熔断支持。
Spring Cloud Config
分布式配置中心。通过Spring Cloud Config,开发人员可以将原先放在application.yml中的配置,存储在远程服务器(Git、SVN等)集中管理,降低应用配置的维护成本。
Spring Cloud Bus
事件中心,用于将服务和服务实例与分布式消息一起连接,通常用于集群间、甚至跨集群的事件传播(例如:配置变更)。所以Spring Cloud Bus通常会和Spring Cloud Config结合使用,方便应用自动获取到配置变更的动作并完成配置的更新。
Spring Cloud Consul
服务注册中心,同样提供了服务的注册与发现等功能。
Consul与Eureka二选一即可
Spring Cloud Security
基于Spring Security为Spring Cloud集成的组件提供安全性相关的功能,尤其是Zuul,通常是结合Zuul提供OAuth 2.0的校验功能
Spring Cloud Sleuth
分布式服务链路追踪客户端工具,通常是结合Zipkin、HTrace等提供分布式服务链路追踪的功能。
Spring Cloud OpenFeign
Feign是一个Java实现的HTTP Client。可以非常方便的通过HTTP协议请求外部资源。使用Feign访问注册到Eureka的服务,非常方便。
Spring Cloud Starters
基于Spring Boot的各组件的Starter,简化Spring Cloud各组件的依赖管理。
Spring Cloud 还有以下成员:
Spring Cloud for Cloud Foundry,
Spring Cloud Open Service Broker,
Spring Cloud Cluster,
Spring Cloud Data Flow,
Spring Cloud Stream,
Spring Cloud Stream App Starters,
Spring Cloud Task,
Spring Cloud Task App Starters,
Spring Cloud Zookeeper,
Spring Cloud for Amazon Web Services,
Spring Cloud Connectors,
Spring Cloud CLI,
Spring Cloud Contract,
Spring Cloud Gateway,
Spring Cloud OpenFeign,
这里 ken.io 就不一一介绍了,
三、 Spring Cloud 是否值得选择?
对于中小型公司来说,自研完成微服务体系建设成本太高,通常来说是要采用开源的方案。
目前已经开源的微服务框架,有一定的群众基础的也只有Dubbo了。Dubbo也在2018年2月进入了Apache孵化器。Dubbo的服务注册是依赖于Zookeeper,Dubbo框架本身更多的关注点是在RPC这块。而Spring Cloud意图就很明显了,重在整合,依赖于Spring Boot,将各个框架的复杂度或者是框架之前结合的复杂度很大程度上进行了削减。
总结来说,Spring Cloud的思路就是,已经有的我拿来用,实在没有的我再补充。
Spring Cloud相对于Dubbo来说,是整合了整套解决方案的框架,而Dubbo只是其中的一个点。
Dubbo相对于Spring Cloud更轻,不过选择Dubbo就可能意味着跟其他组件的整合就需要付出更多一点的成本。对于ken这样一个比较懒的人,推荐使用更全面的Spring Cloud。
四、备注
本文参考
- https://projects.spring.io/spring-cloud/
- https://baike.baidu.com/item/spring%20cloud
- http://developer.51cto.com/art/201711/559121.htm
前置知识
- Spring Boot 入门教程:https://ken.io/note/springboot-course-basic-helloworld