Spring Cloud为开发者提供了一套快速开发分布式系统的组件,Spring Cloud并不推荐重复造轮子,主张利用Spring Boot将其他公司比较成熟的组件进行封装
核心概念:
- 配置中心
- 注册中心
- 服务网关
- 负载均衡
- RPC调用
- 服务熔断
- 服务降级
- 服务限流
- 全局锁
- 控制总线
- 分布式事务
- 服务安全
- 链路追踪
- 集群管理
- 事件驱动
- 任务调度
- 云连接器
- 函数计算
由来:微服务系统开发中,存在很多功能开关和各种参数的配置项,传统的配置文件、数据库等方式无法满足开发人员对配合管理的需求,此时分布式配置中心应运而生。
特点:统一管理、区分环境、实时刷新、权限控制、版本发布、灰度发布
-
配置统一管理:配置中心服务端负责配置的管理(新增、修改、删除、发布),集成了配置中心客户端的微服务程序可以统一从配置中心服务端拉取配置,从而实现整个微服务系统的统一配置管理
-
区分不同环境配置:一个微服务应用中的某些配置项,在不同的环境(开发、测试、生产)通常是不同的,作为分布式配置中心需要具有隔离不同环境的功能,使得同一微服务在不同环境能拉取到对应的配置
-
配置动态实时刷新:当配置中心服务端的配置发生了修改时,配置中心客户端需要实时监听到配置的改变,使得微服务应用程序可以实时获取到最新配置,并不用重新部署应用程序
-
配置的权限控制:在配置中心中,可以针对不同的角色或用户设置对应的权限。
-
配置的版本控制:在使用配置中心的过程中,难免会出现误操作,而这个时候就需要进行版本回退,所以作为配置中心,是一定要支持版本控制的。
-
配置的灰度发布:在需要发布一项配置时,如果需要发布多个实例(集群),那么此时可以只发布到部分实例,待测试通过后,再发布到全部实例,这就是配置的灰度发布
注册中心相当于微服务架构中的地址通讯录,每个微服务会将服务及其地址注册到注册中心,服务消费者在调用某个微服务之前会先从注册中心查找服务地址,然后进行调用。
常见注册中心组件:Nacos、Consul、Zookeeper、Eureka
特点:服务的自动注册、服务的健康检查、服务的自动发现
- 服务的自动注册:微服务应用在启动时,通过注册中心客户端组件,将服务相关信息自动注册给注册中心服务端
- 服务的健康检查:当已经注册到注册中心的微服务实例宕机后,注册中心服务端能发现实例已经宕机,并把相关信息从注册中心删除掉
- 服务的自动发现:服务消费者需要能实时监听到注册中心中服务信息的变更,以在能真正调用服务时不会出现错误
服务网关是整个微服务架构中对外的统一入口,所有的客户端都通过统一的网关使用微服务,服务网关起到了隔离外部访问和内部系统的作用,服务网关是微服务架构中的一个标配组件
常见服务网关组件:Spring Cloud GateWay、Kong、Zuul
特点:高并发、安全、路由转发、监控与限流、灰度发布、服务重试、服务别名
- 高并发:作为微服务架构中的对外入口,必须能支持高并发,能承担更高的并发量,并保证高性能
- 安全:服务网关通常具有权限认证、黑名单、白名单等保证网关安全的功能
- 路由转发:服务网关接收到外部请求后,要求服务网关能根据请求和配置将请求转发到对应的后端服务上去
- 监控与限流:作为整个系统的流量入口,服务网关要能监控流量情况,遇到突发情况时能及时限流,保证整个系统的稳定
- 灰度发布:当某个微服务有新版本更新上线时,可以利用服务网关进行流量切换,实现该微服务的灰度发布
- 服务重试:当服务网关调用某个微服务失败后,可以通过服务网关设置重试策略来重新尝试调用该服务
- 服务别名:可以在服务网关中给某个或某些微服务设置别名,从而对外屏蔽内部微服务相关信息
负载均衡是指将访问流量根据负载均衡算法分发到后端服务器的流量分发控制服务,通过负载均衡可以提高微服务整体的可用性以及性能
常见的负载均衡组件:nginx、ribbon、lvs
常见负载均衡算法:简单轮询、加权轮询、简单随机、加权随机、一致性哈希、最小活跃数
-
简单轮询:将请求安顺讯分发给后端服务器上,不关心服务当前的状态,比如后端服务器的性能、当前的负载
-
加权轮询:根据服务器自身的性能给服务器设置不同的权重,将请求按顺序和权重分发给后端服务器,可以让性能高的机器处理更多的请求
-
简单随机:将请求随机分发给后端服务器上,请求越多,各个服务器接收到的请求越破平均
-
加权随机:根据服务器自身的性能给服务器设置不同的权重,将请求按各个服务器的权重随机分发给后端服务器
-
一致性哈希:根据请求的客户端ip、或请求参数通过哈希算法得到一个数值,利用该数值取模映射出对应的后端服务器,这样能保证同一个客户端或相同参数的请求每次都使用同一台服务器
-
最小活跃数:统计每台服务器上当前正在处理的请求数,也就是请求活跃数,将请求分发给活跃数最少的后台服务器
RPC就是远程过程调用,对于Java而言,RPC就是远程方法调用,表示一个方法调用远程的另外一个方法,微服务架构中一个微服务中的方法调用另外一个微服务中的方法就可以用RPC调用
常用的RPC调用组件或框架:Dubbo、gRPC、Thrift、Fegin
RPC调用和HTTP调用区别:
HTTP调用使用的是HTTP协议,是网络7层中的应用层协议,HTTP协议规定了数据传输的格式,Restful风格就可以通过HTTP协议来实现。
RPC不是网络层面的协议,而是更上层的更灵活的通讯协议,RPC调用可以自定义数据格式、数据传输方式,只要能保证调用到远程方法即可。
7.服务熔断服务熔断是指,当服务A调用的某服务B不可用时,上游服务A为了保证自己不受影响,从而不再调用服务B,直接返回一个结果,减轻服务A和服务B的压力,直到服务B恢复
什么是熔断器:实现熔断功能的叫熔断器,代表组件:Sentinel、Hystrix
熔断器的三种状态:
Close:关闭状态,默认关闭状态,当调用失败次数达到阈值时则启动熔断器
Open:打开状态,此时不会真正的调用下游服务,而是直接返回,当过了某段时间后,熔断器会进入到半打开状态
Half-Open:半打开状态,此时会有部分请求访问下游服务,如果这些请求都调用成功了,则认为下游服务恢复了,那么则关闭熔断器,否则熔断器回到打开状态
8.服务降级服务降级是指,当发现系统压力过载时,可以通过关闭某个服务,或限流某个服务来减轻系统压力,这就是服务降级
服务降级与服务熔断的区别:
- 都是为了防止系统崩溃
- 都让用户体验到某些功能暂时不可用
- 熔断是下游服务故障触发的,降级是为了降低系统负载
什么是服务雪崩:
服务A调用服务B,服务B调用服务C,此时大量请求突然调用服务A,假如服务A本身能扛住这些请求,但是服务C可能是底层服务,本身调用量较大,导致服务C扛不住而请求堆积,从而服务B请求堆积,从而服务A不可用,这就是服务雪崩,解决方式就是服务降级和服务熔断。
9.服务限流10.全局锁服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,在秒杀中,限流是非常重要的
常用的限流算法:固定窗口计数器、滑动窗口计数器、令牌桶、漏桶
全局锁就是我们常说的分布式锁,是分布式、微服务架构中的一种锁机制,通过全局锁可以很好在分布式系统中互斥使用共享资源
全局锁实现原理:
- Zookeeper:利用Zookeeper的watch机制与临时结点特性
- Redis:利用Redis的消费订阅机制与数据超时特性
12.分布式事务控制总线也称消息总线,是微服务系统中用来连接系统中所有节点的,微服务中所有节点都可以通过控制总线来进行通讯
Spring Cloud Bus就是控制总线的具体实现,某个微服务可以通过Spring Cloud Bus来广播事件,而其他微服务可以接收到事件并进行相关处理
再一次请求中,所涉及的分散在多个微服务上的操作要保证同时成功或者同时失败,这就是分布式事务。
常见的分布式事务框架:seata、Icn、bytetcc
实现分布式事务的方式:
- 直接通过数据库
- 通过消息队列
- 两阶段提交
- 三阶段提交
分布式事务的三个角色:
- 事务协调器
- 事务管理者
- 资源管理者
对于一个企业来说,微服务系统中服务安全性越来越重要,服务的认证和授权是企业必须具备的,Spring Cloud Security是Spring Cloud提供的微服务安全组件
服务安全的特性:
- 可扩展、可配置的认证和授权
- 单点登录
- 防止会话固定、点击劫持、跨网站请求伪造等攻击
- 与Servlet API集成
链路追踪为微服务提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等功能,可以帮助开发者快速分析和诊断微服务框架下的性能瓶颈
常用的链路追踪技术:Sleuth、Zipkin
链路追踪的功能:
- 分布式调用链查询和诊断
- 应用性能实时汇总
- 分布式拓扑动态发现
- 多语言开发程序接入
- 丰富的下游对接场景
集群管理是指对于微服务系统中的某个服务集群所提供的针对集群管理功能,Spring Cloud Cluster的职责就是集群管理
集群管理有哪些功能:
- 领导者选举
- 一致性存储
- 集群状态管理
- 一次性tokens
事件驱动就是消息驱动,在Spring Cloud中提供了Spring Cloud Stream来实现事件驱动,有了事件驱动,在微服务系统中可以更方便的通过发送消息来进行通信
事件驱动中的概念:
- 目标绑定器,目标指的是Kafaka或rocketMq
- 绑定桥梁,连接消息系统和应用程序
- 消息,应用程序和消息系统之间传递的数据
事件驱动的特点:
- 异步处理
- 流量削峰
- 服务解耦
18.函数计算云连接器可以用来更方便的连接部署在云上的各种服务,Spring Cloud中的Spring Cloud Connectors就是云连接器组件的实现
目前支持的云平台:Spring Cloud Cloud Foundry、Spring Cloud HeroKu
函数计算也称函数编程,是实现Serverless的一种手段,企业如果能够使用函数计算能大大节约成本,在Spring Cloud中提供了Spring Cloud Funtion来开发基于云平台的函数计算
函数计算特点:
- 支持响应式等编程风格
- 输入输出类型透明转化
- 流数据处理
- 同一个JVM中运行多版本函数
- 打包函数到指定云平台



