Балансировка нагрузки внешней службы в Azure

У нас есть служба .NET, размещенная в Azure (в настоящее время на виртуальной машине, а затем в виде веб-задания), которая выполняет запросы HTTP / HTTPS к внешней общедоступной службе через сторонний API. Для масштабируемости и надежности (поскольку служба ненадежна и, вероятно, будет отключаться в течение более длительных периодов времени при выполнении слишком большого количества запросов), мы хотели бы сбалансировать нагрузку на эту службу.

Я думаю, что это гораздо лучше решить с помощью инфраструктуры, чем с помощью кода, но я недостаточно знаю об инфраструктуре, предлагаемой Azure, чтобы знать, можно ли решить даже с помощью инфраструктуры. Я прочитал обзорную документацию о балансировщике нагрузки Azure, но они говорят только о балансировке запросов в Azure (общедоступная и внутренняя балансировка нагрузки), а не о запросах, исходящих из него в Интернет.

Итак, предлагает ли Azure некоторую инфраструктуру, позволяющую мне выполнять запросы балансировки нагрузки, идущие из моего приложения в Интернет?

Конкретные требования:

  • Сопоставьте одну конечную точку HTTP с несколькими настроенными конечными точками, в идеале с использованием настроенных весов (т. Е. Выберите конечную точку A в 66% случаев, конечную точку B в 22%, конечную точку C в 12%).
  • Когда одна из настроенных конечных точек выходит из строя, прозрачно переключитесь на другую конечную точку и игнорируйте отказавшую в течение некоторого времени.

Обновление (06.05.2018): ответ @kim ниже привлек мое внимание к диспетчеру трафика Azure, который использует балансировку нагрузки и опрос на основе DNS для автоматического переключения при отказе. Вероятно, это стандартный способ балансировки нагрузки, но идеальным решением для моей проблемы был бы прокси-сервер, который получает запросы, воспроизводит их на одной из конечных точек с балансировкой нагрузки, обнаруживает сбой прямо для одного запроса и немедленно выполняет отработку отказа, повторная попытка запроса с другой конечной точкой. Таким образом, вызывающее приложение никогда не заметит, что что-то не так, если рабочая конечная точка не будет доступна. Я понимаю, что это, вероятно, слишком специфично для моей проблемы, чтобы иметь стандартное инфраструктурное решение, но я все равно добавляю это, на всякий случай ...


person Fabian Schmied    schedule 04.05.2018    source источник
comment
Итак, вы собираетесь выполнить работу, которую должен был сделать сторонний поставщик api? Они действительно предоставляют несколько конечных точек для одного и того же api? Причина, по которой вы не найдете ничего готового в Azure, заключается в том, что обычно балансировщики нагрузки распределяют входящие запросы по внутренним узлам.   -  person Peter Bons    schedule 04.05.2018
comment
Что ж, API - это интерфейс для стандартного контракта, реализуемого несколькими поставщиками услуг. Провайдер API не ожидал, что эти сервисы будут ненадежными - да и мы тоже этого не сделали, пока не проверили их под нагрузкой :)   -  person Fabian Schmied    schedule 06.05.2018


Ответы (2)


Мне никогда не приходилось делать то, что вы описываете, но вот некоторые из моих мыслей. Вам могут быть полезны следующие услуги:

Что вы можете попробовать, так это разместить диспетчер трафика перед вашими API-интерфейсами, чтобы сбалансировать их нагрузку и контролировать их работу.

Затем поместите службу управления API поверх диспетчера трафика, чтобы защитить API и обеспечить для него контроль доступа. Если когда-либо в будущем вам потребуется переместить свой API, вы можете легко перенастроить службу управления API, чтобы указать другое место.

person kim    schedule 04.05.2018
comment
Спасибо за указатель, теперь я прочитал в диспетчере трафика Azure. Однако прозрачное переключение при отказе через DNS - это лишь вторая лучшая реализация для моей проблемы. Наилучшим возможным вариантом импликации был бы прокси-сервер, который воспроизводит каждый запрос, обнаруживает сбои и выполняет отработку отказа прямо для самого запроса (а не для будущих запросов после интервала опроса и тайм-аута DNS). Тем не менее, если я не найду какой-либо другой механизм инфраструктуры, это определенно будет вариантом. - person Fabian Schmied; 06.05.2018

Вы также можете настроить три конечные точки как часть внутреннего пула шлюза приложений. Это обеспечит проверку работоспособности и переключение на работоспособные конечные точки в случае отказа данной конечной точки. Однако сегодня Application Gateway выполняет только циклический, а не взвешенный циклический алгоритм.

person amsriva-msft    schedule 11.06.2018