簡體   English   中英

docker swarm上的負載均衡器和http下載流

[英]Load balancer and http download streams on docker swarm

我整理了一個架構,以下是對架構的最佳描述

  • 五節點泊塢窗群
  • 假設我的dockerized微服務的5個實例在每個swarm節點上運行一個副本
  • 該服務通過REST端點提供功能
  • 下載是一種這樣的功能,它們可以正常工作,我在Scala / Play框架中編寫了一些代碼,對服務進行了docker化並進行了部署。
  • 我還知道,由於我使用了swarm,因此它會在內部為每個請求執行LB。

我對WebSocket以及在下載過程中負載平衡器如何不會破壞東西有一些疑問。

  1. 我開始下載5GB的文件,並且可以正常工作。 我正在使用HTTP流或分塊,我想這沒關系。 現在我的問題是,一旦我的REST端點下載完畢,TCP連接就會保持打開狀態,並且由於在服務器關閉連接之前一直保持打開狀態,因此,群集負載平衡不會干擾嗎? 簡而言之,每次客戶端請求一個HTTP調用時,群集都會對其進行負載平衡,但是就像特定的下載示例一樣,一旦建立了TCP套接字,該請求就會由一個節點處理,因為在下載過程中不會重新建立連接?
  2. 如果客戶端打開Web套接字,它將打到服務正在運行的swarm節點之一,並且由於打開了Websocket連接,因此同一服務實例將推送通知嗎?
  3. 如果Websocket死於某種原因,客戶端可能會建立新的連接,但請求可能會在其他服務實例上終止,並且將一直保持這種狀態,直到再次建立新的連接?

以我的理解,以上三點正確嗎? 是否有一些閱讀材料/博客可以詳細說明這一點?

也許像代理LB,ip_hash模式一樣使用nginx

指定組應使用負載平衡方法,其中根據客戶端IP地址在服務器之間分配請求。 客戶端IPv4地址的前三個八位位組或整個IPv6地址用作哈希密鑰。 該方法確保了來自同一客戶端的請求將始終傳遞到同一服務器,除非該服務器不可用。 在后一種情況下,客戶端請求將傳遞到另一台服務器。 最有可能的是,它也將永遠是同一台服務器。

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash

暫無
暫無

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

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