前序
今天总结微服务架构
微服务的原理和特征
1.1 基本概念
服务(service):
- 一组具有相同逻辑的运行实体(用相同的代码运行的一组服务)。
实例(instance):
- 一个服务中的,每个实体就是一个实例。
集群(cluster):
- 服务内部的逻辑划分,一个集群包含一个或多个实例。
有状态/无状态服务:
- 服务是否存储了可持续化的数据。
服务间通信
- 对于微服务,服务间通信意味着网络传输,包括HTTP,RPC。
1.2 服务注册及发现
解决方案一(DNS)
问题:
- 本地DNS存在缓存,导致延时。
- 负载均衡问题
- 不支持探活
- 域名无法配置端口
解决方法二(注册服务中心)
思路:新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。
1.3 流量特征
- 统一网关入口
- 内网通信多用RPC
- 网状调用链口
核心服务治理功能
2.1 服务发布
服务发布(deployment), 就是让一个服务升级运行新的代码的过程。
服务发布难点:
- 服务不可用
- 服务抖动
- 服务回滚
解决方案:
- 蓝绿部署(简单,但是需要两倍的资源)
- 金丝雀发布
2.2 流量治理
在微服务架构下,我们可以基于地区,集群等维度,对端对端流量的服务路径进行精确控制。
2.3 负载均衡
负载均衡(load balance)负责分配请求在每个下游实例的分布。
常见负载均衡的策略:
- round robin
- random
- ring hash
- least request
2.4 稳定性治理
线上服务总是会出现问题,包括网络攻击,流量突增,机房断电,网络故障等。。。
解决方案:
- 限流
- 熔断
- 过载保护
- 降级
实际服务治理方案之重试
重试的意义
重试可以避免掉偶发的错误,提高SLA(Service-Level Agreement)
- 降低错误率
- 假设单次请求的错误概率是0.01,那么连续两次错误的概率是0.0001。
- 降低长尾延时
- 对于偶尔耗时长的请求,重试有机会提前返回
- 容忍暂时性错误
- 避开下游故障实例