Выравнивание нагрузки Azure внутренние экземпляры ролей сети/рабочего?

Проверьте, что MySQL работает и если Вы можете соединиться при помощи 'telnet x.x.x.x 3306'. Если можно получить это далеко, проблема существует в полномочиях MySQL. В противном случае проверьте брандмауэр (iptables-L) как предыдущий человек, предложенный, и проверьте, что my.cnf настраивается для слушания tcp (удостоверьтесь, что нет никакой skip_networking строки).

3
задан 25 July 2013 в 09:27
2 ответа

Есть два способа справиться с этим: один - со службами, работающими на виртуальных машинах, и другой - для служб, работающих в веб-ролях / рабочих ролях.

Первый: виртуальные машины . Если ваша служба работает на виртуальной машине, вы можете воспользоваться внешним балансировщиком нагрузки Azure для балансировки нагрузки на нескольких виртуальных машинах, работающих в одной службе. Традиционно это создавало проблему безопасности, поскольку у вас была бы внешняя (входная) конечная точка, открытая для всего мира, и вам нужно было бы соответствующим образом реализовать свою собственную безопасность внутри самих виртуальных машин (iptables / брандмауэр Windows). Есть совершенно новая функция под названием Конечные точки ACL, которые позволяют разрешать / блокировать доступ к внешней конечной точке на основе диапазонов IP-адресов. Это означает, что любому трафику из облачной службы (будь то виртуальные машины или веб / рабочий) можно правильно разрешить доступ с помощью простого вызова конфигурации (сегодня только через PowerShell). Вот отрывок из сообщения Майкла Уошама об этом:

$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 / worker . Допустим, вы запускаете частный сервис в рабочей роли с несколькими экземплярами. Вы можете перечислить экземпляры от вызывающего абонента (например, экземпляр веб-роли), а затем выбрать один из портов ip + случайным образом (или циклический перебор, или любой другой механизм, который вы выберете). Довольно просто, сделать что-то вроде этого (заимствовано из моего ответа 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();
}
3
ответ дан 3 December 2019 в 06:36

Программным решением для балансировки нагрузки будет использование очереди сервисной шины с числом экземпляров рабочих ролей > 1. Каждая роль рабочего прослушивает очередь и обрабатывает сообщения по мере их поступления. Очевидно, что занятым рабочим ролям придется закончить то, что они делают, прежде чем схватить следующее сообщение из очереди и обработать его. Таким образом, нагрузка распределяется между экземплярами рабочих ролей.

.
0
ответ дан 3 December 2019 в 06:36

Теги

Похожие вопросы