Redis重新連線彈性

2021-09-13 01:28:29 字數 2284 閱讀 5060

這是乙個微服務世界。這些應用程式或微服務需要臨時儲存資料,並且頻繁和超快速訪問,以避免使用類似redis的記憶體資料庫進行磁碟io操作。這些應用程式具有多個記憶體資料庫集群,可以處理大量流量並避免請求失敗。要快速訪問此資料,應用程式需要準備好預先配置的已建立的池連線,以便從應用程式進行服務。

為應用而構建的應用程式在應用程式或基礎架構故障時具有備份選項。存在於不同伺服器上的不同資料中心的記憶體資料庫群集允許在資料中心或伺服器問題的情況下進行備份連線。

使用記憶體資料庫的多區域彈性應用程式應該能夠在斷開連線時重新連線群集,並且如果主群集不可用則連線到備份群集以避免請求失敗。

真正的區域無關解決方案將動態選擇記憶體資料庫集群以持久化或檢索資料,即使在主集群連線被重新水化時出現錯誤,也可使事務無縫連線到客戶端。這種動態再水化是乙個問題,同時依賴於現代自動依賴注入和自動佈線物件操縱技術。

一旦傳入請求到達應用程式,即使該區域中的底層基礎結構出現故障,也應正確處理該請求。

當主群集出現問題時,需要從另乙個備份記憶體資料庫群集動態保留或提取服務傳入請求。同時,對於後續請求,與故障群集的連線將從其連線池中重新水合併準備服務,而不依賴於備份群集。

解決上述問題的乙個簡單方法是重新建立已針對具有連線問題的記憶體資料庫進行池化的所有連線。

使用新建立的連線池,並確保對於其餘事務,將從新快取的池集中使用新連線。關鍵技術方面是在執行時動態管理這些池。

具有自定義擴充套件框架的服務,使用單例設計模式僅將物件例項化為乙個例項。對於記憶體資料庫,該框架允許應用程式例項化乙個模板(如spring resttemplate)來處理所有資料庫事務。實現連線工廠和池配置的基礎模板建立連線以執行事務。當此模板無法用於建立連線時,它將在從工廠重新連線連線池時自我修復。該框架將丟棄舊模板並建立乙個新模板。此新單個模板將用於為所有傳入請求提供服務。

建立/使用多個記憶體資料庫模板的服務:乙個用於連線到主群集,另乙個用於連線到備份群集。主群集由執行應用程式的伺服器的「區域」確定。區域可以表示地理位置和/或資料中心。在多個區域中執行的相同應用程式將使用模板配置機制連線到相應的資料庫。

每個「跨區域」彈性的服務意味著應用程式部署在多個區域中的多個伺服器上,並且底層記憶體資料庫集群基礎結構類似地部署在不同區域的不同伺服器上。

如果整個「區域」遇到問題,則傳入的客戶端請求將由針對另乙個區域中自動複製的應用程式執行。但是,一旦請求到達應用程式,如果底層資料庫集群遇到問題,該服務會動態地將操作**到備份集群,並應成功完成請求。同時,模板將開始丟棄所有預先建立的連線的過程,並將開始重新建立根據提供的池配置配置的新連線集,並將為後續操作建立新模板以使失敗區域成功,直到它很成功。bv

必須刪除記憶體資料庫集群之間斷開的連線,因為如果不採取任何操作,這是乙個不可恢復的錯誤。當作為單獨連線實現時,該框架保持斷開的連線,並且不容易支援刪除連線。如果先前已破壞模板提供的連線,則傳入請求將失敗。服務必須通過從池中刪除所有連線並重新建立新的連線來支援執行時連線重新補充。當連線斷開時,應用程式將重新建立模板和連線,以便為下乙個事務提供與記憶體資料庫集群的乾淨重新連線。

每個服務都應確定啟動時的主要和備份區域,以分攤對哪個資料庫集群執行預設操作的動態決策。當操作無法在活動的所選群集上執行時,該服務應重新建立基礎模板和連線,並將操作**到備份群集。該實現允許資料庫集群的快速,動態重新連線多區域彈性。由於新建立的模板是單例並在執行時獲取,因此除了最初失敗的模板之外,可以避免效能影響。

使用現有技術連線到記憶體資料庫非常簡單。我們在90%的應用程式中通常會遺漏的問題是資料庫被重新水化或暫時丟失網路連線時。

應用程式將具有一組匯集的預配置連線,這些連線在工廠根據配置的間隔具有可執行的逐出演算法進行快取和生成,以驗證連線的有效性。下圖說明了連線到多個基於區域的記憶體資料庫的多個模板。每個模板都配置了乙個連線工廠,這些連線已建立並分配給要保留的池。然後,當請求執行事務時,工廠將根據需要從池中檢索連線。

下圖表示由於db重新合併,資料庫重新啟動,資料庫網路連線問題,防火牆問題或由於我們可以想象的任何其他原因導致連線丟失的時間。由於連線丟失了套接字連線,整個連線池現在變得無效,導致在請求的事務上發生連線拒絕錯誤訊息。

即使在資料庫恢復之後,整個連線池仍然無效,因為它們將在失去跟蹤資料庫同時發生的情況的軌道時開始顯示損壞的管道訊息以重新建立連線。

池中的所有連線都需要重新水合才能執行成功的事務。這需要工廠建立新的連線以通過池儲存相應的模板,這些模板也需要重新建立。當檢測到連線失敗時,系統現在可以智慧型地構建,以重新建立連線到相應的基於區域的資料庫的所有模板。

重新啟動記憶體資料庫伺服器後,執行緒中連線的保持操作將開始丟失管道錯誤。為避免這種情況,連線的再水化是最佳解決方案,如下所示。

Redis重新連線彈性

這是乙個微服務世界。這些應用程式或微服務需要臨時儲存資料,並且頻繁和超快速訪問,以避免使用類似redis的記憶體資料庫進行磁碟io操作。這些應用程式具有多個記憶體資料庫集群,可以處理大量流量並避免請求失敗。要快速訪問此資料,應用程式需要準備好預先配置的已建立的池連線,以便從應用程式進行服務。為應用而...

MVC連線彈性

entity framework 6的連線彈性功能使重試失敗的sql查詢功能自動化。當您訪問雲伺服器時很多連線問題都是暫時的,只要稍後重試即可 連線彈性功能可以幫您自動實現。連線彈性功能必須針對特定資料庫服務進行配置 1.必須明確那些例外可能是暫時的。2.在重試失敗的操作之間必須等待相應的時間。3....

Redis重新配置集群

如果要重新配置集群,先停止集群,然後將cluster config file配置的所有檔案刪除,再重新啟動集群,就可以重新配置集群 如果提示 err node 192.168.2.17 7000 is not empty.either the node already knows other nod...