中台化实践——优雅停机方案
1 介绍
微服务架构中的应用优雅停机主要是指应用实例有计划而平滑(即不产生需要处理的事故)的退出。应用服务器的停机主要分为两类:主动停机和被动停机,而其中主动停机和大部分的被动停机都是可以实现优雅停机。如果应用不做优雅停机,则会带来以下情况:
数据丢失:内存的中数据尚未持久化至磁盘
文件损坏:正在操作写的文件因没有更新完成,导致文件损坏
请求丢失:排队中等待处理的请求丢失
响应丢失:成功的交易还没来得及做出响应
交易中断:正在处理至中间状态的交易被强制中断
服务未下线:上游服务依然还会继续往下游服务发送消费请求
而我们微服务的优雅升级的目标就是避免以上几种情况,从而避免人工干预的工作量和提升微服务架构的服务高可靠。
2 使用场景
优雅停机可以解决以下场景:
KILL PID
应用意外自动退出(System.exit(n))
使用脚本命令的方式停止应用
优雅停机解决不了以下场景:
突然断电
机器物理破坏
KILL-9 PID
或taskkill /f /pid
3 ShutdownHook
Java的优雅停机通常通过注册JDK的ShutdownHook(钩子)来实现,当系统接收到退出指令后,首先标记系统处于退出状态,不再接收新的消息,然后将积压的消息处理完,最后调用资源回收接口将资源销毁,最后各线程退出执行。简单的使用demo案例如下(简单版):
/*** 优雅停机处理方式* * @author lry**/
public class Main{/*** 启动应用**/public void start(){// 第一步:启动应用服务……// 第二步:注册JDK钩子Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {@Overridepublic void run() {System.out.println("The hook running...");//第三步:调用停机处理stop();}}));}/*** 停止应用**/public void stop(){// 停止应用前停机处理(如:注销服务、标记不接受请求等)}}
超时控制
通常优雅退出需要有超时控制机制,如果到达超时时间仍然没有完成退出前的资源回收等操作,则由停机脚本直接调用KILL -9 PID的方式进行强制退出,不然可能会等待很长时间。
4 微服务优雅停机
微服务的优雅停机没有统一的解决方案,只要抓住核心思想进行设计即可:
引流 → 挡板 → 等待停机
但在微服务架构中,我们可以遵守以下建议规则来设计微服务的优雅停机机制:
所有微服务应用都应该支持优雅停机
优先注销注册中心注册的服务实例
待停机的服务应用的接入点标记拒绝服务
上游服务支持故障转移因优雅停机而拒绝的服务
根据具体业务也提供适当的停机接口
微服务应用的优雅停机根据其使用者角色的不同,而主要分为两种类型:
微服务业务应用优雅停机设计:
微服务业务应用优雅停机设计
微服务网关应用优雅停机设计:
微服务网关应用优雅停机设计
其余各层设备的优雅停机都可从以上两种类型进行衍生出解决方案,如:
整个后端架构升级,则可从DNS或Nginx直接切换
Nginx层升级,则可以从DNS直接切换
5 使用案例
在业界开源的产品中,很多产品都使用了JDK钩子的方式来实现优雅停机,如以下产品:
Netty
DUBBO
中台化实践——优雅停机方案相关推荐
- 微服务架构—优雅停机方案
1 介绍 微服务架构中的应用优雅停机主要是指应用实例有计划而平滑(即不产生需要处理的事故)的退出.应用服务器的停机主要分为两类:主动停机和被动停机,而其中主动停机和大部分的被动停机都是可以实现优雅停机 ...
- 品牌广告投放平台的中台化应用与实践
导读:随着业务和团队规模的增长,原来单体应用的技术架构无论从研发效率还是系统性能来看,都出现了瓶颈.微服务化的技术架构改造(遵循领域模型将现有单体应用按照业务边界拆分为多个微服务)提上议程.本文主要分 ...
- 一文聊透 Dubbo 优雅停机
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | kiritomoe 来源 | 公众号「Kirito的技术分享」 1 前言 一年之前 ...
- 处于停机等非正常状态_一文聊透 Dubbo 优雅停机
1 前言 一年之前,我曾经写过一篇<研究优雅停机时的一点思考>,主要介绍了 kill -9,kill -15 两个 Linux 指令的含义,并且针对性的聊到了 Spring Boot 应用 ...
- Spring Boot(Cloud) 优雅停机
为了解决在微服务重启的过程中,可能出现一部分 http 请求处理失败的问题,提供一下方案 拟用方案: 第一步:重启前先从主动将服务剔除,并等待一段时间 第二步:停止服务并重启 一.主动将服务剔除 该方 ...
- 干货 | 携程中台化背景下的元数据驱动架构实践
作者简介 灿荣,携程软件技术专家,目前关注互联网中台以及中间件领域. 一.背景介绍 为解决系统重复建设.能力复用性低的问题,携程启动了中台化建设步伐.旅游行业的中台建设,携程并非从零开始,前期已经积累 ...
- 低代码、中台化:爱奇艺号微服务工作流实践
背景 微服务从诞生到现在,经历了很长时间.期间不同公司,不同的团队有各自独特的见解,但慢慢对于微服务的各个方面的理解,如服务发现一致性.容错.事务.熔断.降级.配置等等趋于一致.随着微服务在团队中应用 ...
- 潮水褪去看中台落地实践-学习资料下载(1):《业务中台建设方法之“中台需求结构化”(普元-喻吉林)》
" 潮水褪去看中台落地实践是一个系列,讲的是2021年中台的瓜怎么种.怎么吃的实践经验及心得." 分享一些2020中台战略暨互联网架构大会的公开版PPT,供中台系列阅读者参考. & ...
- 命令测试post_【第2088期】前端中台化,把格局做大——NodeJS 和测试服务探索
前言 今日早读文章由<React状态管理与同构实战>作者@LucasHC投稿分享. 正文从这开始~~ 近些年,「NodeJS 应该如何在公司业务中真实落地 」这类问题屡见不鲜.自从 200 ...
最新文章
- Oracle Logminer 做数据恢复 说明示例
- CircleDisplay
- 计算机视觉研究群体及专家主页汇总
- 微信浏览器不支持下载文件或应用解决方案
- python中sorted_Python中sorted()方法的用法
- 图像融合亮度一致_博文精选 | 基于深度学习的低光照图像增强方法总结
- 心脏为什么长在左边?原来是因为这个消失的器官
- android标题白色_Android设置布局背景为白色的三种方法
- [转]cookie、sesstion、localstorage、sesstionstorage的使用和区别
- 浏览器乱码问题的具体解决
- 函数-函数进阶-装饰器
- Java中FilterInputStream和FilterOutputStream的用法
- Springboot整合阿里云短信SDK发送短信验证码笔记
- 7-5 华氏度转摄氏度(四舍五入) (5分)
- 计量广义差分操作过程_计量学堂 | 计量经济学最基本的31个问题
- hive修复多级分区
- ffmpeg:制作gif / 提取视频帧为图片
- 【智慧照明】宾馆智能照明控制系统
- [原]Wap push over sms 实践
- 程序分析之中间表示(Intermediate Representation)