Tornado HTTPServer

Tornado 官方文档和源代码中的几个例子都是运行在单进程模式的, 但是一样可以很简单地运行在多进程模式下。

参看:Tornado: 2. 源码分析 (2)

文章中虽然分析的是 0.2 版本的代码, 但是直到现在最新的 1.2.1 版本中,这些内容也基本没变。

httpserver.py:

If num_processes is None or <= 0, we detect the number of cores available on this machine and fork that number of child processes. If num_processes is given and > 1, we fork that specific number of sub-processes.

没有测试过多进程模式下的性能和稳定性。

Tornado 官方文档: Tornado Web Server Document 官方文档的中文翻译: python_Tornado文档翻译

官方文档中并没有提到使用多进程模式运行 Tornado 实例, 而是提出:

We ran 4 single-threaded Tornado frontends behind an nginx reverse proxy, which is how we recommend running Tornado in production (our load test machine had four cores, and we recommend 1 frontend per core).

整篇文档完全没有提及 pre-forking .

估计是因为: (httpserver.py)

Since we use processes and not threads, there is no shared memory between any server code.

所以在官方文档中提及的使用 "1 frontend per core" 的部署方式, 在性能和资源消耗上应该是和 pre-forking 没什么差别的?

而分别在 nginx 后部署多个 Tornado 单进程实例也还是有些好处的, 比如可以自己控制单进程实例的数量。

Javascript

2010,10,04

当你还沉溺于各种层出不穷的“Web容器”和“Web框架”的时候, 你或许没有留意到某个再平常不过的语言正在步入强大到你将无法想像的境界?

JavaEye 不久前引用了一篇关于 Javascript 最新发展的文章: 警惕Java,迎来JavaScript 。引起了广泛的讨论。 对于其中 node.js 项目, 我编译了最新的 nodejs (v0.2.0 2010.09.24 commit 353e2565d5867f457c03e5e011b5e13a2254b96f), 并按照其 helloworld 例子做了测试, 测试结果显示其服务器端性能确实强悍! 就连 Go 语言的那个 Helloworld HTTP 例子也没这么牛。。。

( 在我的 Gateway T6832c 本本上,Intel Core 2 Duo T5750,2G DDR2 RAM , $ ab -n 10000 -c 30 http://127.0.0.1:8124/ 得到大概 7000rps 左右的速度,最长的请求也只是10多ms而已。 $ ab -n 100000 -c 1000 http://127.0.0.1:8124/ 得到大概 6000rps 左右的速度,最长的请求大概是9000多ms 。 而 Go 语言的 Helloworld HTTP 例子不大稳定, 经常在中间几万个请求时就断掉了 (apr_socket_recv: Connection reset by peer (104)), 成功时候得到大概 5000多rps 速度,最长的请求大概在16000ms左右。 不过测试中 node.js 使用 CPU 两个核心经常轮流达到 100% , 而 Go 程序使用 CPU 两个核心好像一般徘徊在 80%-90% 之间,最多不会达到 100% 。 )

粗略阅读了新颖的 node.js 官方文档, 想到的正如上面那篇文章所指出的: “它的最重要的一项革新就是实现了针对服务器端开发的面向事件的编程模型。” 就算她暂时还不能“把Java从唯我独尊的宝座上拉下来”, 但是却开始有望和其他流行的脚本语言如 Python,Ruby 等在 Web Server 领域较量了。 因为看上去她的确是已经满足作为一种“试验品”了, 嗯,强烈期待基于此强力基础项目的项目面世!

回头看看 Javascript 的近来的进展, 比如在 NoSQL 方面,CouchDB 和 MongoDB 都使用到 Mozilla 的 SpiderMonkey 项目。 其中特别是 MongoDB 已经应用于很多大型项目之中,如 sourceforge , github 等。 Javascript 的“魔掌”已经触及到越来越多本来不“属于”她的领域了。 而且其表现出来的性能真的是非常的诱人。 (MongoDB 一个很“牛”的地方是其编译期间产生的中间文件超级大,加起来大概有1GB多, 而且随着版本的更新,这个数目似乎一直在攀升。 相比其几MB的源文件和几十MB的编译后得到的二进制程序实在令人费解。。。)

不过,有点让人“担忧”的是:这是否会使开发人员的素质下降呢? 请看这篇小文章: Javascript程序员嘴最脏?? 呵呵 :-)

Tomcat 7

2010,10,03

Tomcat 7 正式版终于发布了。 JavaEye 翻译的文章:Tomcat 7 的七大新特性 中,可能让使用 Java 开发 Servelet 应用的人感觉到些许进展, 然而,在这些特性之中,他们大部分已经在脚本语言的 Web 框架中应用许久, 比如 Python 的 Tornado 框架等等。

Python 的 WSGI 协议或许让人更容易理解 Web 应用之间的流程, 不过 Servelet 的原理也许让人更容易理解 HTTP 协议的原理和应用。

关于 Tomcat 的工作原理有本书《How Tomcat Works》。 不过,一些简单文章可以让我们更快的初步了解其基本的实现原理, How Java Web Servers Work 应该是其中最简单易懂的一篇了。 这篇文章有中文翻译,如: How Java Web Servers Work 看完这篇小文章,相信 HTTP 协议最基础的地方已经有些明了。 不会像以前那样虽然知道请求 Request 和应答 Response , 就是很难言明这些到底是怎么回事或者如何使用这些达到各种需求。 另外一篇是比较详细点的: How Servlet Containers Work 这篇文章暂时没有认真阅读,对 Servlet 的分析应该更加深入一些。 也有其中文翻译,如: How Servlet Containers Work 看完这些再去学习那些 Web 框架或者 Web Container 之类的或许会更容易而且更明了一些。

其实最重要的是,我们也可了解协议本身及其如何应用,
明白了这些也许让我们觉得写个简单的协议不过是件再简单不过的事情了?

Mail Server

最近在忙邮件服务器,那个强大的 Zimbra 在 Ubuntu Server 10.04 LTS 中好像性能不大理想,估计是因为官方目前尚未正式支持。 我安装的时候参照了这个教程: Host Email and Calendars with Zimbra 6 on Ubuntu 10.04 LTS (Lucid)

最后还是决定使用 postfix + dovecot + squirrelmail ,这些感觉简单高效很多,最多就是那个 webmail 丑了些。

但是其实还是对 Mail Server 很多东西不清楚。看了鸟哥的文章,写得深入浅出,真的非常棒!我想给那些完全不懂邮件服务器的人看估计他们也看得懂了。终于逐渐清晰了 MTA/MDA 等等的原理了,知道了 SMTP 到底在干什么了 :-)

鸟哥的这篇教程在 Mail 伺服器
虽然 鸟哥的 Linux 私房菜 中很多内容都很旧了,但是读起来还是可以学到非常多的基本知识的。
真赞!