apigateway kong 五 集群搭建部署

2021-09-20 08:59:50 字數 4585 閱讀 2025

kong 集群將使得系統通過增加更多機器,從而實現水平擴充套件,承接更多的請求流量。它們將共享同樣的配置且使用同乙個資料庫。kong 集群中的的所有節點都連線同乙個資料庫。

你需要在 kong 集群的上一層架設乙個負載均衡的**伺服器,以便請求能夠平均分散**到 kong 的各個節點上。

六.通過admin api 操作快取 

七.集群搭建

擁有kong群集並不意味著客戶端流量將在開箱即用的kong節點中實現負載平衡,仍然需要在kong節點前面使用負載平衡器來分配流量。相反,kong群集意味著這些節點將共享相同的配置。

出於效能原因,kong在**請求時避免資料庫連線,並將資料庫的內容快取到記憶體中。cached實體包括services,routes,consumers,plugins,credentials等...由於這些值在記憶體中,因此通過其中乙個節點的admin api進行的任何更改都需要傳播到其他節點。

只有乙個 kong 節點連線資料庫(cassandra或postgresql)的單節點 kong 集群,任何通過 admin api 的更改,都會立即全域性生效。比如:

假設只有乙個kong單節點a ,如果我們刪除乙個已經註冊的service:

隨後任何關於 kong節點a 請求都將會返回 「404 not found」,因為該節點已經在本地刪除中清除了快取。

所有節點將會週期性執行後台同步任務,同步其他節點觸發的變化。該同步任務執行頻率可以通過配置下面的配置項:

◦ db_update_frequency (預設: 5 秒)

每 db_update_frequency 秒,所有 kong 節點將從資料庫中拉取所有更新,如果有同步到更新變化,將清理本地相關快取。

如果我們通過 kong-a 節點刪除乙個 api,這個更新變化將不會立即在 b 節點生效,直到 b 節點下一次從資料庫拉取變更,這將會是在db_update_frequency 秒後才會發生(也有可能會更早)。

這個過程將會使 kong 集群最終保持一致性。

所有核心實體(如服務,路由,外掛程式,消費者,憑證)都由kong儲存在記憶體中,快取失效則依賴後台任務同步更新。此外,kong 也會快取資料庫遺漏(資料庫中有的資料,但本地不存在的)。這意味著如果你配置乙個沒有外掛程式的服務,kong會快取這些資訊。例:

在節點a上,我們新增乙個service和乙個route

(請注意,我們使用/services/example-service/routes作為快捷方式:也可以使用/routes endpoint代替,但我們需要將service_id作為引數傳遞給新服務的uuid。)

對節點a和節點b的**埠的請求將快取該服務,並且沒有在其上配置外掛程式:

現在,假設我們通過節點a的管理api向該服務新增乙個外掛程式:

由於此請求是通過節點a的admin api發出的,因此節點a將在本地使其快取無效,並在隨後的請求中檢測到此api配置了外掛程式。

但是,kong-b 節點還沒有執行資料庫同步更新快取任務,本地快取的api資訊並沒有配置外掛程式,直到 kong-b 節點執行資料庫同步操作之後,api新增外掛程式的功能才會生效。

結論:所有crud操作都會觸發快取失效。建立(post,put)將使快取的資料庫未命中失效,更新/刪除(patch,delete)將使快取的資料庫命中無效。

可以在kong配置檔案中配置3個屬性,其中最重要的乙個屬性是db_update_frequency,它決定了kong節點在效能與一致性之間的權衡。  

kong 已經提供了預設的配置,為了讓你權衡集群效能和資料一致性兩個方面,避免意外的結果。你可以按照下面的配置步驟,改變配置的值,從而確保效能和資料一致性能夠被接受。

該配置決定 kong 節點從資料庫拉取快取無效事件,同步任務執行的頻率。乙個更小的值意味著同步任務將會更頻繁的執行,kong 節點的快取資料將保持和資料庫更強的一致性。乙個更大的值,意味著你的 kong 節點花更少的時間去處理同步任務,從而更加將更多資源集中去處理請求。

note:變更將會在db_update_frequency 秒後在整個集群節點中生效。

如果你的資料庫也是集群的並且最終一致性的(比如:cassandra),你必須配置該值。它將確保db_update_propagation秒後,資料庫節點間的變化在整個資料庫集群中所有節點生效。當配置了該值,kong 節點從同步任務中接收無效事件,清除本地快取將會延遲 db_update_propagation 秒。

如果乙個 kong 節點連線到最終一致性資料庫上,且沒有延遲事件需要處理,它可能會清除快取,然後把沒有更新的值再次快取起來。(因為這個改變還沒有傳播到資料庫集群的每乙個節點,注釋:資料庫一致性還沒有在資料庫集群中達到一致,此時kong快取到期了,但是沒有更新到變化事件,此時會把沒有更新的值再次快取起來,導致kong也出現不一致,即便kong執行了同步任務。)。

你應該配置該值,通過評估資料庫集**生變更後,最終達到一致性所需要的時間。(確保資料庫一致之後,才去執行 kong 同步任務處理變更事件,從而達到kong 資料一致性)

note:當配置了該配置項,資料變更傳播到 kong 集群的最大時間是 db_update_frequency + db_update_propagation 秒。

該配置項的時間(單位秒)是 kong 快取資料庫實體的時間(包括快取命中或者穿透),該存活時間是一種保護措施,以防 kong 節點漏掉處理快取無效事件,避免舊資料長時間沒有被清理。當快取生存時間到了,快取值將會被清理掉,下一次將會從資料庫讀取資料並再次快取起來。

如果使用 cassandra 作為 kong 的資料庫,你必須配置 db_update_propagation 為乙個非零值。由於 cassandra 本身是最終一致性資料庫,這將確保 kong 節點不會過早地使本地快取失效,僅僅當再次獲取到乙個不是最新值的時候。如果你使用了 cassandra 但你沒有配置該值時,kong 將會輸出一條警告日誌。

此外,你可以配置 cassandra_consistency 的值為:比如 quorum 或者 local_quorum,確保被kong 快取的值是資料庫中最新的。 

由於某些原因,你希望通過 kong 檢視快取的值,或者手動清理快取(當快取被命中或者丟失),你可以通過使用 admin api /cache 介面進行管理。

檢視快取值-inspect a cached value

endpoint

get  /cache/

response

返回值

當 key 被有效快取:

...否則:

注意:檢索由kong快取的每個實體的cache_key目前是乙個未公開的過程。 admin api的未來版本將使此過程更加簡單。

清除快取值-purge a cached value

清除節點快取-purge a node's cache

注意:請謹慎在生產執行節點上使用此介面。如果節點接收到大量流量,同時清除其快取將觸發對資料庫的許多請求,並可能導致db請求堆積現象。

在kong v0.11版本去除了cluster這個命令和api的管理,我也是吭哧吭哧花了好長時間找到了如下珍貴的文件(upgrade to 0.11.x這一節):

zhoujie

出處:

五色 五味 五臟 五官與五

五色 五味 五臟 五官與五行的對應 中學唐 今天在展覽館中聽到介紹蔬菜水果食物時,講解員說到,常食五色身體好,所以我在想南韓人的文化還是可以的嘛,不愧為中國的文化的傳承。同時,在吃飯時也告訴李景雅,五色對應人體五臟,五臟對應五行。是以,作此已學習和記憶。相生 木生火 火生土 土生金 金生水 水生木 ...

五國 五寵物 五飲料 五香菸 邏輯題

size large 1981年柏林的德國邏輯思考學院 據說 有五間房屋排成一列 所有房屋的外表顏色都不一樣 所有的屋主來自不同的國家 所有的屋主都養不同的寵物 所有的屋主喝不同的飲料 所有的屋主抽不同的香菸.英國人住在紅色房屋裡 瑞典人養了乙隻狗 丹麥人喝茶 綠色的房子在白色的房子的左邊 綠色房屋...

WIFI SDIO 五問五答

1 在sd.c的檔案中定義的host max mclk是怎麼定義的?197000000對應的clk為多少hz?具體的換算公式是怎麼樣的?修改這個clk會影響哪些效能?define host max mclk 197000000 197mhz 在定義最快跑多少 假設max clk 在50mhz 但如果...