阅读陶辉老师《深入理解Nginx》一书时,有一个问题一直困扰着我:Nginx这么牛逼,究竟是如何做到的?是用了什么先进的架构?还是什么独门的奇技淫巧?
带着这个问题读完了这本书。现在,我把我的发现罗列如下(按重要性排序):
1.可介入
将HTTP请求处理流程分阶段,设计成可介入、可埋点、类似netfilter的设计,为Nginx丰富多样的HTTP功能(反向代理、负载均衡、限速等,令人眼花缭乱)奠定了基础。
2.分阶段、异步处理
在Nginx核心模块(譬如Nginx HTTP框架)的代码实现上,处处体现着“这次没做完,下次再做”的做事哲学,这也是Nginx高性能的核心秘密。懂行的朋友肯定会说,这不就是业界常说的“异步事件处理机制”嘛!我不赞同用“异步”这个词,因为容易引起读者的困惑。毕竟Nginx使用的epoll是同步的。大部分人所说的“Nginx异步”指的并不是epoll,而是指上层业务处理的异步。需要挑明的一点是,异步事件处理机制并不是Nginx的独创,我所见过的众多开源的或内部使用的WEB框架,无一例外全部都是这种,说明这是标配。
3.subrequest
独创的subrequest机制,用于分解复杂的业务逻辑。
4.抠门
随处可见的“抠门”设计。Nginx的抠门是出了名的,比如:不到最后一秒,就是不创建内存。最后这一点,看似琐碎,其实最难做到。