微服务架构原理与治理实践
1 微服务架构介绍
1.1 系统架构演变历史
单体架构--垂直应用架构--分布式架构--SOA架构--微服务架构
单体架构:所有进程在一个项目中
性能高,冗余小;debug困难,模块相互影响,模块分工、开发流程
垂直应用架构:按照业务线垂直划分
独立性高;存在冗余、每个业务是单体
分布式架构:抽出与业务无关的公共模块
业务无关的独立服务;服务模块bug导致全瘫痪,调用关系复杂、不同服务冗余
SOA架构:面向服务
服务注册;系统设计中心化,需要从上至下设计,重构困难
微服务架构:彻底服务化
开发效率高,业务独立,自下而上,故障隔离;治理、运维难,观测挑战,安全性,分布式系统
1.2 微服务架构预览
1.3 核心要素
服务治理、可观测性、安全
2 微服务架构原理及特征
2.1 基本概念
服务、实例、集群(cluster)、有状态/无状态服务
服务间通信:单体服务通过函数调用;微服务通过网络传输
2.2 服务注册及发现
服务之间存在通信,那如何写通信地址?
新增一个统一的服务注册中心,用于存储服务名到服务实例之间的映射
服务实例的上线和下线:需要在服务中心内修改
上线:先上线再添加;
下线:先删除再下线。
2.3 流量特征
3 核心服务治理功能
3.1 服务发布
服务发布:服务升级,运行新代码
难点
服务不可用:不能让旧服务直接停止
服务抖动:停止再上线,暂时不可用
服务回滚:出现bug时回滚
解决:1)蓝绿部署
简单稳定,但需要两倍资源
2)灰度发布/金丝雀发布
3.2 流量治理
3.3 负载均值
3.4 稳定性治理
限流:拒绝一些请求
熔断:间断性重试
过载保护:拒绝一部分
降级:保证重要服务,拒绝一般服务
4 字节跳动服务治理实践
4.1 重试的意义
本地函数通常没有重试必要,远程函数调用有重试必要
重试可以避免偶发的错误,提高SLA。
“SLA(Service-Level Agreement),也就是服务等级协议,指的是系统服务提供者(Provider)对客户(Customer)的一个服务承诺。这是衡量一个大型分布式系统是否“健康”的常见方法。在开发设计系统服务的时候,无论面对的客户是公司外部的个人、商业用户,还是公司内的不同业务部门,我们都应该对自己所设计的系统服务有一个定义好的 SLA。因为SLA 是一种服务承诺,所以指标可以多种多样。最常见的四个 SLA 指标,可用性、准确性、系统容量和延迟。”
作者:得物技术 链接:juejin.cn/post/720624… 来源:稀土掘金
4.2 重试的难点
幂等性:多次请求造成数据不一致
重试风暴:随着调用深度增加,重试次数指数增长
超时设置
4.3 重试策略
限制重试比例:设置重试比例阙值,重试次数占所有请求的比例不能超过该阙值
防止链路重试:防止重试风暴核心——限制每层都发生重试,可以返回特殊status,表明别重试
Hedged requests:对于可能超时的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应