SpringCloud它是一个提供一些服务框架的服务治理平台。它包括:服务注册和发现、配置中心、信息中心、负载平衡、数据监控等。包装了微服务基础架构框架Netflix云平台和多个开源组件Spring boot框架集成。
SpringCloud它还为开发人员提供了快速构建分布式系统的工具。开发人员可以快速启动服务或构建应用程序,并可以快速连接云平台资源。微服务是一个服务单元,可以独立部署、水平扩展和访问(或拥有独立数据库)。Spring cloud是这些微服务的经理。采用微服务架构后,将会有大量的项目。Spring cloud作为管理员,这些微服务需要很好的管理。当然,它需要很多兄弟的帮助。
随着微服务的普及,国内外各大互联网公司在微服务架构中分享了各种问题的解决方案和开源框架。
在这种情况下,要建立一个微分布式微服务系统,就需要从多种解决方案中选择这些问题, Spring Cloud 被称为构建分布式微服务系统的全家桶
整合市场上成熟验证的微服务框架,通过 Spring Boot 重新包装、屏蔽和调整复杂的配置和实现原则,最终为开发人员提供了一套简单、易于理解、易于部署和维护的分布式系统开发工具包。Spring Cloud 中包含了 spring-cloud-config、spring-cloud-bus 等近 20 个人项目在服务治理、服务网关、智能路由、负载平衡、断路器、监控跟踪、分布式消息队列、配置管理等领域提供解决方案。
Spring Cloud 常用组件
- :阿里巴巴开源 Dubbo 和当网在其基础上扩展 DubboX、Netflix 的 Eureka 以及 Apache 的 Consul 等。
- :百度的 Disconf、Netflix 的 Archaius、360 的 QConf、携程的 Apollo 以及 Spring Cloud 的 Config等。
- :当当网的 Elastic-Job、LinkedIn 的 Azkaban 以及 Spring Cloud 的 Task 等。
- :京东的 Hydra、Spring Cloud 的 Sleuth 以及 Twitter 的 Zipkin 等。
- 这些微服务框架或解决方案都有以下解决方案 2 个特点:
- 互联网公司对于相同的微服务问题提供不同的解决方案。
- 微服务框架或解决方案只能解决微服务中的一个或几个问题,对其他问题无能为力。
- Spring Cloud包括 Spring Cloud Gateway、Spring Cloud Config、Spring Cloud Bus 等近 20 服务组件提供服务管理、服务网关、智能路由、负载平衡、熔断器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。 Spring Cloud 常用组件如下表所示。
Spring Cloud 组件 | 描述 |
---|---|
Spring Cloud Netflix Eureka | Spring CloudNetflix 服务治理组件包括实现服务注册中心、服务注册和发现机制。 |
Spring Cloud Netflix Ribbon | Spring Cloud Netflix 服务调用和客户端负载平衡组件。 |
Spring Cloud Netflix Hystrix | 人称豪猪哥,Spring CloudNetflix容错管理组件为服务中的延迟和故障提供了强大的容错能力。 |
Spring Cloud Netflix Feign | 基于 Ribbon 和 Hystrix 声明服务调用组件。 |
Spring Cloud Netflix Zuul | SpringCloud Netflix 提供智能路由、访问过滤等功能的网关组件。 |
Spring Cloud Gateway | 一个基于 Spring 5.0,Spring Boot 2.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. Spring Boot 和 Spring Cloud 分工不同
Spring Boot 是一个基于 Spring 它可以帮助开发者快速构建框架 Web 工程。在微服务开发中,Spring Boot 专注于快速方便地开发个人微服务。 Spring Cloud 是微服务架构下的一站式解决方案。Spring Cloud 专注于全局微服务的协调和治理工作。换句话说,Spring Cloud 相当于微服务的大管家,负责 Spring Boot 开发的微服务逐一管理,提供配置管理、服务发现、断路器、路由、微代理、事件总线、决策竞选、分布式会话等服务。
2. Spring Cloud 是基于 Spring Boot 实现的
Spring Cloud 是基于 Spring Boot 实现的。与 Spring Boot 类似,Spring Cloud 还提供了一系列 Starter,这些 Starter 是 Spring Cloud 使用 Spring Boot 重新包装每个微服务框架的产品。它们屏蔽了这些微服务框架中复杂的配置和实现原理,使开发人员能够快速方便地使用 Spring Cloud 构建分布式微服务系统。
3. Spring Boot 和 Spring Cloud 不同数量的依赖项
Spring Boot 构建轻量级框架 Spring Boot 工程依赖性较小。 Spring Cloud 它是一系列微服务框架技术的集合,每个组件都需要独立依赖项目(Starter POM),因此,我想建立一套完整的 Spring Cloud 工程往往需要大量的依赖。
4. Spring Cloud 不能脱离 Spring Boot 单独运行
Spring Boot 不需要 Spring Cloud,可直接创建独立运行的工程或模块。 Spring Cloud 是基于 Spring Boot 它不能独立创建项目或模块,更不能脱离 Spring Boot 独立运行。
注意:虽然 Spring Boot 可用于开发个微服务,但它并不具备管理和协调微服务的能力,因此它只能算是一个微服务快速开发框架,而非微服务框架。
Spring Cloud 版本
Spring Cloud 包含了许多子项目(组件),这些子项目都是独立进行内容更新和迭代的,各自都维护着自己的发布版本号。为了避免 Spring Cloud 的版本号与其子项目的版本号混淆,Spring Cloud 没有采用常见的数字版本号,而是通过以下方式定义版本信息。
{version.name} .{version.number}
Spring Cloud 版本信息说明如下:
- :版本名,采用英国伦敦地铁站的站名来命名,并按照字母表的顺序(即从 A 到 Z)来对应 Spring Cloud 的版本发布顺序,例如第一个版本为 Angel,第二个版本为 Brixton(英国地名),然后依次是 Camden、Dalston、Edgware、Finchley、Greenwich、Hoxton 等。
- :版本号,每一个版本的 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 |