淺談openresty
-
為什么會有OpenResty?
- 我們都知道Nginx有很多的特性和好處,但是在Nginx上開發成了一個難題,Nginx模塊需要用C開發,而且必須符合一系列復雜的規則,最重要的用C開發模塊必須要熟悉Nginx的源代碼,使得開發者對其望而生畏。為了開發人員方便,所以接下來我們要介紹一種整合了Nginx和lua的框架,那就是OpenResty,它幫我們實現了可以用lua的規范開發,實現各種業務,並且幫我們弄清楚各個模塊的編譯順序。
- OpenResty(又稱:ngx_openresty) 是一個基於 NGINX 的可伸縮的 Web 平台,由中國人章亦春發起,提供了很多高質量的第三方模塊。OpenResty 是一個強大的 Web 應用服務器,Web 開發人員可以使用 Lua 腳本語言調動 Nginx 支持的各種 C 以及 Lua 模塊,更主要的是在性能方面,OpenResty可以 快速構造出足以勝任 10K 以上並發連接響應的超高性能 Web 應用系統。它最大的特點就是用同步的代碼邏輯實現非阻塞的調用,其次它有單進程內的 LRU cache 和進程間的 share DICT cache,而且它是揉合 nginx 和 LuaJIT 而產生的。 OpenResty 致力於將你的服務器端應用完全運行於 Nginx 服務器中,充分利用 Nginx 的事件模型來進行非阻塞 I/O 通信。不僅僅是和 HTTP 客戶端間的網絡通信是非阻塞的,與MySQL、PostgreSQL、Memcached、以及 Redis 等眾多遠方后端之間的網絡通信也是非阻塞的。
-
OpenResty運行原理
- Nginx 采用的是 master-worker 模型,一個 master 進程管理多個 worker 進程,基本的事件處理都是放在 woker 中,master 負責一些全局初始化,以及對 worker 的管理。在OpenResty中,每個 woker 使用一個 LuaVM,當請求被分配到 woker 時,將在這個 LuaVM 里創建一個 coroutine(協程)。協程之間數據隔離,每個協程具有獨立的全局變量_G

-
Tengine vs openresty
- Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平台。從2011年12月開始,Tengine成為一個開源項目,Tengine團隊在積極地開發和維護着它。Tengine團隊的核心成員來自於淘寶、搜狗等互聯網企業。
- Tengine下載
- 繼承Nginx-1.6.2的所有特性,兼容Nginx的配置;
動態模塊加載(DSO)支持。加入一個模塊不再需要重新編譯整個Tengine;
支持SO_REUSEPORT選項,建連性能提升為官方nginx的三倍;
支持SPDY v3協議,自動檢測同一端口的SPDY請求和HTTP請求;
流式上傳到HTTP后端服務器或FastCGI服務器,大量減少機器的I/O壓力;
更加強大的負載均衡能力,包括一致性hash模塊、會話保持模塊,還可以對后端的服務器進行主動健康檢查,根據服務器狀態自動上線下線,以及動態解析upstream中出現的域名;
輸入過濾器機制支持。通過使用這種機制Web應用防火牆的編寫更為方便;
支持設置proxy、memcached、fastcgi、scgi、uwsgi在后端失敗時的重試次數
動態腳本語言Lua支持。擴展功能非常高效簡單;
支持管道(pipe)和syslog(本地和遠端)形式的日志以及日志抽樣;
支持按指定關鍵字(域名,url等)收集Tengine運行狀態;
組合多個CSS、JavaScript文件的訪問請求變成一個請求;
自動去除空白字符和注釋從而減小頁面的體積
自動根據CPU數目設置進程個數和綁定CPU親緣性;
監控系統的負載和資源占用從而對系統進行保護;
顯示對運維人員更友好的出錯信息,便於定位出錯機器;
更強大的防攻擊(訪問速度限制)模塊;
更方便的命令行參數,如列出編譯的模塊列表、支持的指令等;
可以根據訪問文件類型設置過期時間; - agentzh是這樣說的:Tengine 是一個 nginx 的 fork,而 ngx_openresty 是 nginx 的 bundle.最初兩者沒有交集,后來Tengine 也是 ngx_openresty 多數核心組件的用戶 了,Tengine pdf文檔中提到ngx_lua等核心組件也不足為怪了。
- Nginx開發從入門到精通 — Nginx開發從入門到精通
-
openresty資源
-
其它資源
