RPC 服务优雅停机、优雅重启,你的服务重启够优雅吗?

2023-11-16

关注公众号【1024个为什么】,及时接收最新推送文章!

背景

由于最近上线比较频繁,就遇到了一个小概率的数据不一致的问题。

具体过程如下:

3f2fbb5bcadd375bed82bc94326e2405.png

很明显,是服务没有做到优雅停机,导致的两个服务的数据不一致。

优雅停机、优雅重启,本质到底是什么?

优雅重启涵盖了优雅停机、优雅启动。

优雅停机:就是 JVM 进程杀掉之前,要做好各项收尾工作;

常说的优雅停机一般是指 RPC 框架的工作线程 和 Spring 容器的销毁(容器中可能包含各种连接池对象的管理)。但服务复杂了之后,除了上面两种线程之外,难免会有其他的工作线程,在服务重启的时候被忽略掉。就会造成这些线程还在努力工作,突然被重启信号强制中断,产生各种意外的结果。

优雅启动:就是在各项必要的预备工作准备完成之后,才能对外暴露服务。

拿一个餐馆场景举例

优雅停机

餐馆到点要关门了

1)迎宾要在门口挂上闭店的通知,新的顾客就不能进来了

对比我们的服务,就是通知注册中心,告知客户端,本节点要下线了,不再接受新请求了

2)等店内现有就餐人员用餐完毕离开后,正式闭店

对比我们的服务,就是等待 RPC 框架的工作线程执行结束后,停掉 JVM 进程

但是,等待现有就餐人员用餐完毕之前,厨房、收银员等人员不能先下班,可能还需要加菜、热菜什么的。

对比我们的服务,就是 Spring 管理的 bean 对象等其他工作线程需要的资源不能提前被清理。

还有其他非 RPC 框架的工作线程,如果不能直接被中断,也要保证不能先于 RPC 框架的工作线程结束,也要保证这些线程能够正常执行完毕。

优雅启动(大体是优雅停机的逆向)

餐馆早上要开门营业了

1)餐馆的点菜系统、卫生、桌椅等等,必须在开门前准备到位

对比我们的服务,就是必须把 Spring、数据库、redis 等工作线程干活必须要用的资源准备好

2)开门营业,可以接待顾客

对比我们的服务,就是通知注册中心,我这个节点可以对外提供服务了,保证有请求过来时能有相应的工作线程干活。

其他一些不太紧急的事情,比如菜单、餐具等等,可以等开门后或者有顾客进来后再提供。

对比我们的服务,比如获取配置信息、慢热数据等等,都可以等有请求过来再慢慢处理。

解决方案

本质搞清楚后,解决这个问题就变的很简单了。

通过 RPC 框架提供的 shutdown 钩子(由于我们是自研框架,主流开源框架在网上都能找到方案,这里就不赘述了)。

1)停掉 MQ 客户端,不再接收新消息;

2)强制等待 5 秒后(前提是要评估出 MQ 客户端待消费队列中的消息是否能在 5 秒内处理完毕),再杀掉 JVM 进程。

优雅停机处理不好,可能会造成数据不一致的问题。

优雅启动处理不好,可能会给调用方带来很多异常。

原创不易,多多关注,一键三连,感谢支持!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RPC 服务优雅停机、优雅重启,你的服务重启够优雅吗? 的相关文章

随机推荐

  • 信息安全工程实践笔记--Day2 暴力破解

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 实验目标 一 弱口令分类 1 系统服务弱口令 2 设备弱口令 3 社工型的弱口令 二 弱口令的攻击方式 暴力破解获取密码的方式 三 bp实操 1 bp模块讲解 1
  • opencv中的cv::ximgproc::SuperpixelSLIC,cv::ximgproc::SuperpixelSEEDS,SuperpixelLSC是超像素算法的

    可以研读下源码 集成到建筑物提取中
  • WorkPlus打造智慧企业移动门户,开启高效办公新时代

    在移动互联网时代 企业对于高效办公和便捷访问的需求不断增长 WorkPlus作为领先的品牌 致力于打造智慧企业移动门户 帮助企业实现高效协作与便捷访问 本文将重点介绍WorkPlus如何通过创新解决方案 为企业提供定制化的智慧移动门户 提升
  • kotlin.text.charsets

    java lang NoClassDefFoundError didn t find class kotlin text charsets Android studio项目中引入了自己下载的两个jar 3 10版本的okhttp和2 0版本
  • jQuery调用接口获取城市天气信息

    jQuery调用接口获取城市天气信息 代码如下
  • idea项目提交git报错bad revision ‘head‘

    报错 bad revision head 新建了一个文件夹 将后端项目 前端项目都放到这个文件夹里面去了 然后想提交git VCS gt import into Version control gt Create git Repositor
  • python中的pip、anaconda换国内源图文解析

    一 python中的pip换源 pip的源换成国内的源 1 首先在C Users 用户 自己的用户名目录下新建一个文件夹pip 2 之后在pip文件夹下新建一个pip txt 里边设置好国内的源 保存后改名为pip ini 文件内的内容如下
  • java中找不到符号是什么意思_JAVA小白入门很难发现的错误

    紧跟着上一篇文章 如何编写JAVA小白第一个程序 首先我们可以来做一下错误示范 这个是我们的Hello java文件 打开命令提示符 编译HelloWorld java 首先这肯定不是环境变量搞错了 可是我文件明明在目录下面 怎么就找不到文
  • Pandas50个高级高频操作

    01 复杂查询 实际业务需求往往需要按照一定的条件甚至复杂的组合条件来查询数据 接下来为大家介绍如何发挥Pandas数据筛选的无限可能 随心所欲地取用数据 1 逻辑运算 Q1成绩大于36df Q1 gt 36 Q1成绩不小于60分 并且是C
  • 构造函数&类属性和实例属性&析构函数

    1 构造函数 概念 构造函数包括 new 和 init 构造函数 也被称为构造器 指的是当创建对象的时候 被自动调用的函数 注意 在Python中 以 xxx 方式命名的函数被称为魔术函数 魔术方法 这类函数在使用的时候无需手动调用 在进行
  • 海得服务器虚拟机,海得PLC远程编程调试流程

    原标题 海得PLC远程编程调试流程 海得PLC远程编程调试流程 1 HINET智能网关LAN口默认IP地址是192 168 1 1 工业智能网关 2 假定PLC的IP地址是192 168 10 2 并且要求不能改变 海得plc 3 将HIN
  • 消息队列:Ubuntu16.04安装和Web页面管理RabbitMQ(楼主亲测、真实有效)

    RabbitMQ 总来来说 RabbitMQ的安装还是有一些难度的 不同的方式 安装的方法也是完全不一样 还要解决蛮多依赖 加上现在有些网站 极其不负责 很多博文都没有经过测试检验就直接发出来的 楼主来亲测一下 希望能对大家有好的帮助 一
  • C++ templates之“模板的模板参数”

    定义 指一个模板 它本身的参数类型就是模板 在英语原文中是 template template parameter 例如 template
  • hdu 5792 World is Exploding 2016 Multi-University 5

    Problem acm hdu edu cn showproblem php pid 5792 题意 给一个序列 V 问有多少个由下标组成的四元组 a b c d 满足 a b c d a lt b c lt d Va lt Vb Vc g
  • 在centos7安装anaconda步骤,亲测。

    在centos7上安装anaconda碰到很多的坑 分享出来 也免得以后自己忘记 第一步 首先anaconda官网下载linux安装包 网址为 https www anaconda com 或者在清华镜像下载 https mirrors t
  • konisGraph学习。复杂查询优化记录

    最近有需求是查两个公司之间的投资关系 比如 a和b之间有哪些直接投资和间接投资 例如 a gt b a gt e gt b a gt c gt d gt b b gt f gt a 需求是查出7跳以内的ab之间的投资关系 v的标签是comp
  • inline内联函数的作用和几点注意

    一 关键字inline必须与函数定义体放在一起才能使函数成为内联 仅将inline放在函数声明前面不起任何作用 二 定义在类声明之中的成员函数将自动地成为内联函数 以上可参考 http blog 163 com jinyongming bl
  • 矩阵求导 两种布局 及常用基础公式

    一 矩阵求导的两种形式 刚开始看矩阵求导这一块的时候发现一模一样的两个公式 在不同地方结果老是不一样 给我看懵了好一阵子 后来才发现原来有两种布局模式 都是可以的 矩阵求导的布局方式有两种 分子布局和分母布局 下面以 小写字母 小写粗体字母
  • stm32晶振配置不一致导致 Invalid Rom Table 至芯片锁死解决方案

    参考博文 Invalid ROM Table原因及解决办法 STM32芯片锁死问题 概述 在调试STM32时 出现如下的现象 软件写好之后首次下载程序至芯片时成功 但程序未能正常运行 之后再下载程序时便报错 Invalid ROM Tabl
  • RPC 服务优雅停机、优雅重启,你的服务重启够优雅吗?

    关注公众号 1024个为什么 及时接收最新推送文章 背景 由于最近上线比较频繁 就遇到了一个小概率的数据不一致的问题 具体过程如下 很明显 是服务没有做到优雅停机 导致的两个服务的数据不一致 优雅停机 优雅重启 本质到底是什么 优雅重启涵盖