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圖,可以節省不少思考時間,免于邏輯混亂
- 提交代碼到托管工具,控制本地版本,便于版本回退