Virtual-Machine

跨機器集群分佈 JVM

  • June 14, 2019

抓住搜尋參數和術語的稻草。

的關鍵屬性JVMVfor virtual (至少在這個問題的上下文中)。您如何JVM通過負載平衡跨越一個機器集群,以便其JVM本身是分佈式的?

有點像這樣

分佈式JVM

https://www.cacheonix.org/articles/Distributed-Java-application-on-multiple-JVMs.gif

這樣應用程序只能看到一個 JVM

詳細說明我的評論並假設您沒有想到一些非常深奧的東西……

也許您正在查看該圖並將其解釋為使用者使用的應用程序可以在會話期間隨時與後端的任何 JVM 對話,因為 JVM 之間存在某種協調。這不是它通常的工作方式……至少在廣泛使用的架構中不是這樣。

該圖幾乎可以肯定地描繪了具有獨立 JVM 的經典分佈式環境。如果客戶端(使用者應用程序)要求在請求(會話)之間保持狀態,則有幾個選項,但它們仍然涉及不了解其他 JVM 的 JVM。

實現這一點的最直接和最常用的方法是使用支持所謂的粘性會話的負載均衡器。簡而言之,這意味著一旦客戶端建立了身份,那麼負載均衡器將始終在會話期間將客戶端的請求路由到同一個 JVM(例如,直到使用者註銷)。

我所說的身份是什麼意思?通常這意味著使用者已登錄並成功通過身份驗證,之後將選擇一個唯一 ID 並將其與使用者的所有後續請求相關聯。對於 Web 應用程序(例如使用 RESTful API 的應用程序),此 ID 通常在 HTTP 標頭中傳遞。使用這樣的標頭可以讓大多數負載均衡器輕鬆提取 ID。

或者,您可以放棄粘性會話並將會話狀態儲存在數據庫中,例如,並要求 JVM 在每次收到請求時使用會話 ID 查找該狀態。這增加了一些複雜性和成本,但並非聞所未聞。但是,在這個模型中,JVM 仍然是獨立的。

(您也可以讓客戶端應用程序在它發出的每個請求中完整地傳遞會話狀態,但是這存在安全問題以及其他問題。)

引用自:https://unix.stackexchange.com/questions/387288