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/578247/

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

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球