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

85 阅读3分钟

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

内容源于青训营课堂视频以及一些文档,若有错误欢迎及时指出

1 微服务架构介绍

  • 系统架构演变历史
  • 微服务架构概览
  • 微服务架构核心要素

演变历史

单体-垂直应用-分布式-SOA-微服务

  • 单体:all in one process
  • 垂直应用:按照业务线垂直划分
  • 分布式:抽出业务无关的公共模块
  • SOA:面向服务
  • 微服务:彻底服务化

核心要素:服务治理、可观测性、安全

2 微服务架构原理及特征

  • 微服务架构的基本组件
  • 工作原理
  • 流量特征

2.1 基本概念

  • 服务:一组具有相同逻辑的运行实体

  • 实例:一个服务中,每个运行实体即为一个实例

  • 实例与进程的关系:实例与进程之间没有必然对应关系,一个实例可以对应一个或多个进程

  • 集群:通常指服务内部的逻辑划分,包含多个实例

  • 常见的实例承载形式:进程、VM、k8s pod

  • 有状态/无状态服务:服务实例是否存储了可持久化的数据(k8s pvc)

  • 服务间通信:对于单体服务是简单的函数调用,对于微服务服务间通信时网络传输(HTTP/RPC...)

2.2 服务注册及发现

问题:不同服务之间需要网络传输,而每个服务就对应于一个ip+port,如何指定调用一个目标服务的地址?

  • 本地DNS存在缓存,导致延时
  • 负载均衡
  • 不支持服务实例的探活检查
  • 域名无法配置端口

新增一个统一的服务注册中心,用于存储服务名到服务实例的映射

2.3 流量特征

  • 统一网关入口
  • 内网通信多数采用RPC
  • 网状调用链路

弱化连接的概念,强调请求

3 核心服务治理功能

  • 服务发布(deployment)
  • 流量治理
  • 负载均衡
  • 稳定性治理

3.1 服务发布

  • 蓝绿部署:简单稳定,但需要两倍资源
  • 灰度发布(金丝雀发布):回滚难度大,基础设施要求高

3.2 流量治理

在微服务架构下可以基于地区、集群、实例、请求等维度,对端到端的路由路径进行精确控制

3.3 负载均衡

负责分配请求在每个下游实例上的分布

一个服务中每个实例的负载应当是大体均衡一致的

  • Round Robin
  • Random
  • Ring Hash
  • Least Request

3.4 稳定性治理

  • 网络攻击
  • 流量突增
  • 机房断电
  • 光纤被挖

限流、熔断、过载保护、降级

4 字节跳动服务治理实践

重试

意义

本地函数调用

  • 参数非法
  • OOM
  • NPE...

远程函数调用

  • 网络抖动
  • 下游机器宕机
  • 下游熔断...

意义在于可以避免掉偶发的错误,提高SLA

  • 降低错误率
  • 降低长尾延时
  • 容忍暂时性错误
  • 避开下游故障实例

难点

  • 幂等性:多次请求可能会造成数据不一致
  • 重试风暴:随着调用深度的增加,重试次数会指数级上涨
  • 超时设置:设置多少的超时间隔

策略

  • 限制重试比例(阈值)
  • 防止链路重试
  • Hedged requests

效果验证

for 循环重试