这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
服务发布
服务发布(deployment),即指让一个服务升级运行新的代码的过程。
服务发布的难点
服务不可用:
服务抖动:流量消失,短暂不可用
服务回滚:之前的代码没问题,但是新升级的代码有bug,先倒退到之前的版本,把系统的损失降到最小。
蓝绿部署
先将服务分为两个cluster,在进行部署的时候,先断掉流量,然后就行服务升级,这样做的好处就是简单,稳定,但需要两倍资源。在升级的过程中有一半的实例不可用,一半的实例资源需要处理所有的流量。蓝绿部署更适合在流量低的场景。
灰度发布(金丝雀发布)
金丝雀(canary)对瓦斯及其敏感,17世纪时,英国旷工字啊下井前会先放入一只金丝雀,以确保矿井中没有瓦斯。
一步步地增加实例,查看有没有问题,没有问题就不停地切换,直到完成发布的流程。
难点在于精细化的流量控制,需要不停的切换进行控制,对于回滚也比较困难!
流量治理
在微服务的架构下,我们可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制。
新的机器走高流量,老的机器可以走负载较低的流量。可以根据标识执行不同的请求。
负载均衡
负载均衡(Load Balance)负责分配请求在每个下游实例上的分布
常见的LB策略
- Round Robin
- Random
- Ring Hash
- Least Request
稳定性治理
线上服务总是会出问题,这与程序的正确性无关
- 网络攻击
- 流量突增
- 机房断电
- 光纤被挖
- 机器故障
- 网络故障
- 机房空调故障
微服务架构中典型的稳定性治理功能
- 限流
- 熔断
- 过载保护
- 降级:接收重要的服务,拒绝不重要的服务