簡體   English   中英

應用程序 ELB - 基於一致散列的粘性會話

[英]Application ELB - sticky sessions based on consistent hashing

我在文檔中找不到任何內容,但仍在寫信以確保我沒有錯過它。 我希望來自不同客戶端的所有連接對於某個請求參數具有相同的值,最終都在同一個上游主機上。 使用 ELB 粘性 session,您可以讓相同的客戶端連接到相同的主機,但不能保證跨不同的客戶端。

這可以通過 Envoy 代理實現,請參閱: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers#ring-hash

我們已經使用 ELB,所以如果 ELB 可以實現上述操作,那么我們可以避免在 envoy 之間引入另一層。

更新:用例 - 在多租戶雲解決方案中,我們希望來自給定客戶帳戶的所有客戶端都連接到同一上游主機。

不幸的是,這不可能在 ALB 中執行。

應用程序負載均衡器通過 ELB 粘性會話和基於模式的路由等功能控制主機接收流量的所有邏輯。

如果沒有解決辦法,那么您可以查看一個支持應用程序設置粘性 session cookie 名稱和值的Classic Loadbalancer

根據最佳實踐,理想情況下您的應用程序應該是無狀態的,是否可以考慮重新架構您的應用程序而不是嘗試解決問題。 我的一些建議是:

  • 使用DynamoDB存儲任何基於 session 的數據,從基於磁盤的 session 移動(如果這是您的應用程序所做的)。
  • 任何需要持久化的基於磁盤的文件都可以在所有主機之間共享,或者對基於 Linux 的主機使用EFS ,或者在 Windows 上使用FSX
  • 中/長期持久文件可以遷移到 S3,任何很少更改的資產都可以存儲在這里,然后您的應用程序可以使用 S3 而不是磁盤。

重要的是要記住,正如我上面所說,您應該盡可能保持應用程序無狀態。 假設您的 EC2 實例可能會失敗,通過為此做好准備,它將更容易恢復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM