优雅的重启uwsgi 告别uwsgi reload过程中造成的无法请求、请求延迟等问题
[uwsgi]#使用优雅重启
lazy-apps = true
#监听monitor文件 当monitor文件发生改变是重启uwsgi
touch-chain-reload = /home/monitor
#据说可以用touch-reload=路径 来监听某个路径下是否有文件发生了改动
#个人认为还是监听某个不相干的文件比较好 每次需要重启的时候直接touch这个文件就行了
在uwsgi配置文件中加入上面的命令即可优雅的重启uwsgi了
在使用uwsgi+django过程中,接口少的时候看不出什么。当接口多并且请求也很多的时候 uwsgi --reload 这种操作就体现出他的短板了。有一次我在app下新增了个接口执行uwsgi --reload的时候突然发现之前的接口在请求中要么无响应要么等待时间特别的长
于是在网上一堆扒拉终于发现原来uwsgi可以“优雅的重启” 好吧!是我孤陋寡闻了
---------------------------------------------
以下内容来自网络
原文链接:https://blog.csdn.net/asas043/article/details/102443649
传统重启弊端:
后台上线功能,以往的做法是当有对代码进行更改,需要将新代码提供给用户时,将uwsgi服务器重新启动以使更改生效,但这个重启过程会将所有uwsgi的worker进程强行kill掉,然后再重新启动这些worker,导致的结果:
worker正在处理的请求无法正常处理完,
重启过程中uwsgi无法正常接收请求,请求报502的错误,特别是由于某些原因重启时间可能很久
从stop uwsgi到start uwsgi需要一定时间,这期间就损害了用户的体验:
在网站上看到服务不可用的错误
在请求处理中用户等待很久
服务重启遇到程序bug,导致重启失败
优雅重启过程:
优雅的重启是一门艺术,优雅重启的方式有多种,但经过测试,链式重启是最优选择之一,且实现起来非常方便
链式重启的实现过程是一个接一个工人依次重新加载启动,直到所有工人都重新加载完毕。比如你有五个工人,工人A,工人B,工人C...,当你触发链式重启时:
若工人A此刻正在处理请求,链式重启允许它完成此次请求,工人A开始重新加载最新代码
如果工人A顺利完成加载,此时工人A接收到的请求都由最新代码处理,而其他4个工人则依然运行旧代码
工人A顺利完成加载后,依次由工人B开始重新加载最新代码,重复此操作,直到每个工人都获取新代码。链式重启过程完成
如果前一个工人没有加载成功,那么后一个工人也不会进行重启加载,这就意味着,如果程序有bug,其他工人都不会受到任何影响,依然能正常接收请求,这点非常棒,与传统野蛮重启方式相比有明显优势
优雅的重启uwsgi 告别uwsgi reload过程中造成的无法请求、请求延迟等问题的更多相关文章
- redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用
redis 突然大量逐出导致读写请求block 内容目录: 现象 背景 原因 解决方案 ref 现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请 ...
- [原创] Nginx1.13版本reload过程对TCP包影响的测试
Nginx1.13版本reload过程中各项连接情况和状态的测试.测试Nginx1.13 Reload过程中,对客户端和服务器的TCP层面的包影响. 1)对客户端开启长连接,服务端开启/不开启 ...
- 浅析uWSGI、uwsgi、wsgi
WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...
- python Web中WSGI uWSGI 以及 uwsgi的区别
WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...
- 生产环境优雅的重启基于Nginx、Tornado的Web服务进程
Nginx是一个高效的Web服务器及代理服务器,Tornado是一个基于epoll的异步Web开发框架,通常使用Nginx做为Web服务器时,都会以FastCGI模式,而我们从开发.调试.运维的角度考 ...
- Nginx、WSGI、 uWSGI、 uwsgi的区别
当我们部署完一个应用程序,浏览网页时具体的过程是怎样的呢?首先我们得有一个 Web 服务器来处理 HTTP 协议的内容,Web 服务器获得客户端的请求,交给应用程序,应用程序处理完,返回给 Web 服 ...
- uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。
WSGI 协议 WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等.但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为 ...
- WSGI、uwsgi和uWSGI
一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...
- 区分wsgi、uWSGI、uwsgi、php-fpm、CGI、FastCGI
在学习Python web开发时候,可能会遇到诸如uwsgi,wsgi等名词,下面通过梳理总结探究它们之间的关系. CGI CGI,(Common Gateway Interface)通用网关接口,是 ...
- 如何在Eclipse和Tomcat的Debug过程中启用热部署
参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...
随机推荐
- Mysql之基础知识笔记
Mysql数据库基础知识个人笔记 连接本地数据库: mysql -h localhost -u root -p 回车输入数据库密码 数据库的基础操作: 查看当前所有的数据库:show database ...
- Android同屏、摄像头RTMP推送常用的数据接口设计探讨
前言 好多开发者在调用Android平台RTMP推送或轻量级RTSP服务接口时,采集到的video数据类型多样化,如420sp.I420.yv12.nv21.rgb的,还有的拿到的图像是倒置的,如果开 ...
- electron 起步
electron 起步 为什么要学 Electron,因为公司需要调试 electron 的应用. Electron 是 node 和 chromium 的结合体,可以使用 JavaScript,HT ...
- Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复
目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...
- .NET 7 来了!!!
.NET 7 首个RC(发布候选)版本 最近 .Net 的大事件,就是微软发布了.NET 7的首个RC(发布候选)版本,而据微软发布的消息,这是 .NET 7 的最后一个预览版,下一个版本将是第一个候 ...
- 在Ubuntu上安装Odoo时遇到的问题
这两天开始看<Odoo快速入门与实践 Python开发ERP指南>(刘金亮 2019年5月第1版 机械工业出版社).试着在Ubuntu上安装Odoo,遇到很多问题,通过在网上查找,都已解 ...
- dotnet7 aot编译实战
0 起因 这段日子看到dotnet7-rc1发布,我对NativeAot功能比较感兴趣,如果aot成功,这意味了我们的dotnet程序在防破解的上直接指数级提高.我随手使用asp.netcore-7. ...
- Elasticsearch Reindex性能提升10倍+实战
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484134&idx=1&sn=750249a ...
- 跳转控制语句break
执行某些循环时,当满足了某个条件,使其提早退出循环,便可以使用break跳出循环 流程图如下: 其他循环均可以以此类推 例子:
- 云原生下基于K8S声明式GitOps持续部署工具ArgoCD实战-上
@ 目录 概述 定义 工作原理 主要组件 核心概念 环境准备 概述 安装Kubekey 创建K8S 安装K9S OpenLB 安装ArgoCD 安装 ArgoCD CLI 从Git库中创建一个应用程序 ...