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

82 阅读2分钟

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

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

微服务架构原理及特征

基本概念

  • 服务(service):一组具有相同逻辑的运行实体
  • 实例(instance):一个服务中,每一个运行实体即为一个实例
  • 实例与进程的关系:实例与进程之间没有必然对应关系,可以一个实例对应一个或多个进程(反之不常见)
  • 集群(cluster):通常指服务内部的逻辑划分,包含多个实例
  • 常见的实例承载形式:进程、VM、k8s pod
  • 有状态/无状态服务:服务的实例是否存储了可持久化的数据(例如磁盘文件)

服务注册及发现

在代码层面,如何指定目标服务的地址(ip:port)?

  • 硬编码:不现实,ip地址一旦发生变化,整个链路都可能崩溃
  • DNS:没法探活,并且无法配置端口
  • 注册中心:存储服务名到服务实例的映射

流量特征

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

核心服务治理

服务发布

服务发布,即指让一个服务升级运行新代码的过程

服务发布的难点:

  • 服务不可用
  • 服务抖动
  • 服务回滚

蓝绿部署

灰度发布

流量治理

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

负载均衡

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

常见的LB策略

  • Round Robin
  • Random
  • Ring Hash
  • Least Request
  • ...

稳定性治理

线上服务总是会出问题的:

  • 网络攻击
  • 流量突增
  • 机房断电
  • 光纤被挖
  • 机器故障
  • 网络故障
  • 机房空调故障
  • ......

微服务架构中典型的稳定性治理功能:

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

重试

重试的意义

重试可以避免掉偶发的错误,提高SLA

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

重试的难点

  • 幂等性
  • 重试风暴
  • 超时设置

重试策略

  • 限制重试比例
  • 防止链路重试
  • Hedged requests