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

25 阅读3分钟

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

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

微服务架构

演变历史

单体架构->垂直应用架构->分布式架构->SOA架构->微服务架构->Service Mesh

image-20230204100944245image-20230204101349074

image-20230204101428122image-20230204101503395 image-20230204101555984

微服务架构的核心要素

  • 服务治理

  • 可观测性

  • 安全

    image-20230204101717847

微服务架构原理及特征

基础概念

  • 服务:一组具有相同逻辑的运行实体
  • 实例:一个服务中,每个运行实体即为一个实例
  • 集群:服务中的逻辑划分,一般包含多个实例群组

服务间通信

  • 单体服务一般是由函数调用实现服务间通信
  • 而微服务架构中的服务间通信是通过网络传输

服务注册

为了避免硬编码以及流量治理,使用注册中心完成微服务的服务名与服务实例之间的映射

流量特征

image-20230204104030923

  • 核心在于弱化连接的概念,强调请求的思想

服务治理

服务发布

服务发布指的是上线运行新代码的过程。

对于已经运行的服务实例如何进行平稳的进行服务发布存在以下难点 image-20230204104409201

一些解决方法:

  • 蓝绿发布: image-20230204104912429

    • 优点:简单、稳定
    • 缺点:需要两倍资源

image.png

  • 灰度发布

image.png - 缺点:回滚难度大,对流量治理要求高

image.png

流量治理

流量治理是指根据实例地区、服务器状态请求信息等多个维度特征完成端对端的流量控制 !

image.png

负载均衡

负载均衡的核心思想在于将请求流量分配到每个下游实例上的分布 image-20230204105436388

稳定性治理

  • 限流

    对于高出处理的QPS直接拒绝请求 image-20230204105531679

  • 熔断

    如果实例异常,直接拒绝上游请求服务器的请求访问

    image.png

  • 过载保护

    当下游实例负载过高,将返回拒绝服务的信息,待处理完当前实例上的请求后再接入流量,实现动态的负载均衡 image-20230204105835002

  • 降级

    当下游实例的负载过高,将只接受高权限或者重要的上游实例请求,拒绝一般性质的请求服务,进而降低负载占用的过程

    image-20230204105951015

服务治理之重试

重试的原因

远程调用不比本地函数调用,可能存在网络或者下游服务的负载响应问题,需要适时采取重试策略

image-20230204110153157

重试的意义

  • 降低错误率:假定单次错误率固定,重试可以使得从概率学意义上降低总的错误率
  • 降低长尾延时:对于偶尔的耗时很长的请求,重试可能使得提前获得返回结果
  • 容忍暂时性错误:对于网络波动等暂时性异常,重试可以尽量避免异常的影响
  • 规避下游故障实例:重试可能重新分配下游实例,避免故障实例的耗时等待

重试的难点

  • 幂等性:如何确保多次请求的结果一致
  • 重试风暴:调用链条如果很长,对于下游的重试次数就会指数上升
  • 超时的设置:超时在不同的环境中表现的时长差异很大,超时重试间隔时间如何设置?

避免重试风暴的策略

  • 限制重试比例 image.png
  • 防止链路重试 image-20230204111228228
  • Hedged request 对于可能发生的超时请求,可以向下游其他实例发起相同的请求,避免多次向同一实例带来的多次请求响应(因为该实例很大可能再次超时) image-20230204111411804

引用参考

‍‍‍⁡‍‬⁢⁡⁣⁢⁣⁣‌⁤‌‬‍‌⁡⁤⁡⁣⁣‍‬‬‬⁡微服务架构原理与治理实践 .pptx - 飞书云文档 (feishu.cn)

微服务架构原理及特征 - 掘金 (juejin.cn)

字节跳动微服务架构体系演进架构字节跳动技术团队_InfoQ精选文章

微服务架构的一知半解 - 掘金 (juejin.cn)