为nginx正名,为Igor申冤-Web开发-网站建设

 来源:LiveSpace   收集 2010-01-18

好久没在这里写中文文章了,主要是因为这篇东西的文字主要来自聊天记录 ;)

刚才在和 聊到 未来的若干种极酷的玩法的时候,不由地开始感慨 nginx 社区大部分用户其实并没有真正理解 nginx 的设计真谛。包括目前网上流行的那些 nginx 的玩法,本身都是直接违反作者 老大的设计初衷和本意的。

所以从这个意义上讲,Igor 是孤独的。这也是为什么 Igor 有时终于忍不住在 nginx 列表里揭斯底里地说他压根原本就不想支持 fastcgi,他压根就不想把 nginx 的 proxy 模块做成第二个 squid。当然了,Igor 自己玩的 也违反了 nginx 的设计原则,包括他自己说要做的 ngx_v8 模块。不过我相信 Igor 这两个模块只是玩玩而已,耍酷之类。真正对 nginx 有意义的脚本语言引擎,是那些支持 C 级别的 coroutine 的解释器,perl 和 v8 都不满足这一基本条件。( 是可以的!)

Nginx 的核心是网络 I/O 非阻塞,是的,再说一遍,非阻塞。从网络 I/O 的角度看,fastcgi 协议的另一边永远是阻塞的,ngx_perl 和 ngx_v8 中的脚本代码运行时永远是阻塞的,ngx_proxy 协议的另一头经常也是阻塞的,所以说它们没有本质的意义和价值,不会带来性能的真正飞跃 。任何时候,我们都不应阻塞在 Web I/O 上,任何时候都不!无论是到 memcached 的 TCP 通信,还是到 mysql, Oracle, PostgreSQL 这些 RDBMS 的 TCP 通信,抑或是到上游其他 HTTP web service 源的次级请求,都不应阻塞!

Igor 在 nginx core 中设计了极为精巧的非阻塞的编程模型,无论是 subrequest, 还是 upstream,但极少有人了解这些,极少人有欣赏这些,更少有人懂得去利用好这些。在非阻塞和并发 I/O 的上下文中,编程模型和传统的代码是很不一样的,就像 JS 的许多写法和 perl 里极不相同一样,其道理本身倒不难理解,但对于“精巧”的感悟,则需要对 core 的更多了解 ;) 正因为如此,所以我说 Igor 是孤独的,所以我说 nginx 社区许多朋友其实不懂高并发,不懂高性能,不懂 ,呵呵。

当然了,这一切我也是在晓哲老师过去几个月每日一课的耐心点拨下,在我手抄了 nginx core 中的大量 C 源之后,我才开悟的。需要我们编写更多教程,需要我们向世人揭示这种力量,这种神奇。Igor 老大的表达能力貌似非常有限,至少在英语表达方面,这不得不说是一件憾事。但幸运的是他还是可以用很漂亮的 C 代码来传递和实践他的那些极好的 idea. 我必须说这些 idea 是我在 中的一些引以为豪的想法的高级发展形式。所以我{dy}眼看到,我就有着某种强烈的共鸣,即使当时我还没有足够了解其细节,呵呵。

{zh1}用一句话来总结,道一下 nginx 鲜为人知的秘密:“nginx is a web application framework.”

本文来自:

郑重声明:资讯 【为nginx正名,为Igor申冤-Web开发-网站建设】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——