2.1 Spring Cloud架构
Spring社区推出Spring Cloud框架与其自身的理念演变密切相关。Spring是于2003年兴起的一个轻量级的Java开发框架,但是随着其不断地发展壮大,框架的代码规模越来越庞大,集成的项目越来越多,配置文件也变得越来越混乱,慢慢地背离最初的理念。如今,分布式系统和微服务架构等更多新的技术理念的陆续出现,催生了这样一种想法:Spring社区需要一款框架来改善以前的开发模式并适应微服务开发环境。Spring Cloud也就此应运而生。
1.版本说明
Spring Cloud不同于其他独立项目,它是拥有众多子项目的项目集合。其所有版本由版本名和版本号组成,如Finchley M9和Edgware SR3。Finchley和Edgware就是版本名,名字是以伦敦地铁站命名并且遵循字母顺序(第一个release版本为Angel,第二个为Brixton),而M9和SR3是版本号。M是里程碑(milestone)的含义,M9就是指第九个里程碑。SR(Service Releases)则代表着稳定版本,后边一般都会有一个递增的数字,例如SR3就是指第三个发布版本。图2-1为Spring Cloud包含的组件的详细列表,最新的版本为Finchley RELEASE,基于Spring Boot 2.0.3, Spring Boot 2.X相对之前版本有较大的变动。本书的源码分析根据最新的Finchley RELEASE展开。
图2-1 Spring Cloud组件及其对应的版本
2. Spring Cloud组成
Spring Cloud是在Spring Boot的基础上构建的,用于简化分布式系统构建的工具集,为开发人员提供快速建立分布式系统中一些常见的组件。Spring Cloud技术体系如图2-2所示。
图2-2 Spring Cloud技术体系
Spring Cloud包含的组件众多,各个组件都有各自不同的特色和优点,为用户提供丰富的选择:
□ 服务注册与发现组件:Eureka、Zookeeper和Consul等。本书将会重点讲解Eureka, Eureka是一个REST风格的服务注册与发现的基础服务组件。
□ 服务调用组件:Hystrix、Ribbon和OpenFeign;其中Hystrix能够使系统在出现依赖服务失效的情况下,通过隔离系统依赖服务的方式,防止服务级联失败,同时提供失败回滚机制,使系统能够更快地从异常中恢复;Ribbon用于提供客户端的软件负载均衡算法,还提供了一系列完善的配置项如连接超时、重试等;OpenFeign是一个声明式RESTful网络请求客户端,它使编写Web服务客户端变得更加方便和快捷。
□ 路由和过滤组件:包括Zuul和Spring Cloud Gateway。Spring Cloud Gateway提供了一个构建在Spring生态之上的API网关,其旨在提供一种简单而有效的途径来发送API,并为他们提供横切关注点,如:安全性、监控指标和弹性。
□ 配置中心组件:Spring Cloud Config实现了配置集中管理、动态刷新等配置中心的功能。配置通过Git或者简单文件来存储,支持加解密。
□ 消息组件:Spring Cloud Stream和Spring Cloud Bus。Spring Cloud Stream对于分布式消息的各种需求进行了抽象,包括发布订阅、分组消费和消息分区等功能,实现了微服务之间的异步通信。Spring Cloud Bus主要提供了服务间的事件通信(如刷新配置)。
□ 安全控制组件:Spring Cloud Security基于OAuth2.0开放网络的安全标准,提供了微服务环境下的单点登录、资源授权和令牌管理等功能。
□ 链路监控组件:Spring Cloud Sleuth提供了全自动、可配置的数据埋点,以收集微服务调用链路上的性能数据,并可以结合Zipkin进行数据存储、统计和展示。
除了上述组件之外,Spring Cloud还提供了命令行工具Spring Cloud Cli和集群工具Spring Cloud Cluster。Spring Cloud Cli提供了以命令行和脚本的方式来管理微服务及Spring Cloud组件的方式,Spring Cloud Cluster提供了集群选主、分布式锁和一次性令牌等分布式集群需要的技术组件。