赞
踩
线上系统发布重启过程中保证业务的连续性,让服务的客户端无感知。实现这种目标的停机我们称之为优雅停机(Graceful Shutdown),这样的发布部署叫平滑发布(Gentle Deploment).
系统间调用模型
在Linux/unix 下,中止一个Java进程有两种方式,一种是 kill -9 pid,一种是 kill -15 pill(默认)。
JDK提供了Java.Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,它是一个回调函数.在一下几种场景中被调用:
SpringBoot Application在启动时注册了ShutdownHook,在doClose()中声明了在ShutdownHook对DisposableBean进行关闭.
org.springframework.context.support.AbstractApplicationContext.registerShutdownHook()
org.springframework.context.support.AbstractApplicationContext.doClose()
Spring框架中在bean初始化和销毁时候执行某个方法的三种实现方式。
ServiceRegistry声明了spring cloud对服务服务注册的生命周期.
通过AbstractAutoServiceRegistration.destroy()声明了Application关闭时的回调动作.
@PreDestroy
AbstractAutoServiceRegistration.destroy()
EurekaClientAutoConfiguration这个自动配置类做了相应的工作。
Ribbon针对以下异常自动重试(HttpClientLoadBalancerErrorHandler.retriable )
ConsulCatalogWatch#catalogServicesWatch()声明了每隔一段时间会去注册中心检测服务状态,状态异常的服务节点将在负载均衡时排除掉.
Ribbon的负载均衡体现在selectServer时.
使用Nginx做tomcat的负载均衡,使用JDK自带的HttpURLConnection.
方案
使用Feign+Ribbon作为客户端和负载均衡.
方案
参考资料
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。