SpringCloud 专栏:快速入门指南!

开发 架构
Netflix 是一家技术实力雄厚的美国流媒体娱乐公司,主要通过互联网向全球观众提供电影、电视剧、纪录片、动画片等在线视频服务,类似于国内的腾讯视频,全球范围内拥有超过 2 亿的订阅用户。

一、背景介绍

在微服务架构日益盛行的今天,Spring Cloud 凭借其丰富的功能集、高度的可集成性和对微服务架构的天然支持,自推出以来,就受到软件开发者的热烈追棒和广泛应用。

使用过 Spring Cloud 的同学应该深有感触。Spring Cloud 是一个功能强大的微服务框架,它提供了一套完整的分布式系统解决方案,比如配置管理、服务治理、熔断机制、智能路由、微代理、控制总线等多种功能,可以帮助开发者快速构建和管理微服务应用。无论是大型企业还是初创公司,都可以以非常低的成本搭建一套高效、分布式、容错的云平台。

当项目引入 Spring Cloud 技术之后,一个接口的请求流程可以用如下图来简要描述。

图片

从图中可以看出,与单体应用相比,微服务的接口调用链路和服务部署方式要复杂许多。

二、技术体系

Spring Cloud 的核心技术体系,可以用如下图来简要概括。

图片

在介绍 Spring Cloud 核心组件之前,我们先简单的介绍一下 Netflix 这家公司,因为上图提到的很多核心组件都来自于这家公司。

Netflix 是一家技术实力雄厚的美国流媒体娱乐公司,主要通过互联网向全球观众提供电影、电视剧、纪录片、动画片等在线视频服务,类似于国内的腾讯视频,全球范围内拥有超过 2 亿的订阅用户。

如果要满足这么庞大的用户群体在线访问网站视频内容,常规的网站架构肯定是无法承载的,为了更好的满足海量用户的在线视频服务,Netflix 在微服务架构方面有着深入的研究和实践,并开源了一系列组件。如上文提到的 Eureka、Ribbon、Hystrix、Feign、Zuul 等组件,就是 Netflix OSS 开源项目的一部分。由于其优秀的微服务架构实践和服务特性,Spring Cloud 将其集成到自己的生态圈,并组成微服务的核心。

2.1、第一代 Spring Cloud

初代的 Spring Cloud 核心成员,可以用如下表来概括。

组件

来源

说明

spring-cloud-eureka

来源于Netflix Eureka

服务注册中心组件

spring-cloud-ribbon

来源于Netflix Ribbon

服务负载均衡组件

Spring-cloud-hystrix

来源于Netflix Hystrix

服务熔断器组件

Spring-cloud-feign

来源于Netflix Feign

服务远程调用组件

Spring-cloud-zuul

来源于Netflix Zuul

服务网关组件

Spring-cloud-config

自研

服务配置中心组件

Spring-cloud-bus

自研

服务消息总线

Spring-cloud-sleuth

自研

服务日志跟踪

Spring-cloud-zikpin

来自第三方

服务日志全链路监控

在此,只列举了一些常用的核心组件,实际上 Spring Cloud 生态圈的核心组件非常的多,比如 Spring Cloud Security、Spring Cloud Data Flow、Spring Cloud Stream、Spring Cloud Task、Spring Cloud Connectors、Spring Cloud CLI 等等,每个组件都有它独特的技能,再次就不一一介绍了,有兴趣的朋友可以访问 Spring Cloud 的官网介绍。

2.1、第二代 Spring Cloud

在 2018 年,由于 Netflix 对 Eureka,Hystrix 等组件不再继续开发和维护了, 因此 Spring Cloud 不断的引入了其它的开源组件,以此来壮大自己的生态圈,同时也陆续推出了自己的一些组件。

Spring Cloud 第一代和第二代的核心组件差异汇总,如下表所示。

核心组件

第一代 Spring Cloud

第二代 Spring Cloud

服务注册中心

Eureka, Consul

Nacos

服务负载均衡

Ribbon

spring-cloud-loadbalancer

服务熔断器

Hystrix

Resilience4j,Sentinel

服务远程调用

Feign

Spring Cloud OpenFeign,基于 Feign 的升级版

服务网关

Zuul

Spring Cloud Gateway

配置中心

Spring Cloud Config

Nacos,Apollo

服务日志全链路监控

zipkin

Skywalking

因为 Zuul 1.x 性能一般,虽然 Netflix 之后也推出了 Zuul 2.x,相比第一代性能也提升了不少,但当时一直跳票(延迟对外开放)。随后 Spring Cloud 官方推出了自研的 Spring Cloud gateway,类似自研的还有 spring-cloud-loadbalancer,spring-cloud-r4j,Spring-cloud-openfeign 等,相比初代组件,性能和维护方面都有明显的提升。

三、版本选择

如果你翻看过 Spring Cloud 项目源码,你会发现它其实是一个拥有诸多子项目的大型综合项目,同时每个子项目也都维护着自己的发布版本号。这就意味着,每一个 Spring Cloud 的版本都会包含不同的子项目版本。

为了更好的管理子项目版本号,避免主版本名与子项目的发布版本号出现混乱。Spring Cloud 没有采用版本号的方式来命令,而是通过名称的方式来命令。

通常情况下,Spring Cloud 对外发行的版本号,采用的是伦敦地铁站的名字来命令,根据字母表的顺序来进行排序,比如:第一个 Release 版本:Angel,第二个 Release 版本:Brixton,以此类推……

每个大版本也有多个小版本号,比如Angel.SR5Brixton.SR6,其中SR5SR6就是小版本号。

小版本号的名称命令也有讲究,当一个大版本的 Spring Cloud 项目发布内容积累到临界点或者一个严重 bug 解决可用后,就会发布一个“service releases”版本,简称SRX版本,其中X是一个递增数字。

Spring Cloud 的版本号与每个子项目的版本号之间的关系,可以用如下表简要概括。

组件

Angel.SR6

Brixton.SR5

依次类推

spring-cloud-aws

1.0.4.RELEASE

1.1.1.RELEASE

...

spring-cloud-bus

1.0.3.RELEASE

1.1.1.RELEASE

...

spring-cloud-cli

1.0.6.RELEASE

1.1.5.RELEASE

...

spring-cloud-commons

1.0.5.RELEASE

1.1.1.RELEASE

...

spring-cloud-config

1.0.4.RELEASE

1.1.3.RELEASE

...

spring-cloud-netflix

1.0.7.RELEASE

1.1.5.RELEASE

...

spring-cloud-security

1.0.3.RELEASE

1.1.2.RELEASE

...

spring-cloud-starters

1.0.6.RELEASE


...

spring-cloud-cloudfoundry


1.0.0.RELEASE

...

spring-cloud-cluster


1.0.1.RELEASE

...

spring-cloud-consul


1.0.2.RELEASE

...

spring-cloud-sleuth


1.0.6.RELEASE

...

spring-cloud-stream


1.0.2.RELEASE

...

spring-cloud-zookeeper


1.0.2.RELEASE

...

spring-boot

1.2.8.RELEASE

1.3.7.RELEASE

...

spring-cloud-task


1.0.2.RELEASE

...

Spring Cloud 的发展势头非常迅猛,截止目前,大版本号已经到Leyton了。尽管如此,对于初学者而言,了解版本号的定义非常重要,避免后续在基于 Spring Cloud 框架来开发的时候走弯路。

由于 Spring Cloud 子项目特别多,尤其是在现有 Spring Boot 基础上集成的时候,很容易因为版本号不同出现各种不兼容现象,以下是 Spring Cloud 与 Spring Boot 版本匹配关系。

Spring Cloud

Spring Boot

Angel

兼容Spring Boot 1.2.x

Brixton

兼容Spring Boot 1.3.x,Spring Boot 1.4.x

Camden

兼容Spring Boot 1.4.x,Spring Boot 1.5.x

Dalston

兼容Spring Boot 1.5.x

Edgware

兼容Spring Boot 1.5.x

Finchley

兼容Spring Boot 2.0.x

Greenwich

兼容Spring Boot 2.1.x

Hoxton

兼容Spring Boot 2.2.x,Spring Boot 2.3.x

Ilford

兼容Spring Boot 2.4.x,Spring Boot 2.5.x

Jubilee

兼容Spring Boot 2.6.x,Spring Boot 2.7.x

Kilburn

兼容Spring Boot 3.0.x,Spring Boot 3.1.x

Leyton

兼容Spring Boot 3.2.x,Spring Boot 3.3.x

在实际的微服务开发过程中,当代码编写一切都是正常的,但是运行时各种出错,大概率应该是版本号的选择上出了问题。推荐结合当前使用的 Spring Boot 版本,采用与 Spring Cloud 匹配的稳定版本号来开发,会省去不少的麻烦。

四、小结

最后总结一下,Spring、Spring Boot、Spring Cloud 这三者之间的关系。

Spring -> Spring Boot -> Spring Cloud

关于 Spring Boot,在之前的技术系列文章中我们有所介绍过, 它是一个基于 Spring 框架实现的应用程序快速开发工具,开发者可以使用它来快速的构建一个可独立运行的 Java 应用程序,开箱即用。

对于 Spring Cloud,它是一个基于 Spring Boot 实现的云应用开发工具,通过它可以快速搭建微服务架构项目,比如配置管理、服务治理、熔断机制、智能路由、微代理、控制总线等多种功能,开发者可以以非常低的成本搭建一套高效、分布式、容错的云平台。

因此可见,Spring Cloud 离不开 Spring Boot,两者属于依赖关系。

在之前的技术系列文章中,我们有详细的介绍过 Spring Boot 相关知识,本期将开启 Spring Cloud 技术系列相关知识介绍。

五、参考

1.https://www.didispace.com/spring-cloud/springcloud-version.html

2.http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html

责任编辑:武晓燕 来源: 潘志的技术笔记
相关推荐

2011-03-08 16:50:35

2021-03-02 06:32:03

Ansible系统运维

2020-11-25 19:05:50

云计算SaaS公有云

2019-11-13 15:44:17

Kafka架构数据

2021-03-01 13:00:21

Ansible系统运维

2024-08-27 09:09:49

Web系统JSP

2010-12-23 13:45:23

Office 2010批量激活

2020-11-13 05:49:09

物联网城域网IOT

2021-02-22 18:50:03

Ansible系统运维

2023-12-19 09:36:35

PostgreSQL数据库开源

2020-05-11 09:54:33

JavaScript开发技术

2022-10-28 18:36:18

2009-09-22 13:01:04

ibmdwBPM

2011-03-08 09:22:37

2010-08-03 15:19:08

FlexBuilder

2021-03-26 10:31:19

人工智能AIOps

2011-05-18 15:15:44

MySQL

2015-10-29 15:36:19

Redis入门

2023-09-26 15:50:21

2015-09-24 09:54:32

物联网
点赞
收藏

51CTO技术栈公众号