Nginx技術研究系列5 動態路由公升級版

2022-01-10 16:02:39 字數 3425 閱讀 1053

前幾篇文章我們介紹了nginx的配置、openresty安裝配置、基於redis的動態路由以及nginx的監控。

nginx-openresty安裝配置

nginx配置詳解

nginx技術研究系列1-通過應用場景看nginx的反向**

nginx技術研究系列2-基於redis實現動態路由

[原創]nginx監控-nginx+telegraf+influxb+grafana

在分布式環境下,我們要考慮高可用性和效能:

1. 不能因為redis宕機影響請求的反向**

2. 每次請求如果都訪問redis,效能有一定的損耗,同時redis集群的壓力隨著流量的激增不斷增加。

因此,我們要公升級一下動態路由的設計方案。 我們還是先從應用場景出發:

1.提公升效能,降低redis的訪問頻率

2.redis宕機不影響nginx反向**

實現上述兩個應用場景,我們採用本地快取+redis快取的雙快取配合機制。

確定了上述實現方案後,我們回顧一下我們已有的redis動態路由實現:

}我們要在上述**中增加一層本地快取實現,因此,我們需要找乙個本地快取的實現lib。

嘗試寫了一下,發現這個cache實現是worker程序級別的,我們nginx是auto的程序數配置,一般有4~8個,這個快取每個程序都new乙個,貌似不符合我們的要求,同時,這個cache是預分配好快取的大小和數量,啟動的時候如果數量太多,分配記憶體很慢。

測試了一下,果真是這樣,因此,我們繼續查詢新的cache實現。

ngx.shared.dict,

這個 cache 是 nginx 所有 worker 之間共享的,內部使用的 lru 演算法(最近經常使用)來判斷快取是否在記憶體佔滿時被清除。同時提供了如下方法:

然後,我們基於這個元件實現了我們公升級版的redis動態路由,直接上**show:

重點說一下上面的**:首先,定義了乙個本地快取:

lua_shared_dict localcache 10m;
然後,從本地快取中獲取路由位址

local cache =ngx.shared.localcache

local server = cache:get(key)

如果本地快取中沒有,從redis中獲取,從redis中獲取到之後,加入到本地快取中,快取有效時間3600s:

server =serveradr

cache:

set(key, server, 3600)

公升級後的redis+本地快取的動態路由方案,壓測效能提公升1.4倍,同時解決了redis宕機的問題。

以上這個方案和實現都分享給大家。

周國慶2017/11/13

AOP技術研究 引言

1 引言 軟體設計因為引入物件導向思想而逐漸變得豐富起來。一切皆為物件 的精義,使得程式世界所要處理的邏輯簡化,開發者可以用一組物件以及這些物件之間的關係將軟體系統形象地表示出來。而從物件的定義,進而到模組,到元件的定義,利用物件導向思想的封裝 繼承 多型的思想,使得軟體系統開發可以向搭建房屋那樣,...

5G關鍵技術研究方向

對於還沒體驗4g移動通訊魅力的國內的移動通訊使用者而言,5g也許還是鏡中花,霧中月 但對於科研界而言,5g研究已經啟程,三星電子5月份宣布,率先開發出了首個基於5g核心技術的移動傳輸網路,實現每秒1gbps的資料傳輸速率。究竟什麼是5g,它的核心是什麼?關鍵技術的研究方向包括哪些?它會給我們的生活帶...

引擎技術研究之Shader技術

shader 技術屬於 gpu的渲染技術,其相應語言是高階著色器語言 high level shader language 簡稱hlsl hlsl 主要作用為將一些複雜的影象處理快速而又有效率地在顯示卡上完成。在 directx 中有兩種 shader 頂點著色器 vertex shader vs ...