我一直认为程序员的修炼离不开源码的阅读,尤其是受大家欢迎的开源项目,代码简洁高效、模块化、高扩展性都是我们加以研读的理由。Nginx,因其可靠性高、低内存消耗、高并发而受到各大企业的追捧...它作为优秀的开源项目,显然具备以上几点,本人又正好从事相关领域的职业,实在抵不住它源码的诱惑,打算狠下心来读它将近十万行的代码,但现实是骨感的…一是时间、二是方法、三是毅力。重中之重是方法,这不需要多说,由于是第一次看开源项目,缺乏相关的经验,只能凭自己对程序的理解探索大致的阅读方向,走弯路是可能的,至于走多少,我实在不能肯定…
复杂的项目都是由简单的模块组成的,这或许可以成为我们阅读源码的指导。先努力拆解那个看似复杂实际也非常复杂的项目,在这一步可以先上网找找相关资料,能帮一点是一点,建立起对项目的大致印象再说,当将源码的模块拆分的足够小后,就可以集中精力各个击破。以上是我阅读时的大致方向,列在这里仅供参考。
万里长征,我今天迈出了第一步。以下是我搜寻的关于Nginx架构的资料。
Nginx架构:
从结构上来说,Nginx分为核心模块、基础模块、第三方模块。从功能上,分为Handlers(处理器模块)、Filters(过滤器模块)、load-balancers(负载均衡模块)
结构:
核心模块有http、event、mail三大模块。内核通过查找配置文件将客户端请求映射到一个locationblock(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
基础模块包含Http
Proxy、Http
Access、Http
FastCgi、Http
Rewrite等等
第三方模块是前仆后继的程序员扩展的结果。
功能:
Handlers用于Http请求,然后产生输出。
Filters过滤handler产生的输出。
load-balancers当有多于一台的后端备选服务器是,选择一台转发Http请求。
源码结构:
我下载的源码是nginx-1.0.14,源码在SRC文件夹中,它又包含core、http、mail、event、os、misc几个目录。
core:核心模块
http:http协议处理模块的代码,作为web服务器运行时的核心模块
mail:mail处理模块的代码,nginx作为pop3/imap/smtp代理服务器运行时的核心模块
event:nginx自身对事件处理逻辑的封装
os:nginx对各个平台抽象逻辑的封装
misc:nginx的一些utils,定义了test和profiler的一些外围模块的逻辑
nginx几个大的模块就这么几个,但小的功能模块可能数不清,理清它们是需要时间的…我会在之后持续更新,分享我探寻nginx的心得,这也是对我的一种鞭策把。