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. .NET面试题系列(九)C# 结构体与类的区别

    谈一下什么时候使用结构,什么使用类. 我们知道,结构存储在栈中,而栈有1个特点,就是空间较小,但是访问速度较快,堆空间较大,但是访问速度相对较慢.所以当我们描述1个轻量级对象的时候,可以将其定义为结构 ...

  2. MongoDB-3.4搭建副本集

    搭建副本集 1:首先创建3台虚拟机作为配置环境 IP1:192.168.101.175 IP2:192.168.101.176 IP3:192.168.101.177 2.下载MongoDB 3.4版 ...

  3. [ASP.NET]初试Web API

    Web API 1: 需要环境(VS2010/.Net4.0/MVC4 ) http://www.asp.net/web-api/overview/creating-web-apis/creating ...

  4. 20155306 2016-2017-2 《Java程序设计》第八周学习总结

    20155306 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章 通用API 15.1 日志 java.util.loggging包提供了日志功能相 ...

  5. lemon spj无效编译器解决方法

    反正我是被坑了很久,心里增的敲难过呀! 我曾经无数次的想把它解决掉: 啊啊啊啊啊啊! 什么嘛!什么嘛! 这个空白的框框里到底要填什么嘛!!! 你已经是一个成熟的lemon了,就不能自动识别给个选项吗! ...

  6. 洛谷 P1525 【关押罪犯】种类并查集

    题解 P1525 [关押罪犯]:种类并查集 前言: 在数据结构并查集中,种类并查集属于扩展域并查集一类. 比较典型的题目就是:食物链(比本题难一些,有三个种类存在) 首先讲一下本题的贪心,这个是必须要 ...

  7. Android启动过程

    1.背景知识                                                          Init进程是Linux环境下非常重要的一个进程,而Zygote进程是J ...

  8. linux网络编程--Circular Buffer(Ring Buffer) 环形缓冲区的设计与实现【转】

    转自:https://blog.csdn.net/yusiguyuan/article/details/18368095 1. 应用场景 网络编程中有这样一种场景:需要应用程序代码一边从TCP/IP协 ...

  9. IPsec工具之ipsec-tools

    Linux从2.6内核开始自带IPsec模块,配合IPsec-Tools,可以实现Linux的IPsec功能. IPsec-Tools包含4个模块 libipsec:PF_KEY实现库 setkey: ...

  10. linux下cpu物理个数、多核、超线程判断解析

    在Linux体系中,供给了proc文件体系显示体系的软硬件信息.若是想懂得体系中CPU的供给商和相干设备信息,则可以经由过程/proc/cpuinfo文件获得.本文章针对该文件进行简单的总结. 基于指 ...