微服务架构原理与实践治理
简介
微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。微服务架构的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。
概念: 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
定义: 围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。
本质: 用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。
微服务架构核心要素
- 服务治理
- 服务注册
- 服务发现
- 负载均衡
- 扩缩容
- 流量治理
- 稳定性治理
- ........
- 可观测性
- 日志采集
- 日志分析
- 监控打点
- 监控大盘
- 异常报警
- 链路追踪
- ........
- 安全
- 身份验证
- 认证授权
- 访问令牌
- 审计
- 传输加密
- 黑产攻击
- .........
-
服务注册与发现
-
流量特征
- 统一网关入口
- 内网通信多采用RPC
- 网状调用链路
核心服务治理功能
-
服务发布
-
让一个服务升级运行新的代码的过程
-
服务发布的沸点
-
1. 蓝绿部署:简单稳定,但需要两倍资源
两台cluster分别关闭让另一台运行支撑
2. 灰度发布(金丝雀发布):
-
流量治理
-
微服务架构下,我们可以基于地区,集群,实例,请求等维度,对端到端流量的路由路径进行精准控制
-
-
负载均衡
-
负载均衡负责分配请求在每个下游实例上的分布
-
常见的LB策略
-
Round Robin
-
Random
-
Ring Hash
-
Least Request
-
........
-
-
-
稳定性治理
线上服务总是会出问题的,这与程序的正确性无关:网络攻击,流量突增,机房断电,光纤被挖,机器故障,网络故障,机房空调故障........
-
稳定性治理功能:限流,熔断,过载保护,降级
-
*
字节跳动的服务治理实践
-
重试的意义
- 重试可以避免掉偶发的错误,提高SLA(Service-Level Agreement)
- 降低错误率:连续两次错误的概率相较一次低很多
- 降低长尾延时:对于偶尔耗时较长的请求,重试请求有机会提前返回
- 容忍暂时性错误:某些时候系统会有暂时性异常(如网络抖动),重试可以尽量规避
- 避开下游故障实例:一个服务中可能会有少量实例故障(例如机器故障),重试其他实例可以成功
-
重试的难点
-
幂等性
-
重试风暴
-
* 超时设置
3. 重试策略
* 限制重试比例:设定一个重试比例阈值(如1%),重试次数占所有请求比例不超过该阈值
* 防止链路重试:链路层面的防重试风暴的核心是限制每层都发生重试,可以返回特殊的status表明“请求失败,但别重试”
* Hedged requests:对于可能超时或者延时高的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应
-
重试效果验证
-
实际验证经过上述重试策略后在链路上发生的重试放大效应
-
总结:
微服务架构是一个互联网公司体系中非常重要的部分,在后续学习中可以多运用这样的架构思想进行开发