这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
1.主要内容
- 微服务架构的由来和基本介绍
- 微服务架构的原理和特征
- 核心服务治理
- 服务治理实践
2.本节详细内容
微服务架构介绍
系统架构的演变历史
单体架构 - 垂直应用架构 - 分布式架构 - SOA架构 - 微服务架构
- 单体架构(all in one):优点:性能最高,冗余小;缺点:debug困难,模块互相影响
- 垂直应用架构(按业务线垂直划分):优点:业务独立开发维护;确定:不同业务存在冗余,每个业务仍然是单体
- 分布式架构(抽出业务无关的公共模块):优点:业务无关的独立服务;缺点:服务模块挂了都挂了,调用关系十分复杂,不同服务间存在冗余
- SOA架构(面向服务):优点:服务注册;缺点:整体服务是中心化的,需要从上向下设计,重构较为困难
- 微服务架构(彻底的服务化):优点:开发效率高,每个业务独立设计,自下而上设计,故障隔离;缺点:治理和运维难度大,安全性较差,观测困难
微服务架构核心要素
- 服务治理
- 可观测性
- 安全
微服务架构原理和特征
基本概念
- 服务:一组具有相同逻辑的运行实体
- 实例:一个服务中的每个运行实体
- 实例与进程的关系:一般一对一或者一对多
- 常见的实例承载形式:进程,K8s pod
- 服务间通信:微服务之间通过网络进行通信,常见的通信协议包括 HTTP、RPC
服务注册与发现
服务注册发现
- 新增一个统一的服务注册中心,用于存储服务名到服务实例之间的映射关系
- 旧服务实例下线前,从服务注册中心删除该实例,下线流量
- 新服务实例上线后,在服务注册中心注册该实例,上线流量
微服务流量特征
- 统一网关入口
- 外网通信多数采用 HTTP,内网通信多数采用 RPC(Thrift, gRPC)
- 网状调用链路
核心服务治理功能
服务发布
服务发布难点
- 不可用
- 抖动
- 回滚
蓝绿发布
- 将服务分成两个部分,分别先后发布
- 简单、稳定
- 但需要两倍资源
灰度发布(金丝雀发布)
- 先发布少部分实例,接着逐步增加发布比例
- 不需要增加资源
- 回滚难度大,基础设施要求高
流量治理
在微服务架构中,可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制
负载均衡
常见策略
- Round Robin
- Random
- Ring Hash
- Least Request
稳定性治理
- 限流:限制服务处理的最大 QPS,拒绝过多请求
- 熔断:中断请求路径,增加冷却时间从而让故障实例尝试恢复
- 过载保护:在负载高的实例中,主动拒绝一部分请求,防止实例被打挂
- 降级:服务处理能力不足时,拒绝低级别的请求,只响应线上高优请求
3.服务治理实践
重试意义
本地函数调用没有重试意义,远程调用可以避免偶发性的错误
- 降低错误率
- 降低长尾延时
- 容忍暂时性错误
- 避开下游故障实例
重试的难点
- 幂等性:多次请求可能会造成数据不一致
- 重试风暴:随着调用深度的增加,重试次数会指数级增长
- 超时设置:第一次请求经过多长时间才开始重试
重试策略
- 限制重试比例:设定一个重试比例阈值(例如 1%),重试次数占所有请求比例不超过该阈值
- 防止链路重试:返回特殊的 status code,表示“请求失败,但别重试”
- Hedged Requests:对于可能超时(或者高延时)的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的相应
4.课后总结
- 架构介绍
- 微服务整体的原理和治理
- 合适的架构才是最好的架构
5.引用
字节内部课:微服务架构原理与治理实践
稀土掘金-后端学习资料