目录
Spring Boot和Spring Cloud的区别与联系:
理解简介:
SpringCloud并不属于一门技术,而是一系列的微服务解决方案,它将市面上成熟经过验证的微服务框架整合起来,并且通过SpringBoot的思维进行再封装,屏蔽掉其中复杂的配置和实现原理,类似从Spring到SpringBoot简化配置,为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。
SpringCloud本身并不是一个可以拿来即用的框架,是一套微服务规范,具有两代实现。
- Spring Cloud Netfix是第一代实现,主要由Eureka,Ribbon,Feign,Hystrix等组件组成。
- Spring Cloud Alibaba是第二代实现,主要由Nacos,Sentinel,Seata等组件构成。
SpringCloud是什么:
SpringCloud是一款基于SpringBoot实现的微服务框架。源自Spring社区,主要由Pivotal和Netfix两大公司提供技术迭代和维护。
随着微服务的火爆流行,国内外各大互联网公司都相机分享了他们再微服务架构重,针对不同尝尽出现的各种问题的解决方案和开源框架。
- 服务治理:阿里巴巴开源的Dubbo和当当网再其基础上扩展出来的DubboX、Netfix的Eureka以及Apache的Consul等。
- 分布式配置管理:百度的Disconf、Netfix的Archaius、360的QConf、携程的Apollo以及SpringCloud的Config等。
- 批量管理:当当网的Elastic-Job、Linkedln的Azkaban以及SpringCloud的Task等。
- 服务跟踪:京东的Hydra、SpringCloud的Sleuth以及Twitter的Zipkin等。
- ........
以上这些微服务框架或解决方案都具有以下两个特点:
- 对于同一个微服务问题,各互联网公司给出的解决方案都各不相同。
- 一个微服务框架或解决方案都只能解决微服务重的某一个或几个问题。
这种情况下,搭建一套微分布式微服务系统就需要针对这些问题从诸多的结局方案中做出选择,这使得我们不得不将大量的经理花费在前期的调研、分析以及实验上。
SpringCloud中包含了spring-cloud-config、spring-cloud-bus等近20个子项目提供了服务治理、服务网关、智能路由、负载均衡、断路由、监控跟踪、分布式消息队列、配置管理等领域的解决方案。
这里我们介绍SpringCloud特指第一代实现
SpringCloud常用组件:
SpringCloud的常用组件如下表:
SpringCloud组件 | 描述 |
---|---|
Spring Cloud Netfix Eureka | Spring Cloud Netfix中的服务治理组件,包含服务注册中心、服务注册与发现机制的实现。 |
Spring Cloud Netfix Ribbon | Spring Cloud Netfix 中的服务调用和客户端负载均衡组件。 |
Spring Cloud Netfix Hystrix | 人称“豪猪哥”,Spring Cloud Netfix的容错管理组件,为服务中出现的延迟和故障提供强大的容错能力。 |
Spring Cloud Netfix Feign | 基于Ribbon和Hystrix的声明式服务调用组件。 |
Spring Cloud Netfix Zuul | Spring Cloud Netfix中的网关组件,提供了智能路由、访问过滤等功能。 |
Spring Cloud Gateway | 一个基于Spring5.0,Spring Boot2.0和Project Reactor等技术开发网关框架,它使用Filter链的方式提供了网关的基本功能,例如安全、监控\指标和限流等。 |
Spring Cloud Config | Spring Cloud的配置管理工具,支持使用Git存储配置内容,实现应用配置的外部化存储,并支持在客户端对配置进行刷新、加密、解密等操作。 |
Spring Cloud Bus | Spring Cloud的事件和消息总线,主要用于在集群中传播事件或状态变化,以触发后续的处理,例如动态刷新配置。 |
Spring Cloud Stream | Spring Cloud的消息中间件组件,它集成了Apache Kafka和RabbitMQ等消息中间件,并通过定义绑定器作为中间层,完美地实现了应用程序与消息中间件之间的隔离。通过向应用程序暴露统一的Channel通道,使得应用程序不需要再考虑各种不同的消息中间件实现就能轻松地发送和接受消息。 |
Spring Cloud Sleuth | Spring Cloud分布式链路跟踪组件,能够完美的整合Twitter的Zipkin。 |
Spring Boot和Spring Cloud的区别与联系:
Spring Boot和Spring Cloud都是Spring大家族的一员,他们在微服务开发中都扮演着十分重要的角色。
1、SpringBoot和SpringCloud分工不同
SpringBoot是一个基于Spring的快速开发框架,它能够帮助开发者快速搭建Web工程,在微服务开发中,SpringBoot专注于快速、方便地开发单个微服务。
SpringCloud是微服务架构下地一站式解决方案。SpringCloud专注于全局微服务地协调和治理工作,换句话说,SpringCloud相当于微服务地大管家,负责将SpringBoot开发地一个个微服务管理起来,并为他们提供配置管理、服务发现、断路器、路由、微代理、事件总线、决策竞选以及分布式会话等服务。
2、SpringCloud是基于SpringBoot实现的
SpringCloud是基于SpringBoot实现的。与SpringBoot类似,SpringCloud也为提供了一系列Starter,这些Starter,这些Starter是SpringCloud使用SpringBoot思想对各个微服务框架再封装的产物。他们屏蔽了这些微服务框架中复杂的配置和实现原理,是开发人眼能够快速、方便地使用SpringCloud搭建一套分布式微服务系统。
3、SpringBoot和SpringCloud依赖项数量不同
SpringBoot属于一种轻量级的框架,构建SpringBoot工程所需的依赖较少。
SpringCloud是一系列微服务框架技术的集合体,它的每个组件都需要一个独立的依赖项(Starter POM),因此想要构建一套完整的SpringCloud工程往往需要大量的依赖项。
4、SpringCloud不能脱离SpringBoot单独运行
SpringBoot不需要SpringCloud就能直接创建可独立运行地工程或模块。
SpringCloud是基于SpringBoot实现的,它不能独立创建工程或模块,更不能脱离SpringBoot独立运行。
SpringCloud版本:
SpringCloud包含了许多子项目,这些子项目都是独立运行内容更新和迭代的,各自都维护着自己的发布版本号,为了避免SpringCloud的版本号与其子项目的版本号混淆,SpringCloud没有采用常见的数字版本号,而是通过一下方式定义版本信息。
{version.name} .{version.number}
Spring Cloud 版本信息说明如下:
- version.name:版本名,采用英国伦敦地铁站的站名来命名,并按照字母表的顺序(即从 A 到 Z)来对应 Spring Cloud 的版本发布顺序,例如第一个版本为 Angel,第二个版本为 Brixton(英国地名),然后依次是 Camden、Dalston、Edgware、Finchley、Greenwich、Hoxton 等。
- version.number:版本号,每一个版本的 Spring Cloud 在更新内容积累到一定的量级或有重大 BUG 修复时,就会发布一个“service releases”版本,简称 SRX 版本,其中 X 为一个递增的数字,例如 Hoxton.SR8 就表示 Hoxton 的第 8 个 Release 版本。
Spring Cloud 版本选择:
在使用 Spring Boot + Spring Cloud 进行微服务开发时,我们需要根据项目中 Spring Boot 的版本来决定 Spring Cloud 版本,否则会出现许多意想不到的错误。
Spring Boot 与 Spring Cloud 的版本对应关系如下表(参考自Spring Cloud 官网)。
Spring Cloud | Spring Boot |
---|---|
2020.0.x (Ilford) | 2.4.x, 2.5.x (从 Spring Cloud 2020.0.3 开始) |
Hoxton | 2.2.x, 2.3.x (从 Spring Cloud SR5 开始) |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
注意:Spring Cloud 官方已经停止对 Dalston、Edgware、Finchley 和 Greenwich 的版本更新。
除了上表中展示的版本对应关系之外,我们还可以使用浏览器访问 https://start.spring.io/actuator/info,获取 Spring Cloud 与 Spring Boot 的版本对应关系