课程主要从四个方面对后端框架进行了介绍,涵盖了微服务架构的介绍、原理及特征、核心服务治理功能以及字节跳动的服务治理实践。
1. 微服务架构介绍
系统架构的演进历史
- 单体架构:所有功能集成在一个进程中。
- 垂直应用架构:按业务线划分为不同的独立应用。
- 分布式架构:抽取出与业务无关的公共模块,使之独立。
- SOA(面向服务的架构):引入服务的概念,解耦模块。
- 微服务架构:将服务细化到最小化,形成独立、自治的单元。
微服务架构的三大要素
- 服务治理:包括服务注册、服务发现、负载均衡、扩缩容、流量治理、稳定性治理。
- 可观测性:日志采集、监控、链路追踪、异常报警等。
- 安全:身份验证、访问授权、传输加密等。
2. 微服务架构原理及特征
基本概念及组件
- 服务:具有相同逻辑的多个运行实体。
- 实例:服务的每个运行实体,可以是进程、虚拟机或容器等。
服务间通信
- 使用网络通信,常用协议有 HTTP 和 RPC。
服务注册及发现
- 问题:如何动态指定下游服务的实例地址?
- 解决方案:
- 服务注册中心:存储服务名与实例映射关系,新实例上线时注册,旧实例下线时移除。
微服务流量特征
- 统一网关入口:外部使用 HTTP,内部多采用 RPC(如 Thrift, gRPC)。
3. 核心服务治理功能
服务发布
- 蓝绿部署:两个环境间切换,简单稳定但需双倍资源。
- 灰度发布(金丝雀发布):逐步发布服务,风险小但要求基础设施复杂。
流量治理
- 根据地区、集群、实例和请求等维度进行流量控制。
负载均衡策略
- Round Robin、Random、Ring Hash、Least Request。
稳定性治理
- 限流:限制服务的最大处理请求数。
- 熔断:当下游服务故障时中断请求,增加冷却时间。
- 过载保护:在实例负载高时主动拒绝部分请求。
- 降级:当资源不足时,拒绝低优先级请求以保证高优先级服务。
4. 字节跳动服务治理实践
请求重试的意义
- 对于 远程函数调用,重试有助于提高服务的稳定性,减少因网络抖动、下游负载等引起的偶发性错误。
请求重试的难点
- 幂等性:确保请求的重复执行不会产生不一致结果。
- 重试风暴:多个服务重试导致重试次数指数级上升。
- 超时设置:确定合理的重试时间以平衡成功率与超时风险。
重试策略
- 限制重试比例:设定重试次数占比阈值。
- 防止链路重试:使用特殊状态码避免不必要的重试。
- Hedged Requests:对于高延迟请求,向另一个实例发送相同请求以获取最快响应。