了解Spring Cloud
- 什么是Spring Cloud
- Spring Cloud 的发展背景
- 设计初衷
- Spring Cloud 系统架构
- Spring Cloud Config
- Spring Cloud Netflix
- Spring Cloud Bus
- Spring Cloud Consul
- Spring Cloud Security
- Spring Cloud Sleuth
- Spring Cloud Stream
- Spring Cloud Task
- Spring Cloud Zookeeper
- Spring Cloud Gateway
- Spring Cloud OpenFeign
- Spring Cloud和SpringBoot版本对应关系
- 和Spring Boot的关系
什么是Spring Cloud
Spring Cloud,基于 Spring Boot 提供了一套微服务解决方案,包括服务注册与发现
,配置中心
,全链路监控
,服务网关
,负载均衡
,熔断器
等组件,除了基于NetFlix
的开源组件做高度抽象封装之外,还有一些选型
中立的开源组件。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud 的发展背景
不论是商业应用还是用户应用,在业务初期都很简单,我们通常会把它实现为单体结构的应用。但是,随着业务逐渐发展,产品思想会变得越来越复杂,单体结构的应用也会越来越复杂。这就会给应用带来如下的几个问题:
- 代码结构混乱:业务复杂,导致代码量很大,管理会越来越困难。同时,这也会给业务的快速迭代带来巨大挑战;
- 开发效率变低:开发人员同时开发一套代码,很难避免代码冲突。开发过程会伴随着不断解决冲突的过程,这会严重的影响开发效率;
- 排查解决问题成本高:线上业务发现 bug,修复 bug 的过程可能很简单。但是,由于只有一套代码,需要重新编译、打包、上线,成本很高。
简单的说,spring cloud 的出现就是为了解决单体应用随着系统的复杂度增高,暴露出的各种问题,近年来已经逐渐取代了单体应用。这种趋势将会越来越明显。
设计初衷
协调各个微服务,简化分布式系统开发。
优缺点
同比微服务框架,相比dubbo、Kubernetes有如下几个优点
- 产出于Spring大家族,Spring在企业级开发框架中无人能敌,来头很大,可以保证后续的更新、完善
- 轻轻松松几行代码,注解或者配置就完成了熔断、负载均衡、注册中心的各种平台功能
- Spring Cloud 社区活跃度很高,教程很丰富,遇到问题很容易找到解决方案
- 服务拆分粒度更细,耦合度比较低,有利于资源重复利用,有利于提高开发效率
- 可以更精准的制定优化服务方案,提高系统的可维护性
- 减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发
- 微服务可以是跨平台的,可以用任何一种语言开发
- 适于互联网时代,产品迭代周期更短
同样也有下列几个缺点
- 微服务过多,治理成本高,用的机器也多了
- 分布式开发带来的挑战性,比如,分布式事物,容错
Spring Cloud 系统架构
主要项目
Spring Cloud 的子项目,大致可以分成两类,一类是对现有框架"Spring Boot" 的封装和抽象,也是数量最多的项目,第二类开发了分布式系统的基础设施的实现,如Spring Cloud Stream扮演者就是Kafka,ActiveMQ这样的角色。
Spring Cloud Config
集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。
Spring Cloud Netflix
Netflix OSS 开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。
- Eureka: 服务治理组建,包括服务端的注册中心和客户端的服务发现
- Ribbon: 负载均衡的服务调用组件,具有多种负载均衡调用策略
- Hystrix: 服务容错组件,实现断路器模式,为依赖的服务出错和延迟提供了容错能力
- Feign: 基于Ribbon和 Hystrix 的声明式服务调用组件
- Zuul: Api网关,对请求提供路由及其过滤策略
Spring Cloud Bus
用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置
可以在不重启微服务的情况下,更新配置文件,让其立刻生效。
Spring Cloud Consul
基于Hashicorp Consul的服务治理组件。
Spring Cloud Security
安全工具包,对Zuul代理中的负载均衡OAuth2客户端及登录认证进行支持
Spring Cloud Sleuth
Spring Cloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。
Spring Cloud Stream
轻量级事件驱动微服务框架,可以使用简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。
Spring Cloud Task
用于快速构建短暂、有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性。
Spring Cloud Zookeeper
基于Apache Zookeeper的服务治理组件。
Spring Cloud Gateway
API网关组件,对请求提供路由及过滤功能。
Spring Cloud OpenFeign
基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用,在Spring Cloud 2.0中已经取代Feign成为了一等公民。
Spring Cloud和SpringBoot版本对应关系
Spring Cloud Version | SpringBoot Version |
---|---|
Hoxton | 2.2.x |
Greenwich | 2.1.x |
和Spring Boot的关系
- Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具。Spring -> Spring Boot > Spring Cloud 这样的关系。
- Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系
- Spring Boot专注于快速、方便集成的单个个体微服务,Spring Cloud是关注全局的服务治理框架
- Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,可以不基于Spring Boot吗?不可以