2017-02-21 34 views
0

假設 -用戶狀態應用

  1. 有4個服務器坐在後面充當負載平衡器
  2. 負載均衡器的反向代理是純粹的負載平衡和發送到請求這取決於它們的電流負載的任何4個服務器
  3. 用戶需要進行身份驗證來訪問這個應用程序,以及一些空間應保存所有用戶的狀態,作爲反向代理僅僅是負載均衡
  4. 應用需要超越規模4服務器,比如4000個服務器。


問題 -

  1. 在誰保存所有用戶的狀態的大型多服務器系統 - 負載均衡,每個服務器,獨立的服務器?
  2. 所有用戶的狀態是否保存在所有服務器上,以便負載均衡器可以向任何服務器發送請求?這如何擴展到1億用戶?

回答

0
  1. 在無狀態的多服務器系統,一個單獨的服務器(認證服務器)或一個單獨的服務器羣集(驗證API)保存所有用戶的狀態。如果它是一個大型應用程序的單一認證服務器,那麼你可以期望它擁有100個GB的RAM範圍,或許更多。

  2. 不可以,所有用戶的狀態通常不會複製到所有的應用服務器上,這會造成巨大的資源浪費。身份驗證服務器(或服務器羣集)可以充當負載平衡器本身,或將所有請求轉發給單獨的負載平衡器 - 對於無狀態應用程序爲真。

在狀態應用,各個服務器通過粘性會話保存用戶的狀態。

如果可能,請儘量讓您的應用程序保持無狀態。無狀態應用程序將具有更好的性能,並且比有狀態的應用程序更容易擴展。

0

您可以使用粘性會話。它使負載平衡器能夠將用戶的會話綁定到特定的實例。這可確保會話期間來自用戶的所有請求都發送到同一實例。閱讀Sticky and NON-Sticky sessions

另外,假設實例因某種原因被終止,爲了維護狀態,認證令牌和其他信息也可以保存在單獨的redis緩存中,這對查詢來說要快得多。讀Session Management in microservices