蓝盟IT外包,实践:大型微服务体系结构中的优雅停机时间

发布者:上海IT外包来源:http://www.lanmon.net点击数:859

蓝盟IT外包
主要调用逻辑如下:
生成在容器中启动服务的容器注册服务路由器(Zookeeper  )
服务呼叫者订阅服务路由器
服务路由器发生注册变更,通知服务调用方重新取得新的注册列表
服务调用方根据取得的服务侧列表进行服务调用。
然而,当服务侧实例停止时,服务侧不积极改变服务路由器上的注册信息,因此客户端需要40秒(当前应用于Zookeeper的会话超时配置)来删除这种异常配置,并且在这40秒内应用
这与每次实例重新启动时报告错误的时间段相匹配。 另外,由于微服务的特性,对于每个实际的业务请求,根据业务的需要多次调用相同的服务,对于每个业务请求访问异常事例的可能性提高,业务失败的概率提高。
这是在服务实例的暴力停止并且微服务体系结构的订购笔业务请求扩展到多次请求访问的倍数之后发生的问题。
由于这是服务实例暴力停机造成的问题,我们开始考虑优雅的基于微服务的停机方式。
微服务体系结构中的应用程序优雅停机主要有两种方式:应用程序实例修订平滑(即,没有需要处理的动作,或者出现异常错误)
方式1 :通过微服务框架具有的检测能力实现,例如通过向Spring  Cloud微服务框架提供actuator组件的/health端点来实现。 客户端需要实现自定义的HealthCheckHandler,只需将应用程序的健康状态保存在内存中,在服务器上利用curl发送shutdown命令,在状态发生变化时重新注册到服务器。
方式2 :通过注册JDK的ShutdownHook  (挂钩)来实现,系统接收到结束命令时,首先从Zookeeper注册服务器给自己加下划线,不再接收新消息,然后处理积压的请求,最后收回资源
我们的生产环境没有采用开源的通用型微服务体系结构,应用程序都是基于JAVA开发的,因此我们通过登录方式2:jdk的ShutdownHook实现优雅的停机方式。
关机挂接的本质是用于接收JVM关机的线程(也称为Hook线程)。 使用Runtime的addShutdownHook,可以注册关于JVM的挂接。 Hook线程在JVM成功关闭之前不运行,在强制关闭时不运行。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部