淺談openresty


淺談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
    • 1159210-20200110175546884-677863146.png
  • 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資源

  • 其它資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM