文章目录
-
前言
-
优雅下线
-
常见的下线方式
-
优雅的下线方式
-
-
灰度发布
-
蓝绿部署
-
滚动部署
-
金丝雀部署
-
在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的。那什么是优雅的呢?主要就是指在服务升级的时候,不中断整个服务,让用户无感知,进而不会影响用户的体验,这就是优雅的。
实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如kill PID
和kill -9 PID
都是暴力杀死服务,相对于kill -9 PID
来说,kill PID
就是优雅的。但如果单独拿kill PID
出来说,我们能说它是优雅的下线策略吗?肯定不是啊,就是这个道理。
因此,本文讲述的优雅下线仅能称之为“相对的优雅下线”,但相对于暴力的杀死服务,已经足够优雅了。常见的优雅解决方案,主要包括优雅下线和灰度发布。而实际上,灰度发布的范围就已经包含优雅下线了。
最后,在本文中,我们主要讲述基于 Spring Cloud 和 Euraka 的优雅下线以及灰度发布。
常见的下线方式
方式一:kill PID
使用方式:kill java进程ID
该方式借助的是 Spring Boot 应用的 Shutdown hook
,应用本身的下线也是优雅的,但如果你的服务发现组件使用的是 Eureka,那么默认最长会有 90 秒的延迟,其他应用才会感知到该服务下线,这意味着:该实例下线后的 90 秒内,其他服务仍然可能调用到这个已下线的实例。因此,该方式是不够优雅的 。
方式二:/shutdown端点
Spring Boot 提供了/shutdown
端点,可以借助它实现优雅停机。
使用方式:在想下线应用的application.yml中添加如下配置,从而启用并暴露/shutdown
端点:
management:
endpoint:
shutdown:
enabled: true
endpoints:
web:
exposure:
include: shutdown
发送 POST 请求到/shutdown端点
curl -X http://你想停止的服务地址/ac