uWSGI服务实现优雅重启(graceful reload)的方式

服务端当前使用方式

直接通过svc发送SIGINT/SIGKILL信号

直接触发real_run脚本中的相关信号通知

使用简单

每次重启所有进程(包括master),重启完成为全新的进程

不等待已有请求完成直接结束旧进程,

新进程ready前所有新请求将无法处理,相当于服务down掉一段时间(秒级)–-靠nginx实现fail over

Standard (default/boring) graceful reload (aka SIGHUP)

直接发送SIGHUP信号

master进程本身不重启,等待已有请求处理结束后结束worker

新worker ready前,所有新请求将进入等待队列

使用简单

不会存在不一致状态

基本重置了所有进程状态

等待队列满了之后的新请求将直接报错

新请求可能需要等待较长时间

Workers reloading in lazy-apps mode

write w to The Master FIFO

wait for running workers and then restart each of them.

avoids restarting the whole instance.

和standar方式一样新请求需要进入队列等待

write c to The Master FIFO

已有请求处理完成后reload 一个worker,新worker ready后才重启下一个worker

新请求无需进入等待队列等待,多个worker之中始终有可以接受请求的worker在工作

逐个worker重启降低机器短时负载

只能处理worker代码更新的重启,无法更改uwsgi option配置

需要多个worker配置才能有较好效果

Zerg mode

配置 zerg server 或者 zerg pool(绑定unix socket)

首先spawn 新worker,ready后shutdown 旧worker(具体参见下面的Zerg Dance-自动化这一过程的一种实现)

基本已经算是0停机reload

允许master配置不同的option重启

需要一个额外的进程

相对没那么容易管理

reload时需要拷贝整个uWSGI栈

The Zerg Dance: Pausing instances 通过配置3个Master FIFOs+ uWSGI 高级hooks实现开启新进程,暂停(pause)旧进程

truly zero-downtime reload.

需要使用高级的uWSGI和Unix技术,配置较为复杂

综合考虑,链式重启的方式配置简单,而且在多worker的情况下已经完全能够避免异常1与异常2问题的产生,考虑到实际上更改uWSGI配置的频率非常之低–偶尔需要按照旧有方式有损重启master进程也可以接受,因而采用链式重启实现uWSGI配置的优雅重启即可,实际只需要在原.xml配置文件中加上 (对应.ini文件、命令行参数加上master-fifo也一样) ,表示通过/tmp/uwsgi_api.fifo 管道传输命令,需要重启时执行 echo c > /tmp/uwsgi_api.fifo 即可。

旧配置:

新配置:

PS: 在网上搜索到已经有人分享过 uWSGI平滑重启的方式,多篇文章来源看上去都是同一篇–uwsgi graceful reload,所采用的也是链式重启,都是通过配置 在.ini配置文件中添加:touch-chain-reload=XXX/settings.py <span class="hljs-attr">&#xA0;<span>&#x5B9E;&#x73B0;&#xFF0C;&#x5373;&#x6BCF;&#x6B21;&#x901A;&#x8FC7;touch &#x67D0;&#x4E2A;&#x4EE3;&#x7801;&#x6587;&#x4EF6;&#x7684;&#x65B9;&#x5F0F;&#x5B9E;&#x73B0;&#x89E6;&#x53D1;&#x81EA;&#x52A8;&#x91CD;&#x542F;&#xFF0C;&#x540E;&#x9762;&#x94FE;&#x5F0F;&#x91CD;&#x542F;&#x903B;&#x8F91;&#x672C;&#x8D28;&#x90FD;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x53EA;&#x5728;&#x4E8E;&#x6211;&#x8FD9;&#x91CC;&#x662F;&#x901A;&#x8FC7;&#x7BA1;&#x9053;&#x53D1;&#x9001;&#x91CD;&#x542F;&#x547D;&#x4EE4;&#xFF0C;&#x800C;&#x524D;&#x8005;&#x662F;&#x901A;&#x8FC7;&#x76D1;&#x63A7;&#x4EE3;&#x7801;&#x6587;&#x4EF6;&#x72B6;&#x6001;&#x5B9E;&#x73B0;&#x3002;&#x4E2A;&#x4EBA;&#x8BA4;&#x4E3A;&#x901A;&#x8FC7;&#x547D;&#x540D;&#x7BA1;&#x9053;&#x65B9;&#x5F0F;&#x89E6;&#x53D1;&#x91CD;&#x542F;&#x66F4;&#x53EF;&#x63A7;&#x4E00;&#x4E9B;&#xFF0C;&#x8FD9;&#x6837;&#x80FD;&#x5C06;&#x91CD;&#x542F;&#x64CD;&#x4F5C;&#x672C;&#x8EAB;&#x4E0E;&#x4EE3;&#x7801;&#x72B6;&#x6001;&#x8FD9;&#x4E24;&#x4E2A;&#x672C;&#x5C31;&#x4E0D;&#x5E94;&#x8BE5;&#x76F8;&#x5173;&#x5185;&#x5BB9;&#x7684;&#x4E8B;&#x52A1;&#x9694;&#x79BB;&#x5F00;&#x6765;&#xFF0C;&#x800C;&#x4E14;&#x91C7;&#x7528;touch&#x65B9;&#x5F0F;&#xFF0C;&#x4EFB;&#x4F55;&#x65F6;&#x5019;&#x7EBF;&#x4E0A;&#x53EA;&#x8981;&#x4E00;&#x53D1;&#x751F;&#x4EE3;&#x7801;&#x66F4;&#x65B0;--git pull&#x65B0;&#x4EE3;&#x7801;&#x3001;cp&#x8986;&#x76D6;&#x65B0;&#x4EE3;&#x7801;&#x4E43;&#x81F3;&#x7F16;&#x8F91;&#x4FEE;&#x6539;&#x4EE3;&#x7801;&#xFF08;&#x5E94;&#x6781;&#x529B;&#x907F;&#x514D;&#xFF09;--&#x65E0;&#x8BBA;&#x662F;&#x6709;&#x610F;&#x65E0;&#x610F;&#xFF0C;&#x90FD;&#x5C06;&#x89E6;&#x53D1;reload&#xFF0C;&#x8FD9;&#x4E0D;&#x4E00;&#x5B9A;&#x662F;&#x64CD;&#x4F5C;&#x8005;&#x672C;&#x8EAB;&#x60F3;&#x8981;&#x7684;&#xFF0C;&#x800C;&#x901A;&#x8FC7;&#x7BA1;&#x9053;&#x65B9;&#x5F0F;&#xFF0C;&#x5219;&#x5F88;&#x660E;&#x786E;&#x8BE5;&#x64CD;&#x4F5C;&#x5C31;&#x662F;&#x9700;&#x8981;&#x91CD;&#x542F;server&#x3002;</span></span>

Original: https://www.cnblogs.com/AcAc-t/p/uWSGI_graceful_reload.html
Author: 及时
Title: uWSGI服务实现优雅重启(graceful reload)的方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643846/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Windows11关闭信息播报教程

    这个功能可以说是我认为Windows系统中最烦恼的,而且非常鸡肋! 比如当你在看网课正起劲的时候,突然系统通知弹出一条信息,然后机器人语音巴拉巴拉说个不停,就很烦人。 怎么永久关闭…

    技术杂谈 2023年6月21日
    0280
  • MyBatis学习(一)

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射;MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作;MyBatis …

    技术杂谈 2023年7月24日
    067
  • 自定义TREEVIEWUL无限极嵌套

    背景:做一个多级图片分类管理,当然要用到TreeView,在asp.net中已经提供了此服务器控件,参照效果,自定义一个简单可控性高的就当做练手吧! 效果:如图,小图标 折叠 展开…

    技术杂谈 2023年7月23日
    089
  • request.getSession(true/false)的区别

    【原文链接】:https://blog.tecchen.tech ,博文同步发布到博客园。由于精力有限,对文章的更新可能不能及时同步,请点击上面的原文链接访问最新内容。欢迎访问我的…

    技术杂谈 2023年7月11日
    062
  • 使用C#做为游戏开发的服务器语言方案

    Scut开源服务器 开源C#/Python/Lua 手游服务器 从2015-09-11不再更新。 前后端统一的游戏开发方案 Unity3D Client And C# Server…

    技术杂谈 2023年6月1日
    089
  • 人工智能算法综述(二) RNN and LSTM

    接上一篇 :AI算法综述 (一) RNN:循环神经网络 and LSTM 长短期记忆网络 LSTM就是一个RNN网络,外部的结构是一样的,主要是单元的内在结构不同。或者说LSTM是…

    技术杂谈 2023年6月21日
    0100
  • tarojs引入taro-ui时出现找不到 “./style/index.scss“问题解决。

    很经典的问题,每次引入taro-ui都会有同样的问题 将package.json中的taro-ui库删除; 在 devDependencies中添加如下代码: "devD…

    技术杂谈 2023年6月21日
    0120
  • bilibili动画下载视频批量改名(python)

    bilib应用 在微软商店中下载哔哩哔哩动画,虽然软件UI古老,但是贵在稳定和支持下载 安装以后搜索自己想要的视频,然后缓存下载 下载后进入下载的路径 视频文件重命名 打开自动命令…

    技术杂谈 2023年7月24日
    084
  • 参加胶东开发者技术大会有感

    2015年的时候,也是在12月,我和Bob去北京参加了”全球架构师峰会”,在那次会议上,来自百度、腾讯、阿里巴巴、京东、美团、新浪微博、Twitter等公司…

    技术杂谈 2023年5月31日
    0111
  • Java——关于HashMap的面试问题

    1、HashMap的底层实现 答:JDK1.7及其之前的版本是数组+链表,JDK1.8是数组+链表/红黑树 2、HashMap的数组的元素类型 答:java.util.Map$En…

    技术杂谈 2023年7月24日
    076
  • 时间序列–Holt-Winters

    Holt-winters 三次指数平滑 原始预测——简单平均——移动平均———加权移动平均 1)单指数平滑法:s(t+1)= ax(t) + (1-a) s(t-1) , a 许更…

    技术杂谈 2023年5月31日
    0100
  • 不要让 pip install timeout 成为你的烦恼

    解决 pip install下载很慢或者总是下载失败的问题。 首先要知道原因,其次要找到方法,最后做好总结。 路漫漫兮其修远兮,吾将上下而求索! 默认 pip使用的是国外的镜像,下…

    技术杂谈 2023年7月25日
    070
  • GO select

    分析: 第一次:i=0; ch 是空的, x:= Original: https://www.cnblogs.com/kaituorensheng/p/15866551.htmlA…

    技术杂谈 2023年5月31日
    085
  • Python-装饰器的入门讲解

    小白在学习装饰器时,会遇到一些地方不太理解或者不太清楚,这是因为一开始你就直接撸装饰器的缘故,那么怎样才能将装饰器理解并且弄懂呢?所以在学装饰器之前必须要弄懂函数的嵌套以及闭包,接…

    技术杂谈 2023年7月25日
    079
  • win10 插入麦克风后没有声音,显示未插入

    进入”控制面板”->Realtek高清晰音频管理器->选择插入的为麦克风 Original: https://www.cnblogs.com/j…

    技术杂谈 2023年5月31日
    081
  • react新手demo——TodoList

    今天我们就使用 react 来实现一个简易版的 todolist ,我们可以使用这个 demo 进行 list 的增删改差,实际效果如上图所示。大家可以 clone下来查看:rea…

    技术杂谈 2023年5月31日
    098
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球