这是我参与「第五届青训营 」笔记创作活动的第7天
微服务架构
单体架构
性能最高,冗余少
debug困难;模块相互影响;模块分工、开发流程复杂
垂直应用架构
按业务线垂直划分,每一个业务线一个单体架构
不同业务存在冗余
分布式架构
抽出一个服务层,业务无关的独立业务
缺点:服务模块bug导致全站瘫痪;调用关系复杂;不同服务冗余
SOA架构(Service Oriented Architecture)
面向服务
优势:服务注册
劣势:* 整个系统中心化;需要从上到下设计;重构困难
微服务架构
优势:开发效率;业务独立设计;自下而上;故障隔离
劣势:治理、运维难;观测挑战;安全性;分布式系统
服务治理
可观测性
日志采集 日志分析 监控打点 异常报警 链路追踪
安全
基本概念
服务:相同逻辑 运行实体
实例:每个运行实体称为一个实例;一个实例可能对应一个or多个进程
承载形式:进程、VM、K8s Pod
集群:服务内部逻辑划分,服务包含集群,集群包含实例
有状态/无状态服务:有持久化数据 or 代理
服务间通信:
单体:函数调用
微服务:网络传输 HTTP gRPC Thrift
服务注册及发现
模仿DNS,新增一个统一的服务注册中心,用于存储服务名到服务实例的映射
图
核心服务治理功能
服务发布难点:服务不可用;服务抖动;服务回滚;
服务发布:蓝绿部署;金丝雀策略
流量治理
按照地区、集群、实例、请求等维度,端到端流量的路由路径进行治理
稳定性治理:线上服务总是会出问题的,与程序的正确性无关
原因:网络攻击;流量突增;机房断电;机器故障;网络故障
稳定性治理
限流
熔断
过载保护
降级
字节跳动服务治理实践
重试:对于一些偶发的错误,提高SLA
- 降低错误率
- 降低长尾延时
- 容忍暂时性错误
- 避开下游故障
重试的问题:
-
幂等性
-
重试风暴:每个都重试三次,下一层九次,下一层二十七次
- 限制重试比例:设定一个重试比例阈值,某一个时间窗口重试次数占所有请求比例不超过该阈值
- 防止链路重试,链路层面防止重试风暴的核心是限制每层都发生重试
- A->B->C,C失败,返回“重试失败,不要再重试了”,避免重试风暴
-
超时设置
- Hedged requests 对于可能超时的请求,重新向另一个下游实例发送一个请求