Azure负载均衡web / workerangular色的内部实例?

据我所知Azure没有内部服务的负载平衡器,内部端点没有负载平衡。 但是,有人可以实施一个“软”解决scheme,或者可以build议我一些有用的文章阅读?

多谢

有两种方法可以处理这种情况:在虚拟机中运行服务的一种方式,以及在Web / Workerangular色中运行的服务的另一种方式。

第一:虚拟机 。 如果您的服务在虚拟机中运行,则可以利用Azure的外部负载平衡器在单个服务中运行的多个虚拟机之间进行负载平衡。 传统上,这提出了一个安全问题,因为你有一个外部(input)端点开放的世界,并需要在虚拟机本身(iptables / Windows防火墙)相应地实现自己的安全。 有一项全新的ACL'd端点function,允许您根据IP范围允许/阻止对外部端点的访问。 这意味着任何来自云服务的stream量(无论是虚拟机还是networking/员工)都可以通过一个简单的configuration调用(现在只能通过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 

Next:Web / worker 。 假设您正在使用多个实例在一个辅助angular色中运行一个私有服务。 你可以枚举你的调用者的实例(例如一个webangular色实例),然后随机select一个ip +端口(或循环,或任何你select的机制)。 相当简单,做这样的事情(并从我的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(); } 

负载均衡的软件解决scheme是使用Serviceangular色实例计数大于1的服务总线队列。每个angular色都监听队列,并在消息进入时处理它们。繁忙的angular色显然必须完成在从队列中抓取下一条消息并处理之前进行。 这样负载分布在工作者angular色实例中。