Hello , 我是恒 。
维护putty和nginx两个项目好久了,用面向底层的思路去接触
在nginx社区的收获不少,在这里谈谈我的感悟
Nginx的夺冠不是偶然
高速
:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请求高扩展性
:Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。无须在意其他这种低耦合度的优秀设计,造就了Nginx庞大的第三方模块高可靠性
:Nginx的可靠性是大家有目共睹的,每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。低内存
:一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存热部署
:master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能
项目风格
整体来说,代码注重简洁性
和异常处理
,用户体验很好,变量名相当
规范
- 系统架构以事件驱动,特别关注
ngx_event_t
事件和ngx_connection_t
- 自定义基础变量类型,如
ngx_int_t
,ngx_conf_enum_t
等 - 模块化,如
ngx_event_core_module
,http
,SSL
模块等 - 编译源代码与二进制代码的高度规范,项目结构清晰(有点不好的是模块目录下文件一大堆)
- 提交代码需要和官网人员邮箱联系,无开源仓库
- 协议宽松,发布代码记得加上
保留所有权利
部分
注意
- 函数书写注意返回的
自定义字符
,还有数据类型选择
- 编译测试准备好快速上传文件测试
- 单元测试,nginx测试很麻烦
- 开发自定义HTTP等模块后,编译到nginx里可以使用
configure
脚本或者修改makefile
- 作UML图,可以节省不少思考时间,免于逻辑混乱
- 提交代码到托管工具,控制本地版本,便于版本回退