Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья поможет разобраться с устранением периодических ошибок подключения и связанных проблем с производительностью в Службе приложений Azure В ней содержатся дополнительные сведения о методах устранения неполадок и исчерпании портов преобразования сетевых адресов (SNAT). Если вам нужна дополнительная помощь в любой момент этой статьи, обратитесь к экспертам Azure в службе поддержки сообщества Azure. Кроме того, можно зарегистрировать обращение в службу поддержки Azure. Перейдите в службу поддержки Azure и выберите " Отправить запрос в службу поддержки".
Симптомы
Приложения и функции, размещенные в службе приложений Azure, могут столкнуться с одним или несколькими из следующих проблем:
- Время отклика на всех или некоторых экземпляра в плане обслуживания.
- Периодические ошибки 5xx или Ошибка шлюза.
- Сообщения об ошибках таймаута.
- Не удалось подключиться к внешним конечным точкам (например, SQLDB, Service Fabric или другим службам приложений).
Причина
Основная причина возникновения периодических проблем с подключением — достижение предела при создании новых исходящих подключений. Ниже перечислены возможные ограничения.
- TCP-подключения. Существует ограничение на количество исходящих подключений, которые можно сделать. Ограничение исходящих подключений связано с размером используемого рабочего процесса.
- Порты SNAT. Исходящие подключения в Azure описывают ограничения для портов SNAT и соответствующий эффект для исходящих подключений. Azure использует преобразование адресов исходной сети (SNAT) и подсистемы балансировки нагрузки (не предоставляется клиентам) для взаимодействия с общедоступными IP-адресами. Каждый экземпляр службы приложение Azure изначально получает предварительное количество 128 портов SNAT. Ограничение количества портов SNAT влияет на открытие соединений с одним и тем же сочетанием адреса и порта. Если приложение создает подключения к сочетанию сочетаний адресов и портов, вы не будете использовать порты SNAT. Порты SNAT заканчиваются при многократных вызовах с одним и тем же сочетанием адреса и порта. После освобождения порта порт доступен для повторного использования по мере необходимости. Подсистема балансировки нагрузки Сети Azure освобождает порты SNAT из закрытых подключений только через четыре минуты.
Когда приложения или функции быстро открывают новое подключение, они могут быстро исчерпать предварительную квоту 128 портов. Затем они блокируются до тех пор, пока новый порт SNAT не станет доступным, либо путем динамического выделения дополнительных портов SNAT, либо путем повторного использования восстановленного порта SNAT. Если у вашего приложения заканчиваются порты SNAT, оно испытывает периодические проблемы с исходящим подключением.
Как избежать этой проблемы
Существует несколько решений, позволяющих избежать ограничения портов SNAT. К ним относятся:
- Пулы подключений: при использовании объединения подключений вы избегаете открытия новых сетевых подключений для вызовов по тому же адресу и порту.
- Конечные точки службы: у вас нет ограничения на порт SNAT для служб, защищенных конечными точками службы.
- Частные конечные точки: у вас нет ограничения на порт SNAT для служб, защищенных с помощью частных конечных точек.
- Шлюз NAT: при использовании шлюза NAT вы получаете 64 тысячи портов SNAT для исходящего трафика, которые можно использовать для ресурсов, отправляющих трафик.
Чтобы избежать проблемы с портом SNAT, вы не можете повторно создавать новые подключения к одному узлу и порту. Пулы соединений являются одним из наиболее очевидных способов решения этой проблемы.
Если вашим назначением является служба Azure, поддерживающая конечные точки службы, вы можете избежать проблем с исчерпанием портов SNAT, используя региональную интеграцию виртуальной сети и либо конечные точки служб, либо частные конечные точки. При использовании региональной интеграции виртуальной сети и размещения конечных точек службы в подсети интеграции трафик приложения к этим службам не будет ограничений на исходящий порт SNAT. Аналогичным образом, если вы используете интеграцию с региональной виртуальной сетью и частные конечные точки, у вас не будет никаких проблем с исходящими портами SNAT для этого направления.
Если расположением назначения является внешняя конечная точка за пределами Azure, то при использовании шлюза NAT вы получите 64 тысячи портов SNAT для исходящего трафика. Кроме того, в этом случае предоставляется выделенный исходящий адрес, который не является общедоступным для всех пользователей пользователям.
По возможности улучшайте код — используйте пулы соединений и избегайте возникновения такой ситуации. Не всегда есть возможность быстро изменить код, чтобы устранить эту ситуацию. В случаях, когда невозможно изменить код вовремя, воспользуйтесь другими решениями. Наилучшим решением проблемы является оптимальное объединение всех доступных решений. Попробуйте использовать конечные точки служб и частные конечные точки для служб Azure и шлюз NAT для остальных служб.
Дополнительные сведения о стратегиях устранения нехватки портов SNAT см. в статье Об использовании SNAT для исходящих подключений. Следующие стратегии применимы к приложениям и функциям, размещенным в службе приложений Azure.
Использование пула соединений
- Чтобы составить пул HTTP-подключений, проверьте подключения к пулу по протоколу HTTP с помощью HttpClientFactory.
- Дополнительные сведения о SQL Server и пула соединений см. в разделе Пулы соединений SQL Server (ADO.NET).
В следующих статьях описывается реализация пула подключений по разным стеку решений.
Узел
По умолчанию подключения для Node.js не сохраняются.
Http keep-alive
Ява
Пул подключений к базе данных Java (JDBC)
Пул HTTP-соединений
PHP
Хотя PHP не поддерживает пул подключений, вы можете попробовать использовать постоянные подключения к базе данных на сервере.
Сервер MySQL
- Подключения MySQLi для более новых версий
- mysql_pconnect для старых версий PHP
Другие источники данных
Питон
Пул HTTP-соединений
- Пул подключений HTTP включен по умолчанию в модуле "Запросы ".
- Urllib3
Повторное использование подключений
Дополнительные указатели и примеры управления подключениями в функциях Azure см. в статье "Управление подключениями в Функциях Azure".
Использование менее агрессивной логики повторных попыток
Дополнительные рекомендации и примеры см. в шаблоне повторных попыток.
Используйте удерживающие сигналы для сброса времени ожидания входящего бездействия.
Для реализации keepalives для приложений Node.js см. в статье "Мое Node.js приложение делает чрезмерные исходящие вызовы".
Дополнительные рекомендации, относящиеся к службе приложений
- Нагрузочный тест должен имитировать реальные условия подачи данных с постоянной скоростью. Тестирование приложений и функций в реальном мире может выявлять и устранять проблемы нехватки портов SNAT заранее.
- Убедитесь, что серверные службы могут быстро возвращать ответы. Для устранения проблем с производительностью базы данных SQL Azure ознакомьтесь с разделом Устранение проблем производительности базы данных SQL Azure с Intelligent Insights.
- Масштабирование плана службы приложений до большего количества экземпляров. Дополнительные сведения о масштабировании см. в статье Увеличение масштаба приложения в Azure. Каждому рабочему экземпляру в плане службы приложений выделяется несколько портов SNAT. Если вы разбиваете использование в нескольких экземплярах, то можете получить использование порта SNAT на экземпляр ниже рекомендуемого ограничения в 100 исходящих подключений на уникальную конечную точку.
- Попробуйте перейти к Среда службы приложений (ASE), где вы выделяете один исходящий IP-адрес, а ограничения для подключений и портов SNAT выше. В ASE число портов SNAT для каждого экземпляра основано на таблице предварительного размещения подсистемы балансировки нагрузки Azure. Например, ASE с 1–50 рабочими экземплярами имеет 1024 предварительнораспределированных портов на экземпляр, а ASE с 51–100 рабочими экземплярами имеет 512 предварительнораспределированных портов на экземпляр.
Избежание исходящих TCP-ограничений проще в решении, так как ограничения задаются размером рабочего процесса. Ограничения можно просмотреть в разделе Числовые ограничения между ВМ в "песочнице" — TCP-подключения
Имя ограничения | Описание | Мелкий (A1) | Средний (A2) | Крупный (A3) | Изолированный уровень (ASE) |
---|---|---|---|---|---|
Связи | Количество подключений для всей виртуальной машины | 1920 | 3968 | 8064 | 16 000 |
Чтобы избежать исходящих ограничений TCP, можно либо увеличить размер рабочих процессов, либо прибегнуть к горизонтальному масштабированию.
Справка по устранению неполадок
Знание двух типов ограничений исходящих подключений и действий, выполняемых приложением, должно упростить устранение неполадок. Если вы уверены, что ваше приложение выполняет много вызовов одной и той же учетной записи хранения, причина может быть в ограничении SNAT. Если ваше приложение создает очень много вызовов конечных точек по всему Интернету, вы, возможно, приближаетесь к пределу виртуальной машины.
Если вы не знаете достаточное поведение приложения, чтобы быстро определить причину, существуют некоторые средства и методы, доступные в Служба приложений, чтобы помочь с этим определением.
Поиск сведений о выделении портов SNAT
Вы можете использовать диагностику Службы приложений, чтобы найти сведения о выделении портов SNAT и просмотреть метрику выделения портов SNAT сайта службы приложений. Чтобы найти сведения о выделении портов SNAT, выполните следующие действия.
- Чтобы открыть диагностику Службы приложений, выберите веб-приложение Службы приложений или Среду службы приложений на портале Azure. В меню боковой панели выберите " Диагностика и решение проблем".
- Выберите категорию доступности и производительности .
- Выберите плитку "Нехватка портов SNAT" в списке доступных плиток в категории. Рекомендуется не устанавливать его выше 128. Если вам это нужно, вы по-прежнему можете открыть запрос в службу поддержки, и инженер службы поддержки получит метрики от внутреннего сервера.
Так как использование порта SNAT недоступно в качестве метрики, невозможно либо автомасштабирование на основе использования портов SNAT, либо для настройки автомасштабирования на основе метрик распределения портов SNAT.
TCP-подключения и порты SNAT
TCP-подключения и порты SNAT не связаны напрямую. Детектор использования TCP-подключений включен на страницу управления диагностикой и решением проблем любого приложения службы приложений. Найдите фразу TCP-соединения, чтобы найти ее.
- Порты SNAT используются только для потоков внешней сети, а общее число TCP-подключений включает локальные подключения обратного цикла.
- Порт SNAT может совместно использоваться различными потоками, если потоки различаются в протоколе, IP-адресе или порте. Метрика TCP-подключений учитывает каждое TCP-подключение.
- Ограничение TCP-подключений происходит на уровне экземпляра рабочего процесса. Исходящая балансировка сетевой нагрузки Azure не использует метрику подключений TCP для ограничения портов SNAT.
- Ограничения TCP-подключений описаны в числовых ограничениях песочницы для виртуальных машин — TCP-подключения.
- Существующие сеансы TCP завершаются сбоем при добавлении новых исходящих TCP-сеансов из исходного порта службы приложение Azure. Вы можете использовать один IP-адрес или перенастроить члены внутреннего пула, чтобы избежать конфликтов.
Имя ограничения | Описание | Мелкий (A1) | Средний (A2) | Крупный (A3) | Изолированный уровень (ASE) |
---|---|---|---|---|---|
Связи | Количество подключений для всей виртуальной машины | 1920 | 3968 | 8064 | 16 000 |
Веб-задания и подключения к базе данных
Если порты SNAT исчерпаны, а веб-задания не могут подключаться к База данных SQL, метрика не отображается, сколько подключений открывает каждый отдельный процесс веб-приложения. Чтобы найти проблемное веб-задание, переместите несколько заданий в другой план службы приложений, чтобы узнать, улучшается ли ситуация или остается проблема в одном из планов. Повторите эту процедуру, пока не найдете проблемное веб-задание.