微服务架构原理与治理实践| 青训营笔记

207 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

1.主要内容

  1. 微服务架构的由来和基本介绍
  2. 微服务架构的原理和特征
  3. 核心服务治理
  4. 服务治理实践

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.引用

字节内部课:微服务架构原理与治理实践
稀土掘金-后端学习资料