Gunicorn设计部分的翻译
Design
关于Gunicorn架构的简要描述。
Server Model
Gunicorn是基于pre-fork(预启动,提前fork)的工作模式。这就意味着Gunicorn是由一个主进程来管理这些worker进程的。主进程不会知道那些客户端的任何事情,所有的请求和响应都是由worker进程来处理。
Master
主进程要做的就是监听各种子进程的信号和做出相应动作,它通过监听信号,如TTIN,TTOU,CHLD来管理这些运行中的worker。TTIN和TTOU信号告诉主信号去增加或减少运行worker的数量。CHLD则是表明了一个子程序被终止了,这个时候主程序就会自动重启这个失败掉的worker。
Sync Workers
默认的worker工作模式就是同步worker,一次只能处理一个请求。这个模式是最简单的,因为无论出现任何错误,都只会影响那一个请求。尽管前文提出一次只执行一个请求,但我们在编写应用程序的时候要提出一些假设。(最后一句我暂时没有理解)
Async Workers
异步worker模式是基于Greenlets(通过Eventlet和Gevent实现)。Greenlets是由python的多线程协作实现的。一般情况下,我们的应用可以直接使用这个worker模式而不需要做其他事情。
Tornado Workers
Gunicorn也支持Tornado worker模式,你还可以用Tornado的框架来写相应的应用。不过尽管Tornado worker能够用来处理WSGI应用,但文档并不推荐使用这个模式。
AsyncIO Workers
这个模式是兼容python3的,有两种worker。
gthread模式是线程worker,它从主循环中接收连接,将这个连接作为一个任务放到线程池中。在长连接的情况下,连接会被放在循环中等待事件的发生,如果长连接超时还没有事件发生的话,连接会被关闭。
gaiohttp就是直接用aiohttp这个库。(仅支持python3)
Choosing a Worker Type
默认的同步工作模式是假设你的应用是受到CPU和网络带宽的限制,一般情况下,就是说你的应用不会处理大量不可预见的访问。举个例子,假如你的应用突然收到很多请求,那么有可能会有很多连接堆积在服务器上,从而导致一些对外服务失效。在这种情况下,异步工作模式会更好一些。
文档解释推荐设置一个缓存代理在Gunicorn前面的主要原因,是因为假设了硬件资源不足。如果直接将这些暴露到网络中,dos攻击就会笑出声。文档推荐了用Hey来做负载测试。
以下行为要求异步模式
- 应用中有长阻塞
- 面向网络的服务请求(个人理解为就是API)
- 流请求和流响应
- 长时间轮询
- 网络套接字
- Comet
Gunicorn设计部分的翻译的更多相关文章
- 2014年的Google I/O app设计中的材料设计-渣渣的翻译
又是一篇翻译,用了三个多小时.http://android-developers.blogspot.co.id/2014/08/material-design-in-2014-google-io-ap ...
- Gunicorn部署部分的翻译
部署Gunicorn 文档建议Gunicorn最好是用在代理服务器后面.(等于前面最好加一个反向代理) Nginx Configuration 文档建议用Nginx,当然用其他也可以,但是要确保当你用 ...
- Gunicorn配置部分的翻译
写在前面,虽然翻译得很烂,但也是我的劳动成果,转载请注明出处,谢谢. Gunicorn版本号19.7.1 Gunicorn配置 概述 三种配置方式 优先级如下,越后的优先级越大 1.框架的设置(现在只 ...
- Kafka的架构设计(目前翻译最好的一稿)
转自:http://www.oschina.net/translate/kafka-design 参与翻译(4人):fbm, 飞翔的猴子, Khiyuan, nesteaa 感谢这些同志们的辛勤工作, ...
- 关于API:好的设计和坏的设计【eolink翻译】
以前开发或更新 API 时,我们经常需要深入讨论对 API 的结构.命名和功能等,这个花费了大量的时间. 随着 API 行业的蓬勃发展,API 设计也越来越重要.这么多年发展下来,一些如REST AP ...
- PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程
PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程 作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...
- 来自HeroKu的HTTP API 设计指南(中文版)
原文转自:http://get.jobdeer.com/343.get 来自HeroKu的HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国内 ...
- 【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
最近使用uwsgi出了一些问题,于是测试下Gunicorn测试对比下 环境 一颗cpu 1g内存 Centos系统 Django作为后端应用,Gunicorn默认模式和异步模式,响应基本是无阻塞类型 ...
- 对设计领域中Tile和Card的理解
前端工程师离不开设计, 谈到设计就要想到大名鼎鼎的material design主题, 而material是以card为经典单元的, card即卡片, 是层次化模型的最小模块, 用于提供扁平化的信息, ...
随机推荐
- python AjaxSpider 代码演示
import re # 引入正则表达式 import json # 引入 json import pymongo # 引入mongo数据库 import requests # 引入HTTP请求协议 f ...
- [转载]AngularJS 指令 用法
http://book.2cto.com/201312/37782.html http://www.itnose.net/detail/6144038.html http://www.cnblogs. ...
- 20155227 2016-2017-2 《Java程序设计》第五周学习总结
20155227 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 语法与继承架构 使用try...catch JVM会尝试执行try区块中的程序代码,如果发生 ...
- Python实现网页截图(PyQT5)
方案说明 功能要求:实现网页加载后将页面截取成长图片涉及模块:PyQT5 PIL逻辑说明: 1:完成窗口设置,利用PyQT5 QWebEngineView加载网页地址,待网页加载完成后,调用check ...
- Python程序员之面试必回习题
写在前面 近日恰逢学生毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话就的同学回答]. 期待 ...
- golang的sort研究
年前没钱,等发工资.就这么在公司耗着不敢回家,无聊看了下golang的sort源码 type Interface interface { // Len is the number of element ...
- PyCharm 2018实现远程调试代码
pycharm是一个非常强大的python开发工具,现在很多代码最终在线上跑的环境都是linux,而开发环境可能还是windows下开发,这就需要经常在linux上进行调试,或者在linux对代码进行 ...
- ssh远程免密登录Linux
一.在本地机器创建公钥,一路回车即可 ssh-keygen -t rsa 二.发送公钥到远程服务器端 如果是默认端口:scp id_rsa.pub user@ip:~/.shh 如果远程服务器设置的是 ...
- XShell 使用方法
XShell是一款Windows下非常优秀的远程连接Linux主机的工具,是平常使用不可缺少的工具.复制和粘贴由于在linux的Shell下,Ctrl+c是中断当前指令,这个快捷键和win系统下的复制 ...
- jenkins的svn路径中文问题
今天弄Jenkins,我们的SVN代码路径是中文的,他娘的坑死我了,很没面子弄了俩点,网上方案试了好多,说装插件,修改Tomcat server.xml,基本没用,后来看到一个帖子写的方案蛮实用的,分 ...