Search
Write a publication
Pull to refresh

Comments 20

Вот мне интересно, может ли случиться такая в мире радость что некрософт наконец таки закончит свой жизненный цикл?
расскажите лучше про SNAT, про лимит в 160 портов, про другие оверхеды, с которым приходится сталкиваться, при запросах по локальной сети

Как мне кажется, 160 портов, это было несколько лет назад.


https://docs.microsoft.com/ru-ru/azure/load-balancer/load-balancer-outbound-connections


Хотя это не гарантируется, максимальное количество доступных SNAT-портов на сегодня составляет 64 511 (65 535 – 1024 привилегированных портов).
месяц еще не прошел, как саппорт подтвердил, что этот лимит действует все еще

Хм. Это максимум. В доке по ссылке описываются, в том числе, разнообразное случаи, когда это может быть не так Если можно, опишите вашу задачу, где вы столкнулись с этим ограничением. Можно в личку.

основные веб сервера — это cloud service с виндой 2012.
от них идет веб запрос в ажуровский балансировщик по внутреннему IP.
балансер распределяет запросы между виртуальными серверами винды.
проблема в том, что запросы все у нас реализованы через async и их очень много. и в какой то момент набирается очередь таких запросов и начинают сыпаться по таймауту.
Вот тут кстати написано https://blogs.msdn.microsoft.com/mast/2015/07/13/azure-snat/
Before we go, we should probably also acknowledge another long-standing problem with this design. Since Azure allocates these outgoing ports in batches of 160, it is possible that the creation of a new batch of 160 may not happen fast enough and an outgoing connection attempt will fail. We typically only see this under very high load (almost always load testing), but if you fall victim to this, the solution is the same – use a PIP.
То есть, если у нас есть сервер, который находится за Load Balancer-ом (или еще как подвержена SNAT), и на эту ноду приходится нагрузка такая, что ему нужно вдруг сделать много разных подключений наружу, то есть вероятность, что Azure протормозит и не успеет завести новые порты. Как результат — «outgoing connection attempt will fail».

Не совсем так. Похоже, что это ограничение у Cloud Services, а не у "любого сервера в Azure".


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

Сколько это ограничение крови выпило. У нас классическая модель + cloudservice + virtual network (classic). Упираемся в ограничение исходящих подключений при взаимодействии с azure blob storage, как итог: аппликация на .net тормозит. Вот такой вот «мамкин» highload.

А Cloud Services выбраны из-за простого масштабированя/развёртывания? Необходимости входных портов, отличных от 80 и 443? Ну, т.е. если ограничение "пьёт кровь", почему не перейдёте на что-то, доступное в ARM модели? Я понимаю, что есть причины, очень было бы интересно узнать, какие, если это возможно.

CloudServices были выбраны исторически, когда ARM еще не появился. Вокруг них уже выстроены процессы сборки и тестирования.

почему не перейдёте на что-то, доступное в ARM модели

Да по тем же причинам, почему не будем переписывать аппликацию на go. Придется отвлекать разработчиков от создания фич. Плюс отлаживание процессов в ARM модели. Плюс переписывание документации. Это дорого.

Эта статья 2015 года. В Azure новые фичи/релизы/фиксы выкатываются каждые 2 недели. Я бы не стал на 100% на неё полагаться.


Предположу, что это ограниечение связано именно с Cloud Services, и классической моделью развёртывания, только в которой они и доступны, но не касается "просто виртуальных машин", разворачиваемых по модели ARM, собственно ссылку на описание SNAT для которых я приводил ввыше.

Справедливо. Это ограничение Cloud Services и классической модели. Workaround, если он применим, выше уже предложен — использовать Public IP (PIP) для экземпляров ВМ. Тогда исходящие запросы конкретной ВМ идут через этот PIP и не требуют SNAT-таблицу.

Это перевод. Они взяты из исходного текста.

К сожалению по работе не смог принять участие в вебинаре "Новые подходы в облачной архитектуре: контейнеры и микросервисы". Можно ли где нибудь посмотреть запись?

Sign up to leave a comment.