Spring Cloud 核心概念
SpringCloud为开发者提供了一套快速开发分布式系统的组件,Spring Cloud并不推荐重复造轮子,主张利用Spring Boot将其他公司较成熟的组件进行封装。
-
1.配置中心
-
2.注册中心
-
3.服务网关
-
4.负载均衡
-
5.RPC调用
-
6.服务熔断
-
7.服务降级
-
8.服务限流
-
9.全局锁
-
10.控制总线
-
11.分布式事务
-
12.服务安全
-
13.链路追踪
-
14.集群管理
-
15.事件驱动
-
16.任务调度
-
17.云连接器
-
18.函数计算
1. 分布式配置中心
1.1 概念
微服务系统中,存在很多功能开关和各种参数的配置项,传统的配置文件,数据库等方式,无法满足开发人员对配合管理的需求,此时,分布式配置中心应运而生。
1.2 特点
-
统一管理
-
配置中心服务端负责配置的管理(新增、修改、删除、发布),集成了配置中心客户端的微服务程序 可以统一从配置中心服务端拉取配置,从而实现整个微服务系统的统一配置管理。
-
-
区分环境
-
一个微服务应用中的某些配置项,在不同的环境(开发、测试、生产)通常是不同的,作为分布式配置中心需要具有隔离不同环境的功能,使得同一个微服务在不同环境能拉取到对应的配置。
-
-
实时刷新
-
当配置中心服务端中的配置发生修改时,配置中心客户端需要能实时监听到配置的改变,使得微服务应用程序可以实时获取到最新配置,并且不用重新部署应用程序。
-
-
权限控制
-
在配置中心中,可以针对不同的角色或用户设置对应的权限,比如张三可以新建配置项,但不能发布配置;比如小明可以查看配置项,但不能修改配置。
-
-
版本控制
-
在使用配置中心的过程中,难免会出现误操作,而这个时候就需要进行版本回退,所以作为配置中心,是一定要支持版本控制的。
-
-
灰度发布
-
在需要发布一项配置时,如果需要发布到多个实例(集群),那么此时可以只发布到部分实例,待测试提供后,再发布到全部实例,这就是配置的灰度发布。
-
1.3 常见的配置中心组件
-
Spring Cloud Config
-
阿里Nacos
-
携程Apollo
-
谷歌Consul
2. 分布式注册中心
2.1 概念
注册中心相当于微服务架构中的地址通讯录,每个微服务会将服务及其地址注册到注册中心,服务消费者再调用某个微服务之前会先从注册中心查找服务地址,然后进行调用。
2.2 特点
-
服务的自动注册
-
微服务应用在启动时,通过注册中心客户端组件,将服务相关信息自动注册到注册中心服务端
-
-
服务的健康检查
-
当已经注册到注册中心的微服务实例宕机后,注册中心服务端能够发现实例已经宕机,并将相关信息从注册中心删除掉
-
-
服务的自动发现
-
服务消费者需要能实时监听到注册中心中服务信息的变更,以能在真正调用服务时不会出现错误。
-
2.3 常见的注册中心组件
-
apache Zookeeper
-
Spring Cloud Eureka
-
阿里 Nacos
-
谷歌 Consul
3. 服务网关
3.1 概念
服务网关是整个微服务架构中对外的统一入口,所有的客户端都通过统一的网关使用微服务,微服务网关起到了隔离外部访问和内部系统的作用,服务网关是微服务架构中的一个标配组件。
3.2 特点
-
高并发
-
作为微服务架构中的对外入口,必须能支持高并发,能承担更高的并发量,并保证高性能
-
-
安全
-
服务⽹关通常具有权限认证、黑名单、白名单等保证安全功能
-
-
路由转发
-
服务网关接收到外部请求后,要求能够转发到后端的微服务上去
-
-
监控与限流
-
作为整个系统的流量⼊⼝,服务网关要能监控流量情况,遇到突发情况时能及时限流,保证整个系统的稳定
-
-
灰度发布
-
当某个微服务有新版本更新上线时,可以利⽤服务⽹关进⾏流量的切换,实现灰度发布
-
-
服务重试
-
当服务⽹关调⽤某个微服务失败后,可以设置重试策略来重新尝试调⽤该服务
-
-
服务别名
-
可以在服务⽹关中给某个或某些微服务设置别名,从而对外屏蔽内部微服务相关信息
-
3.3 常见的服务网关组件
-
apache Kong
-
NetFlix Zuul
-
Spring Cloud Gateway
4. 负载均衡
4.1 概念
负载均衡是指将访问流量根据负载均衡算法分发到后端服务器的流量分发控制服务,通过负载均衡可以提 ⾼微服务的可⽤性以及性能,可以使⽤具有负载均衡功能的硬件或软件来提供负载均衡服务
4.2 常用算法
-
简单轮训
-
将请求按顺序分发给后端服务器上,不关⼼服务器当前的状态,⽐如后端服务器的性能、当前的负载
-
-
加权轮训
-
根据服务器自身的性能给服务器设置不同的权重,将请求按顺序和权重分发给后端服务器,可以让性能⾼ 的机器处理更多的请求
-
-
简单随机
-
将请求随机分发给后端服务器上,请求越多,各个服务器接收到的请求越平均
-
-
加权随机
-
根据服务器⾃身的性能给服务器设置不同的权重,将请求按各个服务器的权重随机分发给后端服务器
-
-
一致性哈希
-
根据请求的客户端ip、或请求参数通过哈希算法得到⼀个数值,利⽤该数值取模映射出对应的后端服务 器,这样能保证同⼀个客户端或相同参数的请求每次都使⽤同⼀台服务器
-
-
最小活跃数
-
统计每台服务器上当前正在处理的请求数,也就是请求活跃数,将请求分发给活跃数最少的后台服务器
-
4.3 常见负载均衡组件
-
nginx
-
lvs
-
haproxy
-
ribbon
5. RPC调用
5.1 概念
RPC就是远程过程调⽤,对于Java程序⽽⾔,RPC就是远程⽅法调⽤,表示⼀个⽅法调⽤远程的另外⼀个 ⽅法,微服务架构中⼀个服务调⽤另外⼀个服务就可以⽤RPC调⽤。
5.2 RPC调用与HTTP调用区别
-
HTTP调⽤使⽤的是HTTP协议,是⽹络7层中的应⽤层协议,HTTP协议规定了数据传输的格式, Restful⻛格就可以通过HTTP协议来实现。
-
RPC调⽤时不是⽹络层⾯的协议,而是更上层的更灵活的通信协议,RPC调⽤可以⾃定义数据格式、数 据传输⽅式,只要能保证调⽤到远程⽅法即可。
5.3 常用的RPC调用组件或框架
-
Dubbo
-
gRPC
-
Thrift
-
Feign
6. 服务熔断
6.1 概念
服务熔断是指,当服务A调⽤的某个服务B不可⽤时,上游服务A为了保证⾃⼰不受影响,从⽽不再调⽤服 务B,直接返回⼀个结果,减轻服务A和服务B的压⼒,直到服务B恢复。
6.2 熔断器
实现熔断功能的叫熔断器,代表组件为Hystrix、Sentinel
6.3 熔断器的三种状态
-
Closed:关闭状态,当调用失败次数达到阈值则启动熔断器
-
Open:打开状态,此时不会真正的调用下游服务,而是直接返回,当过了某段时间后,熔断器会进入到半打开状态
-
Half-Open:半打开状态,此时会有部分请求访问下游服务,如果这些请求都调用成功,则认为下游恢复了,关闭熔断器,否则熔断器回到打开状态
7. 服务降级
7.1 概念
服务降级是指,当发现系统压⼒过载时,可以通过关闭某个服务,或限流某个服务来减轻系统压⼒,这就 是服务降级。
7.2 服务降级与服务熔断的区别
相同点:
-
都是为了防止系统崩溃
-
都让⽤户体验到某些功能暂时不可⽤
不同点:
-
熔断是下游服务故障触发的
-
降级是为了降低系统负载
7.3 服务雪崩
当服务A调⽤服务B,服务B调⽤C,此时⼤量请求突然请求服务A,假如服务A本身能抗住这些请求,但是 如果服务C抗不住,导致服务C请求堆积,从⽽服务B请求堆积,从⽽服务A不可⽤,这就是服务雪崩,
解决办法就是服务降级和服务熔断。
8. 服务限流
8.1 概念
服务限流是指在⾼并发请求下,为了保护系统,可以对访问服务的请求进⾏数量上的限制,从⽽防⽌系统 不被⼤量请求压垮,在秒杀中,限流是⾮常重要的。
8.2 常用的限流算法
-
固定窗口计数器
-
滑动窗口计数器
-
令牌桶
-
漏桶
9. 全局锁
9.1 概念
全局锁,就是我们常说的分布式锁,是分布式、微服务架构中的⼀种锁机制,通过全局锁可以很好的在分 布式系统中互斥使⽤共享资源。
9.2 实现原理
Zookeeper:利⽤Zookeeper的watch机制与临时节点特性
Redis:利⽤Redis的消费订阅机制与数据超时特性
9.3 常用的实现方式
-
Redisson
-
Curator
10. 控制总线
10.1 概念
控制总线也称消息总线,是微服务系统中⽤来连接系统中所有服务节点的,微服务中的所有服务节点可以 通过控制总线来进⾏通讯
10.2 应用场景
⽬前,Spring Cloud Bus就是控制总线的具体实现,微服务系统中的某个服务可以通过Spring Cloud Bus来⼴播事件,⽽事件消费者,也就是其他微服务可以接收到事件进⾏相关处理,⽐如可以刷新配置、清空缓存等。
11. 分布式事务
11.1 概念
在⼀次请求中,所涉及的分散在多个微服务上的操作要保证同时成功或同时失败,这就是分布式事务,⽐ 如创建订单减库存、银⾏转账等。
11.2 实现方式
-
直接通过数据库
-
通过消息队列
-
2PC
-
3PC
11.3 三个角色
-
事务协调器
-
事务管理者
-
资源管理者
11.4 常用框架
-
seata
-
lcn
-
bytetcc
12. 服务安全
12.1 概念
对于⼀个企业来说,微服务系统中的服务安全性越来越重要,服务的认证和授权是企业必需具备的, Spring Cloud Security是Spring Cloud提供的微服务安全组件
12.2 特性
-
可扩展、可配置的认证和授权
-
单点登录
-
防⽌会话固定、点击劫持、跨⽹站请求伪造等共计
-
与Servlet API集成
13. 链路追踪
13.1 概念
链路追踪为微服务系统提供了完整的调⽤链路还原、调⽤请求量统计、链路拓扑、应⽤依赖分析等功能, 可以帮助开发者快速分析和诊断微服务架构下的性能瓶颈,提⾼微服务时代下的开发诊断效率
13.2 功能
-
分布式调⽤链查询和诊断
-
应⽤性能实时汇总
-
分布式拓扑动态发现
-
多语⾔开发程序接⼊
-
丰富的下游对接场景
13.3 常用技术
-
Spring Cloud Sleuth
-
Zipkin
14. 集群管理
14.1 概念
集群管理是指,对于微服务系统中的某个服务集群所提供的针对集群管理的功能,Spring Cloud Cluster 的职责就是集群管理
14.2 功能
-
领导者选举
-
⼀致性存储
-
集群状态
-
⼀次性tokens
15. 事件驱动
15.1 概念
事件驱动就是消息驱动,在Spring Cloud中提⾼了Spring Cloud Stream来实现事件驱动,有了事件驱 动,在微服务系统中可以更⽅便的通过发送消息来进⾏通信
15.2 事件驱动中的概念
-
⽬标绑定器,⽬标指的是kafka或rabbitmq
-
绑定桥梁,连接消息系统和应⽤程序
-
消息,应⽤程序和消息系统之间传递的数据
15.3 特点
-
异步处理
-
流量削峰
-
服务解耦
16. 任务调度
16.1 概念
任务调度是指可以指定时间或周期,定时执⾏某个微服务或某个⽅法,在Spring Cloud中Spring Cloud Task就是任务调度的实现
17. 云连接器
17.1 概念
云连接器可以⽤来更⽅便的连接部署在云上的各种服务,Spring Cloud中Spring Cloud Connectors就是 云连接器的组件实现
17.2 目前支持的云平台
-
Spring Cloud Cloud Foundry
-
Spring Cloud Heroku
18. 函数计算
18.1 概念
函数计算也成为函数式编程,是实现Serverless的⼀种⼿段,企业如果能使⽤函数计算能⼤⼤节约成本, 在Spring Cloud中提供了Spring Cloud Function来开发基于云平台的函数计算
18.2 特点
-
⽀持响应式等编程⻛格
-
输⼊输出类型透明转化
-
流数据处理
-
同⼀个jvm中运⾏多版本函数
-
打包函数到指定云平台