这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
微服务框架 | 青训营笔记
架构介绍
- 演进历史
- 单体架构
- 垂直应用架构
- 分布式架构
- SOA架构
- 微服务架构
单体架构
all in one process
- 优势
- 性能最高
- 冗余小
- 劣势
- debug困难
- 模块相互影响
- 模块分工、开发流程困难
垂直应用架构
按照业务线垂直划分
- 优势
- 业务独立开发维护
- 劣势
- 不同业务存在冗余
- 每个业务还是单体
分布式架构
抽出业务无关的公共模块
- 优势
- 业务无关独立服务
- 劣势
- 服务模块bug导致全站瘫痪
- 调用关系复杂
- 不同服务冗余
SOA架构
业务和服务之间多了一个服务注册中心来解耦
- 优势
- 服务注册与发现
- 劣势
- 整个系统设计是中心化的
- 需要从上到下设计
- 重构困难
微服务架构
彻底的服务化
- 优势
- 开发效率高
- 自下而上的业务独立的设计
- 故障隔离
- 劣势
- 治理、运维难度
- 观测挑战
- 安全性
- 分布式系统面临的问题
微服务架构概览
核心要素
- 服务治理
- 可观测性
- 安全性
微服务架构原理及特征
服务: 一组具有相同逻辑的运行实体
实例: 一个服务中,每个运行实体即为一个实例
集群: 服务内部的逻辑划分,包含多个实例
有/无转态服务: 服务的实例是否存储了可持久化的数据
常见实例承载形式:进程、VM、k8s pod
一个实例通常包含一个或多个进程
微服务的服务间通信是网络传输
服务注册与发现
用一个服务注册中心,用于存储服务名到服务实例的映射
流量特征
统一网关 入口接受http流量,内网通信多数采用RPC。
核心服务治理功能
服务发布
- 蓝绿部署
- 将服务中的实例分成蓝绿两个集群,一个集群升级的时候,流量全部导到另一个集群
- 消耗资源,适合流量小的场景
- 灰度发布(金丝雀发布)
- 一遍增加新代码实例,一遍减少老代码实例
- 回滚麻烦,操作粒度细
流量治理
在微服务框架下,基于地区、集群、实例、请求等维度,对端到端流量进行分流
负载均衡
- Round Robin
- Random
- Ring Hash
- Least Request
稳定性治理
- 限流:拒绝高于承载的qps
- 熔断
- 过载保护
- 降级:只响应重要服务
字节跳动服务治理实践
重试
- 可以避免偶发错误
- 降低长尾延时:对于偶尔耗时较长的请求,重试请求有机会提前返回
- 里面暂时性错误,如网络抖动
- 避开下游故障实例
重试的难点
- 幂等性
- 重试风暴:调用链深,造成雪崩
- 超时设置
重试策略
- 限制重试比例(在大部分请求成功的大条件下使用)
- 防止链路重试:理想情况下只在最下一层重试
- Hedged request(对于延时高的请求):重新向另一个下游实例发一个相同的请求,等待先到达的响应