这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
本文将围绕服务发布、流量治理、负载均衡、稳定性治理四个服务治理功能对核心服务治理功能进行介绍。
服务发布
服务发布指让一个服务升级运行新的代码的过程。在学校里日常编写代码的时候,直接修改代码,然后重新调试就算完成了服务发布。但在实际项目中,服务发布会有难点,在于发布新版本的代码时旧版本还在运行当中,更新过程可能会出现服务不可用,服务抖动,服务回滚等问题。为了避免出现以上问题,我们可以采用以下服务发布方法:
- 蓝绿部署
蓝绿部署就是将需要升级的服务中的实例分为蓝色和绿色两个集群,先对绿色集群进行升级,同时将绿色集群的流量切到蓝色集群,升级完成后再将流量切回,同理对蓝色集群的升级方法相同,由此实现了无损升级。这是一种简单稳定的服务发布方式,但也有一个很明显的问题即在升级时有一半的资源不可用,另一半资源需要来处理所有的流量。为了减少这一问题带来的影响,通常就会选择在流量低峰的时候进行服务发布。
- 灰度发布(金丝雀发布)
灰度发布是上线一个新实例,若实例无问题则减少一个旧实例,反复重复以上步骤,最终实现对所有实例的升级。相比蓝绿部署灰度发布不需要两倍的资源,且过程较简单。但也有一些难点,比如精细化的流量控制需要不停更改服务注册中心的注册表,服务回滚的难度大。
流量治理
在微服务架构下,我们可以基于地区、集群、实例、请求等维度,对前端流量的路由路径进行精确控制。
负载均衡
负载均衡负责分配请求在每个下游实例上的分布。常见的负载均衡策略有Round Robin、Random、Ring Hash、Least Request等。
稳定性治理
在实际项目中,上线服务总是会出问题的,这与程序的正确性无关。这是因为实际环境中有很多不确定性因素,比如网络攻击、流量突增、机房断电、机器故障、网络故障等。为了维持服务的稳定性,微服务架构中通常会采用限流、熔断、过载保护、降级这四个典型的方法进行稳定性治理。