一、分布式配置中心
1.1、特点
- 统一管理
- 区分环境
- 实时刷新
- 权限控制
- 版本控制
- 灰度发布
1.2、具体功能
1.2.1、配置的统一管理
配置中心服务端
负责配置的管理(新增、修改、删除、发布),集成了配置中心客户端
的微服务程序可以统一从配置中心拉取配置,从而实现整个微服务系统的统一配置管理。
1.2.2、区分不同环境的配置
一个微服务应用中的某些配置项,在不同的环境(开发、测试、生产)通常是不同的
,作为分布式配置中心需要具有隔离不同环境
的功能,使得同一个微服务在不同环境能拉取到对应的配置
1.2.3、配置动态实时刷新
当配置中心服务端中的配置发生了修改时
,配置中心客户端需要能够实时监听到配置的改变
,使得微服务应用程序可以实时获取到最新配置,并且不用重新部署应用程序
。
1.2.4、配置的权限控制
在配置中心中,可以针对不同的角色或用户设置对应的权限
,比如张三可以新建配置,但不能发布配置;比如李四可以查看配置但不能修改配置。
1.2.5、配置的版本控制
在使用配置中心的过程中,难免会出现误操作
,而这时候就需要进行版本回退,所以作为配置中心,一定要支持版本控制的
。
1.2.6、配置的灰度发布
在需要发布一项配置时,如果需要发布到多个实例
(集群),那么此时可以只发布到部分实例
,待测试通过以后,再发不到全部实例,这就是配置的灰度发布
。
1.3、常用配置中心组件
- Spring Cloud Config(Spring)
- Nacos(阿里)
- Apollo(携程)
- consul(Google)
二、服务网关
2.1、什么是服务网关
服务网关是整个微服务架构中对外的统一入口
,所有的客户端都通过统一的网关使用微服务,服务网关起到了隔离外部访问和内部系统的作用
,服务网关是微服务架构中的一个标配组件
。
2.2、服务网关的特点
- 高并发
- 安全
- 路由转发
- 监控与限流
- 灰度发布
- 服务重试
- 服务别名
2.3、具体功能
2.3.1、高并发
作为微服务架构中的对外入口,必须支持高并发,能承担更高的并发量,并保证高性能。
2.3.2、安全
服务网关通常具有权限认证,黑名单,白名单等保证网关安全的功能。
2.3.3、路由转发
服务网关接收到外部请求后,要求服务网关能根据请求和配置将请求转发到对应的后端微服务上。
2.3.4、监控与限流
作为整个系统的流量入口,服务网关要能监控流量的情况,遇到突发情况时,能及时限流,保证整个系统的稳定性。
2.3.5、灰度发布
当某个微服务有有新版本更新上线时,可以利用微服务网关进行流量的切换,实现该微服务的灰度发布。
2.3.6、服务重试
当服务网关调用某个微服务失败后,可以通过服务网关设置重试策略来重新尝试调用该服务。
2.3.7、服务别名
可以在服务网关中给某个或者某些微服务设置别名,从而对外屏蔽内部微服务相关信息。
2.4、常见服务网关组件
- Kong
- Zull
- Spring Cloud Gateway
三、负载均衡
3.1、什么是负载均衡
负载均衡是指将访问流量根据负载均衡算法发到后端服务器的流量分发控制服务,通过负载均衡可以提高微服务的可用性以及性能。
3.2、常用负载均衡算法
- 简单轮询
- 加权轮询
- 简单随机
- 加权随机
- 一致性哈希
- 最小活跃数
3.3、常用算法说明
3.3.1、简单轮询
将请求按顺序分发给后端服务器上,不关心服务器当前的状态,比如后端服务器的性能、当前的负载。
3.3.2、加权轮询
根据服务器自身的性能给服务器设置不同的权重,将请求按顺序和权重分发给后端服务器,可以让性能高的机器处理更多的请求
3.3.3、简单随机
将请求随机分发给后端服务器上,请求越多,各个服务器接收到的请求越平均
3.3.4、加权随机
根据服务器自身的性能给服务器设置不同的权重,将请求按各个服务器的权重随机分发给后端服务器
3.3.5、一致性哈希
根据请求的客户端ip、或请求参数通过哈希算法得到一个数值,利用该数值取模映射出对应的后端服务器,这样能保证同一个客户端或相同参数的请求每次都使用同一台服务器
3.3.6、最小活跃数
统计每台服务器上当前正在处理的请求数,也就是请求活跃数,将请求分发给活跃数最少的后台服务器
3.4、常用负载均衡组件
- nginx
- lvs
- ribbon
四、RPC 调用
4.1、什么是 RPC 调用
RPC 就是远程过程调用,对于 Java 程序而言,RPC 就是远程方法调用,表示一个方法调用远程的另一个方法,微服务架构中一个服务调用另外一个服务就可以用 PPC 调用
4.2、RPC 调用与 HTTP 调用区别
HTTP 调用使用的是 HTTP 协议,是网络 7 层中的应用层协议,HTTP 协规定了数据传输的格式,Restful 风格就可以通过 HTTP 协议来实现。
RPC 不是网络层面的协议,而是更上层的更灵活的通信协议,RPC 调用可以自定义数据格式、数据传输方式,只要能保证调用到远程方法即可。
4.3、常用的 RPC 调用组件或框架
- Dubbo
- gRPC
- Thrift
- Feign
五、服务熔断
5.1、什么是服务熔断
服务熔断是指,当服务 A 调用的某个服务 B 不可用时,上游服务 A 为了保证自己不受影响,从而不再调用服务 B,直接返回一个结果,减轻服务 A 和 服务 B 的压力,直到服务 B 恢复。
5.2、什么是熔断器
实现熔断功能的叫熔断器,代表组件为 Hystrix、Sentinel。
5.3、熔断器的三种状态
- Closed:关闭状态
- Open:打开状态
- Half-Open:半打开状态
5.4、状态详解
5.4.1、Closed:关闭状态
当调用失败次数达到阈值时则启动熔断器
5.4.2、Open:打开状态
此时不会真正的调用下游服务,而是直接返回,当过了,某段时间后,熔断器会进入到半打开状态。
5.4.3、Half-Open:半打开状态
此时会有部分请求访问下游服务,如果这些请求都调用成功了,则认为下游服务恢复了,那么则关闭熔断器,否则熔断器回到打开状态
六、服务降级
6.1、什么是服务降级
服务降级是指,当发现系统压力过载时,可以通过关闭某个服务,或限流某个服务来减轻系统压力,这就是服务降级。
6.2、服务降级与服务熔断的区别
- 都是为了防止系统崩溃
- 都让用户体验到某些功能暂时不可用
- 熔断是下游服务故障触发的,降级是为了降低系统负载
6.3、什么是服务雪崩
服务 A 调用服务 B,服务 B 调用 C,此时大量请求突然调用服务 A,假如服务 A 本身能抗住这些请求,但是服务 C 抗不住,导致服务 C 请求堆积,从而服务 B 请求堆积,从而服务 A不可用,这就是服务雪崩,解决方式就是服务降级和服务熔断。
七、什么是服务限流
7.1、什么是服务限流
服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,在秒杀中,限流是非常重要的
7.2、常用的限流算法
- 固定窗口计数器
- 滑动窗口计数器
- 令牌桶
- 漏桶
八、控制总线
8.1、什么是控制总线
控制总线也称消息总线,是微服务系统中用来连接系统中所有服务节点的,微服务中的所有服务节点可以通过控制总线来进行通讯。
8.2、控制总线应用场景
目前,Spring Cloud Bus 就是控制总线的具体实现,某个微服务可以通过 Spring Cloud Bus 来广播事件,而其它微服务可以接收到事件进行相关处理。
九、分布式事务
9.1、什么是分布式事务
在一次请求中,所涉及的分散在多个微服务上的操作要保证同时成功或同时失败,这就是分布式事务,比如创建订单、减库存、银行转账等。
9.2、实现分布式事务的方式
- 直接通过数据库
- 通过消息队列
- 两阶段提交
- 三阶段提交
9.3、分布式事务中的三个角色
- 事务协调器
- 事务管理者
- 资源管理者
9.4、分布式事务常用框架
- seata
- Icn
- bytetcc
十、服务安全
10.1、什么是服务安全
对于一个企业来说,微服务系统中的服务安全性越来越重要,服务的认证和授权是企业必须具备的,Spring Cloud Security 是 Spring Cloud 提供的微服务安全组件。
10.2、服务安全性特性
- 可拓展、可配置的认证和授权
- 单点登录
- 防止会话固定、点击劫持、跨网站请求伪造等攻击
- 与 Servlet API 集成
十一、链路追踪
11.1、什么是链路追踪
链路追踪为微服务系统提供了完整的调用链路还原、调用请求量统计、路拓扑、应用依赖分析等功能,可以帮助开发者快速分析和诊断微服务架构下的性能瓶颈
11.2、链路追踪的功能
- 分布式调用链诊断
- 应用性能实时汇总
- 分布式拓扑动态发现
- 多语言开发程序接入
- 丰富的下游对接场景
11.3、常用的链路追踪技术
- SkyWalking
- Sleuth
- Zipkin
十二、集群管理
12.1、什么是集群管理
集群管理是指,对于微服务系统中的某个服务集群所提供的针对集群管理的功能,Spring Cloud Cluster 的职责就是集群管理
12.2、集群管理有哪些功能
- 领导者选举
- 一致性存储
- 集群状态管理
- 一次性 tokens
十三、事件驱动
13.1、什么是事件驱动
事件驱动就是消息驱动,在Spring Cloud中提供了Spring Cloud Stream 来实现事件驱动,有了事件驱动,在微服务系统中可以更方便的通过发送消息来进行通信
13.2、事件驱动中的概念
- 目标绑定器:目标指的是 kafka 或 rabbitmq
- 绑定桥梁:连接消息系统和应用程序
- 消息:应用程序和消息系统之间传递的数据
13.3、事件驱动特点
- 异步处理
- 流量削峰
- 服务解耦
十四、云连接器
14.1、什么是云连接器
云连接器可以用来更方便的连接部署在云上的各种服务,Spring Cloud 中 Spring Cloud Connector 就是云连接器的实现。
14.2、目前支持的云平台
- Spring Cloud Cloud Foundry
- Spring Cloud Heroku
十五、函数计算
15.1、什么是函数计算
函数计算也称为函数式编程,是实现 Serverless 的一种手段,企业如果能使用函数计算能大大节约成本,在Spring Cloud中提供了Spring CloudFunction 来开发基于云平台的函数计算
15.2、函数计算特点
- 支持响应式等编程风格
- 输入输出类型透明化
- 流数据处理
- 同一个 jvm 中运行多版本函数
- 打包函数到指定云平台