[ 后端与 Go | 青训营笔记 ]
这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
课内:Go 微服务框架 - 不变的基建
微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
重点
- 微服务架构介绍;
- 微服务架构原理及特征;
- 核心服务治理功能;
- 字节跳动服务治理实践。
细节
微服务架构介绍
背景由来
原因
- 互联网快速发展;
- 硬件设施快速发展;
- 需求复杂;
- 开发人员增加;
- 计算机理论发展。
演变历史
- 单体架构;
- 垂直应用架构;
- 分布式架构;
- SOA 架构;
- 微服务架构。
架构概览
基本要素
- 服务治理;
- 可观测性;
- 安全。
微服务架构原理及特征
基本组件
服务
- 一组拥有相同逻辑的运行实体。
实例
- 一个服务中,每个运行实体即为一个实例。
实例与进程的关系
- 实例与进程之间没有必然对应关系,可以一个实例对应一个或多个进程。
集群
- 通常指服务内部的逻辑划分,包括多个实例。
常见的实例承载形式
- 进程、VM、k8s pod。
有状态 / 无状态服务
- 服务的实例是否存储了可持续化的数据。
工作原理
服务间通信
- 对于单体服务,不同模块通信只是简单的函数调用;
- 对于微服务,服务间通信意味着网络传输。
服务注册与发现
- 指定调用一个目标服务的地址;
-
DNS
- 本地 DNS 存在缓存,导致延时;
- 负载均衡问题;
- 不支持服务实例的探活检查;
- 域名无法配置端口。
- 新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。
流量特征
- 统一网关入口;
- 内网通信多数采用 RPC ;
- 网状调用链路。
核心服务治理功能
服务发布
定义
- 指让一个服务升级运行新的代码的过程。
难点
- 服务不可用;
- 服务抖动;
- 服务回滚;
蓝绿部署
- 简单、稳定,但需要双倍资源。
灰度发布(金丝雀发布)
流量治理
- 在微服务架构下,可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制。
服务负载均衡
定义
- 负责分配请求在每个下游实例上的发布。
常见的 LoadBalance 策略
- Round Robin;
- Random;
- Ring Hash;
- Least Request。
稳定性治理
- 线上服务总会错误,这与程序的正确性无关。
典型的稳定性治理功能
- 限流;
- 熔断;
- 过载保护;
- 降级。
字节跳动服务治理实践
重试
- 重试可以避免偶发的错误,提高 Service-Level Agreement。
作用
- 降低错误率;
- 降低长尾延时;
- 容忍暂时性错误;
- 避开下游故障实例。
难点
- 幂等性;
- 重试风暴;
- 超时设置。
策略
- 限制重试比例;
- 防止链路重试;
- Hedged requests;
重试效果验证
- 在链路上发生的重大放大错误。
总结
对微服务架构有了一定的了解。