微服务框架-不变的基建 | 青训营笔记

115 阅读4分钟

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

重点:微服务架构原理及特征

难点:核心服务治理功能、字节跳动服务治理实践

1、微服务架构

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

1.1 单体架构

性能高、冗余小;debug困难、模块相互影响、模块分工、开发流程

1.2 垂直应用架构

按照业务线垂直划分;业务独立开发维护;不同业务存在冗余、每个业务还是单体

1.3 分布式架构

抽出无关的公共模块;业务无关的独立服务;服务模块bug可导致全站瘫痪、调用关系复杂、不同服务冗余

1.4 SOA架构

面向服务;服务注册;整个系统设计是中心化的、需要从上至下设计、重构困难

1.5 微服务架构

彻底的服务化;开发效率高、业务独立设计、自下而上、故障隔离;治理、运维难度、观测挑战、安全问题、分布式系统问题

2、微服务架构原理及特征

服务(Service)、实例(Instance)、进程与实例的关系、集群(cluster)、常见的实例承载形式(进程、VM、k8s pod等)、有状态/无状态服务

微服务之间通过网络进行通信;HTTP、RPC

2.1 服务注册及发现

2.1.1 代码层面指定调用一个目标服务的地址

直接指定ip:port:服务有多个实例,没法hardcode,服务实例ip port本身是动态变化的

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

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

2.2 服务实例上线及下线过程

旧服务实例下线前,从服务注册中心删除该实例,下线实例

新服务实例上线后,在服务注册中心注册该实例,上线流量

2.3 流量特征

统一网关入口、内网通信、网状调用链路

弱化连接的概念,强调“请求”,即同一个客户端长连接发出的请求,理论可以到达服务中所有实例

3、核心服务治理功能

3.1 服务发布(deployment)

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

难点:服务不可用、服务抖动、服务回滚

3.1.1 蓝绿部署

将服务分成两个部分,分别先后发布;简单、稳定;需要两倍资源

3.1.2 灰度发布(金丝雀发布)

先发布少部分实例,接着逐步增加发布比例;不需要增加资源;回滚难度大,基础设施要求高

3.2 流量治理

在微服务框架下,基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制(狭义)

3.3 负载均衡(Load Balance)

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

3.4 稳定性治理

与程序的正确性无关

微服务架构中典型的稳定性治理功能:限流、熔断、过载保护、降级

4、字节跳动服务治理实践

4.1 重试意义

本地函数调用基本没有重试的意义

远程函数调用重试可以避免偶发性错误,提高SLA

重试可以降低错误率、降低长尾延时、容忍暂时性错误、避开下游故障实例

4.2 重试的难点

幂等性:多次请求可能造成数据不一致

重试风暴:随着调用深度的增加,重试次数会指数级上涨

超时设置:假设调用时间一共1s,经过多少时间开始重试?

4.3 重试策略

限制重试比例:设定一个重试比例阈值,重试次数占所有请求比例不超过该阈值

防止链路重试:返回特殊的 status code,表示“请求失败,但别重试”

Hedged Requests:对于可能超时(或延时高)的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应

4.4 重试效果验证

字节跳动重试组件能够极大限制重试发生的链路放大效应

课后个人总结

微服务架构是当前大多数互联网公司的标准架构,通过本节课我学习到了微服务架构的由来和原理、服务治理功能的工作原理,了解了不少微服务框架的相关知识