24

好吧,大家(看到这些文字的地球人)都知道Nginx是什么用的了。
这里只是希望可以稍微详细的记录下收集到的信息。
毕竟在一头扎进源码的深潭之前,先在水面观察一阵并不是什么坏事:)

Nginx不是一个普通HTTP Server,它还是一个免费、开源和高效的HTTP Server。
免费和开源是显然的事实,因为源码可以从官网上下载;
高效不能一眼看出,但也有测试数据和市场份额做间接的支持。

Nginx不仅仅是一个HTTP Server,它还可以用作Reverse Proxy和Mail Proxy。
作为Reverse Proxy,主要用于负载均衡、SSL支持、Cache等方面;
Mail Proxy了解不多,暂不妄言:)

根据官网的数据,目前Nginx的市场份额为7.5%。这个数据也和netcraft.com上的调查结果一致。
详细数据可以参考http://news.netcraft.com/archives/2011/01/12/january-2011-web-server-survey-4.html

顺便截下最新的分布。Nginx排名第三,而且势头良好。
不过如果想对领先的Apache和IIS构成威胁,则还是非常遥远的梦想。
nginx market share

项目从2002年开始,2004年开源。
初始作者和主要维护人名叫Igor Sysoev,俄罗斯人,70年生,目前在莫斯科。
可以在http://sysoev.ru/en/找到更多的资料。
不过如果想对个人有更更多的了解,最好懂点俄文。
这对东北的同学来说可能不是难事:)

对这位牛人的相貌比较好奇,Google到的结果让人无从选择。
好在这个星球上,除了Google,还有一个叫Facebook的网站:)
igor
据他在Facebook上的资料显示,他和Intel有某种联系,莫非跳槽了?

发音方面,和Linux一样,最好还是采用发明人的说法,“Engine X”。
挺酷的样子。

作为一个服务器,Nginx的优点非常突出。
http://wiki.nginx.org的说法,高性能、稳定、功能丰富、配置简单,并且节省资源。
难道世界上真有只好不坏的东西?

它使用事件驱动的异步模型,而不是多进程/线程竞争接入请求的架构,解决了C10K的问题。
从官网的描述可以看出,Igor对此架构非常自豪。
不过从现在看来,这样的架构被没什么超凡入圣之处,公司内可以看到很多类似的实现。
甚至可以说,这已经是常规的做法了,
可能回到2002年的时候会是一个非常创新的设计。
事件驱动模型在《Unix Network Programming》里也有详细的阐述,
只是没有提到epoll、kqueue等新的方法,原理都是相通的。

现在,Nginx的最新稳定版本是0.8.54,可以在http://nginx.org/en/download.html下载。
http://nginx.org/的更新历史看,作者非常活跃,每个月起码更新一次。
开发版本已经到了0.9.5。

最后,对于想分析Nginx源码的中国人,http://code.google.com/p/nginxsrp/wiki/NginxCodeReview似乎是个不错的开始。
英文方面,可以看http://nginx.org/en/docs/introduction.html,是Igor写的三篇文章。
美中不足的是,这三篇文章主要都是介绍配置方面信息的,对架构、代码甚少涉及。

Tagged with:
22

分析Nginx源码这个念头曾经出现过,也用GDB配合Source Insight跟踪过两天时间。
之后由于其他事情占据了时间,就搁置了下来,一晃就几个月。

做事过于随性是老毛病了,不过就像许多其他事情,虽明知不妥,却总也戒不掉,改不了。
借着写Nginx模块的惯性和余温,但愿这次可以一口气完成吧。
//Mac OS自带的输入法真不好用,公司们(Google, Tencent, Sogou, Baidu …)大发慈悲,做一个输入法吧

Nginx的代码写得好是出了名的:命名规范、模块化划分、函数简短、适当注释⋯⋯
虽然有如此多的好处,但要对其代码做详细分析,既可俯瞰架构、又能深入细节,却实属艰难。
单单是内存池、回调机制、多重指针等之前几天让我费劲脑汁的技巧,已经让我超出预算。
况且了解细节易,纵观全局难,注定了是一个上下求索的过程。
//这个说法也适用于程序员生涯。

为免自己半途而废,写下以上文字,算是立字为据,也权当之后笔记的前言吧。

Tagged with:
13

by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!

just “import this”:)

Tagged with:
preload preload preload

无觅相关文章插件,快速提升流量