Design

关于Gunicorn架构的简要描述。

Server Model

Gunicorn是基于pre-fork(预启动,提前fork)的工作模式。这就意味着Gunicorn是由一个主进程来管理这些worker进程的。主进程不会知道那些客户端的任何事情,所有的请求和响应都是由worker进程来处理。

Master

主进程要做的就是监听各种子进程的信号和做出相应动作,它通过监听信号,如TTINTTOUCHLD来管理这些运行中的worker。TTINTTOU信号告诉主信号去增加或减少运行worker的数量。CHLD则是表明了一个子程序被终止了,这个时候主程序就会自动重启这个失败掉的worker。

Sync Workers

默认的worker工作模式就是同步worker,一次只能处理一个请求。这个模式是最简单的,因为无论出现任何错误,都只会影响那一个请求。尽管前文提出一次只执行一个请求,但我们在编写应用程序的时候要提出一些假设。(最后一句我暂时没有理解)

Async Workers

异步worker模式是基于Greenlets(通过EventletGevent实现)。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设计部分的翻译的更多相关文章

  1. 2014年的Google I/O app设计中的材料设计-渣渣的翻译

    又是一篇翻译,用了三个多小时.http://android-developers.blogspot.co.id/2014/08/material-design-in-2014-google-io-ap ...

  2. Gunicorn部署部分的翻译

    部署Gunicorn 文档建议Gunicorn最好是用在代理服务器后面.(等于前面最好加一个反向代理) Nginx Configuration 文档建议用Nginx,当然用其他也可以,但是要确保当你用 ...

  3. Gunicorn配置部分的翻译

    写在前面,虽然翻译得很烂,但也是我的劳动成果,转载请注明出处,谢谢. Gunicorn版本号19.7.1 Gunicorn配置 概述 三种配置方式 优先级如下,越后的优先级越大 1.框架的设置(现在只 ...

  4. Kafka的架构设计(目前翻译最好的一稿)

    转自:http://www.oschina.net/translate/kafka-design 参与翻译(4人):fbm, 飞翔的猴子, Khiyuan, nesteaa 感谢这些同志们的辛勤工作, ...

  5. 关于API:好的设计和坏的设计【eolink翻译】

    以前开发或更新 API 时,我们经常需要深入讨论对 API 的结构.命名和功能等,这个花费了大量的时间. 随着 API 行业的蓬勃发展,API 设计也越来越重要.这么多年发展下来,一些如REST AP ...

  6. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程

    PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程   作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...

  7. 来自HeroKu的HTTP API 设计指南(中文版)

    原文转自:http://get.jobdeer.com/343.get 来自HeroKu的HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国内 ...

  8. 【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结

    最近使用uwsgi出了一些问题,于是测试下Gunicorn测试对比下 环境 一颗cpu 1g内存 Centos系统 Django作为后端应用,Gunicorn默认模式和异步模式,响应基本是无阻塞类型 ...

  9. 对设计领域中Tile和Card的理解

    前端工程师离不开设计, 谈到设计就要想到大名鼎鼎的material design主题, 而material是以card为经典单元的, card即卡片, 是层次化模型的最小模块, 用于提供扁平化的信息, ...

随机推荐

  1. Spring RedisTemplate操作-List操作(4)

    @Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...

  2. LINQ 查询

    概述 事实上,对于LINQ to Objects来说,就是通过为IEnumerable<T>接口定义了一组约50个扩展方式来实现的. Lambda表达式(拉姆达表达式,Lambda Exp ...

  3. 关于z-index这个层级的问题

    z-index它可真是一个神奇的东西,它可以随意安排你的层的叠加问题. 如你想让红色矩形压在蓝色矩形上,正常布局先建立一个红色的再建议一个蓝色的,就可以了. 但如果我相反来建立,那么就得借助z-ind ...

  4. DDLog设置方法

          CHENYILONG Blog DDLog设置方法 本文永久地址为http://www.cnblogs.com/ChenYilong/p/3984246.html,转载请注明出处. 201 ...

  5. 3.微信公众号开发:配置与微信公众平台服务器交互的URL接口地址

    微信开发基本原理: 1.首先有3个对象 分别是微信用户端 微信公众平台服务器 开发者服务器(也就是放自己代码的服务器) 三者间互相交互 2.微信公众平台服务器 充当中间者角色 (以被动回复消息为例) ...

  6. Paint Fence

    There is a fence with n posts, each post can be painted with one of the k colors.You have to paint a ...

  7. 记录自己对EventLoop和性能问题处理的一点心得【转】

    转自:http://www.cnblogs.com/lanyuliuyun/p/4483384.html 1.EventLoop 这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序 ...

  8. 009_【OS X和iOS系统学习笔记】 OS X架构

    1.OS X是整个操作系统的集体名称,而Darwin是其中的一个组件. 2.Darwin是操作系统的类UNIX核心,本身由内核.XNU和运行时组成. 3.uname指令:可以得到有关架构的详细信息以及 ...

  9. node+webpack环境搭建 vue.js 2.0 基础学习笔记

    npm install -g vue //全局安装vue npm install -g webpack //全局安装webpack npm install -g vue-cli //全局安装vue-c ...

  10. Caffe学习系列(17): blob

    对于blob.h文件. 先看成员变量.定义了6个保护的成员变量,包括前.后向传播的数据,新.旧形状数据(?), 数据个数及容量. 再看成员函数.包括构造函数(4个参数),reshape(改变blob形 ...