簡體   English   中英

擴展Azure服務結構無狀態服務

[英]Scaling of Azure service fabric Stateless services

您能否讓我更好地了解我們如何在不分區的情況下擴展無狀態服務?

假設我們在集群中有5個節點,並且有5個服務實例。 在簡單測試中,一個節點表現為粘性,其中我發送的所有請求僅由一個節點提供服務。 在出現大量請求的情況下,可以自動使用其他實例來提供流量。 我們如何處理服務架構中的此類橫向擴展情況?

謝謝!

通常,對於無狀態SF服務,無需使用分區,因此如果可以,請避免這樣做:

有關SF分區的更多信息,包括為何通常不將其用於無狀態服務

如果您使用的是ServiceProxy API,它將與群集中的給定物理節點保持粘性連接。 如果(例如)公開HTTP端點,則群集中的每個物理實例都將擁有一個(這意味着您最終一次只能與一個端點進行對話,除非您手動循環通過它們)。 您可以通過以下方式避免這種情況:

  1. 為每個調用創建一個新的代理實例,如果您進行大量操作(或者手動循環遍歷實例端點URL的列表,這可能會很繁瑣和/或昂貴),這往往會很昂貴。

  2. 將負載平衡器放在群集的前面,並配置從客戶端到SF節點的所有流量都將通過該流量轉發。 可以為Round-Robin等樣式語義配置負載均衡器:

Azure負載平衡器

Azure交通管理器

祝好運!

您可以使用每個節點上安裝的反向代理查詢請求。 使用https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy

反向代理然后為您解析端點。 如果您有無狀態服務的多個實例,那么它將把您的請求轉發給隨機的一個。

如果您在繁重的工作期間可以增加服務的實例數量,然后代理將自動包括新實例。

我假設您正在從群集外部調用服務。 如果是,則您的問題並非特定於Service Fabric,而是Azure VMSS +LB。

Service Fabric在虛擬機規模集之上運行,這些VM在負載均衡器之后創建,當客戶端連接到您的服務時,它們通過負載均衡器與您的服務建立連接,只要打開了連接,負載均衡器分配一個目標VM來處理您的請求,並且使用相同的連接(保持活動狀態)時,來自客戶端的任何請求都將由同一節點處理,這就是為什么您的負載轉到單個節點的原因。

LB不會舍入請求,因為它們使用的是同一連接,這是LB的限制(功能),要變通解決此問題,您應該打開多個連接或使用多個客戶端(實例)。

這是默認分發模式(基於哈希)的。 您還必須檢查LB中的路由規則,以檢查分發模式是基於哈希 (5元組= ip + port)還是IP親和模式 (僅ip),否則來自同一IP的多個連接仍然會鏈接到同一節點。

來源: Azure負載平衡器分發模式

暫無
暫無

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

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