OpenResty XRay 訂閱下的私有庫和模組
目錄
- lua-resty-tls-session
- lua-resty-jsonb
- lua-cjson-plus
- lua-resty-http-fast
- luajit-plus
- lua-resty-kafka-fast
- lua-resty-redis-fast
- lua-resty-redis-cluster-fast
- lua-resty-mysql-fast
- lua-resty-memcached-fast
- lua-resty-dymetrics
- openresty-minifiers
- lua-resty-dymetrics
- lua-resty-limit-traffic-dynamic
- openresty-minifiers
- dubbo-nginx-module-plus
lua-resty-tls-session
lua-resty-tls-session 是一個用於 TLS session ticket keys 輪轉的 Lua 庫。
Nginx 配置檔案中的 TLS session ticket key 是用於生成 TLS session ticket 的。 客戶端使用 session ticket 就可以恢復之前和服務端的會話而不需要重新進行握手, 但這個 ticket key 長期不更換並且洩漏的話則存在安全問題。 如果定期更換配置檔案中的 ticket keys 並重啟 Nginx 程序能夠滿足安全需求。但是這種方式 對於運維非常麻煩,並且重啟會造成短暫的業務中斷,對於 SLA 等級高的業務是不可接受的。
另外,對於叢集的多個 Nginx 伺服器,要求配置相同的 ticket key,否則客戶端請求在不同的伺服器間切換 會導致伺服器無法解密 session ticket,進而無法實現會話恢復。這種情況下需要進行全新的 SSL/TLS 握手, 會有非常高的額外的 CPU 開銷。
使用 lua-resty-tls-session 庫,就可以透過指定 keys_fetcher 的方式定時獲取最新的 key 來動態更新 Nginx 內的 key,淘汰之前已經過期的 key,也無需重啟 Nginx 程序。
我們也提供了一個內建的 redis_fetcher,只要叢集內使用的是相同的 redis_fetcher 配置,叢集就可以共享這些 ticket key, 客戶端使用有效的 session ticket 和叢集內的服務端都可以恢復會話,提高了客戶端和服務端的會話複用率。
lua-resty-jsonb
lua-resty-jsonb
是用來代替 lua-cjson
的一個操作和儲存 JSON 資料的解決方案。它透過避免序列化和反序列化操作來極大的減少 GC 物件的建立,同時又無須對已有的資料結構進行改變。
因為 lua-resty-jsonb 不需要進行反序列化即可查詢 JSON 資料,所以在需要頻繁進行反序列化或者只查詢一個大的物件中的少數子物件時特別適合使用 lua-resty-jsonb 來替換 lua-cjson。
比如可以在控制面的機器上生成 JSONB 物件,將該 JSONB 物件分發到資料面的所有機器上。資料面機器就可以實現不需要反序列化就查詢 JSONB 裡面的資料。
lua-cjson-plus
因為 JSON 訊息格式簡單易讀,因此經常使用 JSON 來進行訊息交換,儲存配置等。在實際業務中經常會有大量的 JSON 物件的編解碼需要,這些操作會消耗大量的 CPU 資源。
lua-cjson 這個 JSON 編解碼庫在 OpenResty 服務中有著非常廣泛的應用。因此 OpenResty Inc. 對 lua-cjson 軟體進行全面的最佳化,提升了 JSON 資料的編解碼效率。
在很多情況下,效能最高可達開源庫的 4
倍。
該庫的安裝和使用說明可參考此文件。
lua-resty-http-fast
該軟體是 OpenResty 公司基於純 C 實現的高效能 HTTP 客戶端庫。 該庫的介面與開源的 lua-resty-http一致, 使用者可以直接使用該庫替換開源的 lua-resty-http。
該庫的核心實現確保了 100% 非阻塞 IO 通訊,效能遠超開源 OpenResty 中的 Lua cosocket API。 與 lua-resty-http 相比,該庫具有顯著更高的效能和更少的記憶體開銷。
該庫的安裝說明可參考安裝文件。
該庫的使用說明可參考使用手冊。
luajit-plus
luajit-plus 是 OpenResty Inc. 最佳化過的 LuaJIT 引擎。
該軟體具有如下特性
- 相比開源 LuaJIT, 在一些應用場景下,luajit-plus 私有庫的表操作效能提升可達上千倍。
- luajit-plus 私有庫還提供了更多的運算子號,比如 +=, -=, %= 等。
- 支援表示式級別的
do end
語句。 - 最佳化記憶體使用,減少 LuaJIT 記憶體分配器的記憶體佔用。
該庫的安裝和使用說明可參考此文件。
lua-resty-kafka-fast
該軟體是 OpenResty Inc. 開發的 Kafka 消費者的介面,使得 OpenResty 閘道器能夠在 Lua 層面消費 Kafka 訊息。 該模組實現的介面也保證 100% 是同步非阻塞的,不會影響 OpenResty worker 程序的主迴圈。
該庫的安裝和使用說明可參考此文件。
lua-resty-redis-fast
該軟體是 OpenResty Inc. 基於純 C 實現的高效能 Redis 客戶端庫。該庫的介面和開源的 lua-resty-redis 保持一致,可以實現快速的替換。
該庫的核心實現確保了 100% 非阻塞 IO 通訊,效能遠超開源 OpenResty 中的 Lua cosocket API。相比 lua-resty-redis,該庫具有顯著更高的效能和更少的記憶體開銷。在一些情況下,效能最高可達開源庫的 2.5 倍。
lua-resty-redis-cluster-fast
該軟體是 OpenResty Inc. 基於 C 協程實現的高效能 Redis 客戶端庫。相比 lua-resty-redis-fast
增加了對 Redis 叢集的支援。該庫的安裝和使用說明可參考此文件。
lua-resty-mysql-fast
該軟體是 OpenResty Inc. 基於純 C 實現的高效能 mysql 客戶端庫。該庫的介面和開源的 lua-resty-mysql 保持一致,可以實現快速的替換。
該庫的核心實現確保了 100% 非阻塞 IO 通訊,效能遠超開源 OpenResty 中的 Lua cosocket API。相比 lua-resty-mysql,該庫具有顯著更高的效能和更少的記憶體開銷。
lua-resty-memcached-fast
該軟體是 OpenResty Inc. 基於純 C 實現的高效能 memcached 客戶端庫。該庫的介面和開源的 lua-resty-memcached 保持一致,可以實現快速的替換。
該庫的核心實現確保了 100% 非阻塞 IO 通訊,效能遠超開源 OpenResty 中的 Lua cosocket API。相比 lua-resty-memcached,該庫具有顯著更高的效能和更少的記憶體開銷。
lua-resty-dymetrics
開源的 nginx-module-vts 等指標統計模組在多 worker 的情況下效能會嚴重下降,進而影響到業務,因此不適合高流量的生產環境使用。
OpenResty Inc. 基於無鎖技術實現的高效能的指標統計模組可以將指標結果輸出為 JSON 格式或者 Prometheus 格式,適合對接各種原有的採集系統。在高流量的情況下,該模組也有十分優異的效能。該庫的安裝和使用說明可參考此文件。
openresty-minifiers
openresty-minifiers 庫是一個由 OpenResty Inc. 實現的高效能壓縮庫,支援對 HTML、CSS 和 JavaScript 檔案的壓縮。該庫基於私有庫 replace-filter-nginx-module+
實現,可以用於最小化 HTML、CSS 和 JavaScript 檔案。該庫的安裝和使用說明可參考此文件。
lua-resty-limit-traffic-dynamic
lua-resty-limit-traffic-dynamic 是一個高階的模組,旨在透過動態管理 HTTP 請求的速率限制來最佳化 Nginx 效能。 這個智慧系統能夠適應伺服器的實時狀況,主要目標是將 Nginx 工作程序的 CPU 利用率維持在指定的目標範圍內。
該模組透過收集關鍵指標來運作,包括各種 URI 的請求響應總大小以及 Nginx 工作程序的 CPU 使用情況。利用這些資料,它計算並應用新的速率限制值到 incoming 請求,確保 CPU 使用率保持在預期的閾值內。
lua-resty-limit-traffic-dynamic 的主要特點包括:
- 動態調整:根據當前伺服器負載和流量模式自動修改速率限制值。
- CPU 利用率控制:幫助防止 CPU 使用率超過配置的目標。
- URI 特定監控:收集不同 URI 的響應大小統計,實現更精細的流量管理。
- 無縫整合:設計為在 Nginx 的請求處理階段中工作,包括 init_worker、access 和 log 階段。
透過實施 lua-resty-limit-traffic-dynamic,系統管理員和開發人員可以實現更高效的資源利用,並提高 Nginx 伺服器的整體效能,特別是在高流量環境中,保持最佳 CPU 使用率至關重要。
dubbo-nginx-module-plus
dubbo-nginx-module-plus 是 OpenResty Inc. 深度最佳化的 Dubbo 閘道器的私有庫。相比開源的 dubbo 閘道器模組,該模組更加穩定,效能更高。