概述
无损上线主要通过服务预热和延迟注册实现,无损下线主要通过应用优雅停机实现。假设有应用app-a和app-b两个应用,app-a一直都有请求调用app-b,本文演示在app-b上线与下线时,如何实现无损上线与下线。
前提条件
用户已开通微服务治理中心企业版。
背景信息
在微服务架构中,在应用变更时,会涉及到应用的上线与下线,若处理不当,此时会造成一些请求异常。因此,在请求量大的应用系统中,为了避免应用变更带来的错误请求,一般会选择在半夜这种流量较小的时候发布。在半夜发布虽然避免了对业务造成较大的影响,但却不能从根本上解决问题,同时也会造成较大的运维成本。基于以上背景,微服务治理中心在应用发布的过程中,提供了服务延迟注册、服务预热、主动通知下线、主动等待等手段,实现了应用变更的无损上线与下线,有效避免了流量损失,降低研发运维成本。
准备工作
部署Demo应用
本文准备两个应用,分别是app-a和app-b,其中调用关系为app-a->app-b。
部署一个app-a:
部署一个app-b:
启动脚本访问app-a->app-b:
此时查看微服务治理中心控制台,app-a和app-b都有流量。
验证无损上线
打开app-a和app-b的无损上下线开关。
在当前启动的应用基础上,再启动一个app-b,此时app-b总共有两个节点,新启动的app-b会发生延迟注册和服务预热两个事件。
延迟注册:
由上图所示,服务在启动后120秒后,才完成服务注册,达到延迟注册的效果。
服务预热:
由上图所示,服务在启动后,先是小流量预热,随后逐渐达到最大流量。
验证无损下线
微服务治理中心的无损下线主要是通过主动通知注册中心下线和主动通知消费者来实现。在应用下线时,需要使用kill -15 pid命令,通过下线钩子函数通知应用即将下线,达到无损下线的效果。如果采用kill -9 pid,将会是有损下线。
当前部署一个app-a,两个app-b。在有流量访问的情况下,下线app-b其中一个节点。
使用kill -9 pid下线。
执行kill命令后,查看微服务治理中心控制台,此时出现了异常调用。
使用kill -15 pid下线。
执行kill命令后,查看微服务治理中心控制台,此时没有出现异常调用。
通过以上实践,证明了微服务治理中心可以实现无损下线。