Load-Balancing
Azure 負載平衡 web/worker 角色的內部實例?
據我所知,Azure 沒有用於內部服務的負載均衡器,內部端點沒有負載均衡。但是有人可以實施“軟”解決方案,或者可以建議我閱讀一些有用的文章嗎?
多謝
有兩種方法可以處理這個問題:一種方法是在虛擬機中執行服務,另一種方法是在 web/worker 角色中執行服務。
第一:虛擬機。如果您的服務在虛擬機中執行,則可以利用 Azure 的外部負載平衡器在單個服務中執行的多個虛擬機之間進行負載平衡。傳統上,這會帶來安全問題,因為您將擁有一個對外開放的外部(輸入)端點,並且需要在虛擬機本身(iptables / Windows 防火牆)內相應地實施您自己的安全性。有一個名為 ACL’d Endpoints 的全新功能,可讓您根據 IP 範圍允許/阻止對外部端點的訪問。這意味著來自云服務(無論是虛擬機還是 Web/worker)的任何流量都可以通過簡單的配置呼叫(目前僅通過 PowerShell)正確地被允許訪問。這是 Michael Washam部落格文章的摘錄對這個:
$acl = New-AzureAclConfig Set-AzureAclConfig -AddRule Permit -RemoteSubnet "1.2.3.4/32" -Order 1 -ACL $acl -Description "Just for my deployment" Get-AzureVM -ServiceName myservice -Name myvm | Set-AzureEndpoint -Name restapi -Protocol tcp -PublicPort 8000 -LocalPort 80 -ACL $acl | Update-AzureVM
下一個:網路/工作者。假設您正在以工作者角色執行具有多個實例的私有服務。您可以從呼叫方列舉實例(例如,Web 角色實例),然後隨機選擇其中一個 ip+port(或輪詢,或您選擇的任何機制)。相當簡單,做這樣的事情(並從我的 StackOverflow 答案這裡借用):
private String GetRandomServiceIP(String roleName, String endPointName) { var endpoints = RoleEnvironment.Roles[roleName].Instances.Select(i => i.InstanceEndpoints[endPointName]).ToArray(); var r = new Random(DateTime.Now.Millisecond); int ipIndex = r.Next(endpoints.Count()); return endpoints[ipIndex].IPEndpoint.Address.ToString(); }