文章目录
前言
在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的。那什么是优雅的呢?主要就是指在服务升级的时候,不中断整个服务,让用户无感知,进而不会影响用户的体验,这就是优雅的。
实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如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
端点,可以借助它实现优雅停机。
使用方式:在想下线应用的applicationyml
中添加如下配置,从而启用并暴露/shutdown
端点:
management:
endpoint:
shutdown:
enabled: true
endpoints:
web:
exposure:
include: shutdown
发送 POST 请求到/shutdown
端点
curl -X http://你想停止的服务地址/actuator/shutdown
该方式本质和方式一是一样的,也是借助 Spring Boot 应用的 Shutdown hook 去实现的。
方式三:/pause
端点
Spring Boot 应用提供了/pause
端点,利用该端点可实现优雅下线。
使用方式:在想下线应用的application.yml
中添加配置,从而启用并暴露/pause
端点:
management:
endpoint:
启用pause端点
pause:
enabled: true
启用restart端点,之所以要启用restart端点,是因为pause端点的启用依赖restart端点的启用
restart:
enabled: true
endpoints:
web:
exposure:
include: pause,restart
发送 POST 请求到/actuator/pause
端点:
curl -X POST http://你想停止的服务实例地址/actuator/pause
执行后的效果类似下图:
如图所示,该应用在 Eureka Server 上的状已被标记为DOWN
,但是应用本身其实依然是可以正常对外服务的。在 Spring Cloud 中,Ribbon 做负载均衡时,只会负载到标记为UP
的实例上。利用这两点,你可以:先用/pause
端点,将要下线的应用标记为DOWN
,但不去真正停止应用;然后过一定的时间(例如 90 秒,或者自己做个监控,看当前实例的流量变成 0 后)再去停止应用,例如kill
应用。
- 缺点 & 局限
缺点 | 描述 |
---|---|
不同的版本配置不大一样 | 早期的 Spring Cloud 版本中,pause 端点是不依赖restart 端点的 |
无法和 Eureka 的健康检查配合使用 | 如果你的服务发现组件用的是 Eureka,并且你的应用开启了健康检查eureka.client.healthcheck.enabled = true ,那么/pause 端点无效 |
方式四:/service-registry
端点
使用方式:在想下线应用的application.yml
中添加配置,从而暴露/service-registry
端点:
management:
endpoints:
web:
exposure:
include: service-registry
发送 POST 请求到/actuator/service-registry
端点:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
888 (备注鸿蒙获取)**
[外链图片转存中…(img-kWG78A0E-1712701011898)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!