深入理解Spring Cloud与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 Spring Cloud概述

1.3.1 Spring Cloud诞生背景

笔者认为Spring Cloud的诞生有以下三个原因:

·Spring 大家族中的大部分项目都是客户端项目,他们缺少服务器端项目和分布式项目的经验。

·Netflix开源其中间件,Spring团队与其合作进军分布式领域。

·Spring母公司(Pivotal)需要提供更多的云服务来保持或增长自身市值。

Spring自诞生以来,已经衍生出很多子项目。Spring官网的项目页面中就列出了以下项目:

·Spring Boot:快速构建微服务应用。

·Spring Framework:为依赖注入、事务管理、Web 应用、数据访问、消息等提供核心支持。Spring Framework内部包含了多个子模块。

·Spring Data:为数据访问提供统一的基于Spring编程模型的框架。

·Spring Integration:Spring对EIP(Enterprise Integration Patterns)的集成。

·Spring Batch:为批处理提供了统一的模型。

·Spring Security:权限、安全相关模型。

·Spring AMQP:封装基于AMQP的消息解决方案。

·Spring Session:为用户的session(会话)提供一套API和对应的实现。

·Spring for Android:为Android开发提供的一套Spring框架。

我们可以发现,这些项目大部分都是客户端项目,适合开发单体应用,没有涉及分布式领域。

Pivotal 公司缺少分布式项目的经验,而且 Netflix 开源的组件正好涉及分布式领域的核心功能,双方一拍即合,合作诞生的Spring Cloud 项目用于为快速构建分布式系统提供统一的开发模式。Spring Cloud诞生以后,其母公司Pivotal的商业化PaaS产品Cloud Foundry上就提供了Spring Cloud的商业化服务(配置管理、服务发现和熔断器)。

国内的阿里云也有类似的 PaaS 产品,如企业级分布式应用服务(Enterprise Distributed Application Service,简称EDAS)提供了应用生命周期的托管服务,以及与Spring Cloud相关的服务治理功能;微服务引擎(Micro Service Engine)提供了注册/配置中心的托管服务,以及与Spring Cloud相关的服务治理功能,如图1-4所示。

接下来,我们来了解与 Spring 合作的美国公司 Netflix。Netflix 的中文名是网飞(也称奈飞),是一家会员订阅制的流媒体播放平台。此流媒体播放平台的技术都是 Netflix 自己开发的,我们熟悉的 Spring Cloud Netflix 对应的一些组件,比如注册中心 Eureka、熔断工具Hystrix、网关Zuul都是Netflix对外开源的产品。

图1-4

1.3.2 Netflix OSS

Netflix OSS(Netflix Open Source Software)即Netflix开源软件,是Netflix开源的软件集合。这些软件覆盖了分布式开发的部分领域,它包含的组件如表1-5所示。

表1-5

Spring Cloud与Netflix合作产生的Spring Cloud Netflix项目就是Spring体系与Netflix中间件集成的项目。

显然,Netflix OSS 并不能满足分布式应用领域的所有功能。Spring Cloud 在 Netflix 没有涉及的领域也都有相应的解决方案。

1.3.3 Spring Cloud项目

Spring Cloud 早期与 Netflix合作,其内部的很多接口借鉴了 Netflix开源软件的实现。不过 Spring Cloud 的目的是为了做生态,不与 Netflix 进行强绑定。除了 Spring Cloud Netflix,Spring Cloud后续也提供了Spring Cloud Zookeeper项目和Spring Cloud Consul项目,其中,前者是 Spring Cloud 与 Zookeeper (服务注册/发现与配置管理)集成的项目,后者是 Spring Cloud与Consul(服务注册/发现、配置管理、消息)集成的项目。

Netflix 开源的软件只涉及分布式应用开发中的一部分内容,Spring Cloud 生态还提供了其他领域的组件。比如Spring Cloud Stream组件统一消息API,屏蔽底层消息中间件实现细节;Spring Cloud Sleuth 组件用于链路追踪;Spring Cloud Open Service Broker 实现 Open Service Broker API等。表1-6列出了Spring Cloud生态的功能。

表1-6

1.3.4 Spring Cloud版本

Spring Cloud在2016年发布了首个版本,到目前为止,发布的版本已经将近50个。若使用Spring Cloud,需要引入 org.springframework.cloud:spring-cloud-dependencies这个BOM,在maven中以import的方式引入这个依赖:

BOM引入后,不再需要单独为模块指定版本,比如,引入 spring-cloud-starter-openfeign模块不需要指定版本号:

Spring Cloud版本号使用伦敦地铁站命名,第一个版本以A开头,第二个版本以B开头,以此类推。目前的Spring Cloud版本已经到了Hoxton。

Spring snapshot仓库会发布每个版本的snapshot版本,比如Greenwich.BUILD-SNAPSHOT、Hoxton.BUILD-SNAPSHOT等。如果要使用snapshot版本,需要在maven中加上repository配置,定义如下:

Spring milestone仓库会发布每个版本的milestone版本和RC版本。比如,Hoxton.RELEASE发布之前会发布 Hoxton.M1、Hoxton.M2、Hoxton.M3、Hoxton.RC1 版本。如果要使用milestone版本,需要在maven中加上repository配置:

正式版本会以.RELEASE结尾,比如Greenwich.RELEASE、Hoxton.RELEASE等,会在中央仓库上发布。

发布Release版本以后会发布 SR 版本(SR表示修正版或更新版),会修复 Release 版本里的一些问题。比如 Greenwich.SR1、Greenwich.SR2是 Greenwich.RELEASE的两个修正版本。

Spring Cloud基于 Spring Boot构建,每个版本也会有对应的 Spring Boot版本。Spring Cloud与Spring Boot的版本关系如表1-7所示。

表1-7

Spring Cloud Alibaba 在 Spring Cloud 孵化器内“毕业”时进行了仓库的迁移,如要使用Spring Cloud Alibaba 对应的依赖,需要引入 com.alibaba.cloud:spring-cloud-alibaba-dependencies BOM:

Spring Cloud Alibaba与Spring Cloud和Spring Boot的版本关系如表1-8所示。

表1-8

1.3.5 Spring Cloud最新动态

自2015年诞生以来到本书编写之时,Spring Cloud的生态发生了非常大的变化。Spring Cloud Netflix大部分组件不再继续更新,其GitHub仓库甚至已经删除了这些维护组件。Spring Cloud Netflix已经不再是Spring Cloud推荐的实现,其组件可以被其他Spring Cloud生态组件所替代,比如Spring Cloud Gateway代替Netflix Zuul,Spring Cloud LoadBalancer代替Netflix Ribbon,Spring Cloud Circuit Breaker Sentinel代替Hystrix。

Spring Cloud Netflix 大部分组件不再继续更新的原因是 Netflix OSS 宣布 Hystrix、Eureka 2.x、Ribbon 和 Archaius 进入维护模式。这意味着不会添加新的特性,只会修改一些比较小的Bug。

在2019年巴塞罗那Spring I/O大会和奥斯汀Spring One Platform大会上,Spring团队都有一个主题为“How to live in a post Spring Cloud Netflix world”的环节来讲解 Spring Cloud Netflix进入维护模式后使用其他Spring Cloud实现代替Netflix的解决方案。

Spring Cloud团队在2019年12月通过Spring Blog对外宣布后续的产品路线图,下一个大版本IIford会做以下两件事情:

·删除处于维护模式中的项目(Spring Cloud Netflix的绝大多数项目)。

·简化Spring Cloud发版列车,云厂商相关的项目会被移出Spring Cloud仓库,并单独维护(Spring Cloud Alibaba是第一个移出Spring Cloud仓库的云厂商项目)。

2018年,阿里巴巴开源了Spring Cloud Alibaba,这是一个整合阿里巴巴开源中间件与Spring Cloud生态的开源项目,其内部组件如表1-9所示。

表1-9

Spring Cloud Alibaba自2018年7月开源依赖后,获得的关注度非常高。截至本书编写时,Spring Cloud Alibaba在 GitHub上的star数已经超过15000个,used by超过7000个,至少1000家公司在生产环境使用Spring Cloud Alibaba。

目前Spring Cloud Alibaba已经入驻Spring官网,官网上也有Spring Cloud Alibaba项目的介绍。Spring Cloud Alibaba 内的 Sentinel、RocketMQ Binder 也已经在 Spring Cloud 官方的Spring Cloud Circuit Breaker、Spring Cloud Stream的推荐实现列表上。

目前Spring Cloud实现的各个功能对比如表1-10所示。其中,处于维护模式或者不再继续开发的组件有 Archaius、Eureka 2.0、Hystrix 和 Ribbon。Spring Cloud 官方提供的 Spring Environment、Service Registry/Discovery、Spring Cloud Circuit Breaker、Spring Cloud Stream、Spring Cloud Bus、Spring Cloud LoadBalancer都对各个领域的编程模型进行了统一。

表1-10