Рекомендации по использованию службы приложений AzureBest Practices for Azure App Service

В этой статье собраны рекомендации по использованию службы приложений Azure.This article summarizes best practices for using Azure App Service.

Совместное размещениеColocation

Если входящие в решение ресурсы Azure, например веб-приложения и базы данных, находятся в разных регионах, возможны следующие последствия:When Azure resources composing a solution such as a web app and a database are located in different regions, it can have the following effects:

  • увеличение задержки при взаимодействии между ресурсами,Increased latency in communication between resources
  • денежные расходы на передачу данных между регионами в соответствии со стоимостью услуг Azure.Monetary charges for outbound data transfer cross-region as noted on the Azure pricing page.

Совместное размещение в одном и том же регионе — оптимальный вариант для ресурсов Azure, составляющих отдельное решение, таких как веб-приложение и база данных, а также учетной записи хранения, в которой хранятся содержимое или данные.Colocation in the same region is best for Azure resources composing a solution such as a web app and a database or storage account used to hold content or data. При создании ресурсов следует убедиться в том, что они находятся в одном регионе Azure, если иное не диктуется особенностями вашего бизнеса или структуры решения.When creating resources, make sure they are in the same Azure region unless you have specific business or design reason for them not to be. Вы можете переместить приложение службы приложений в тот же регион, в котором расположена база данных, с помощью функции клонирования службы приложений. В настоящее время она доступна для плана службы приложений уровня "Премиум".You can move an App Service app to the same region as your database by using the App Service cloning feature currently available for Premium App Service Plan apps.

Если приложения используют больше памяти, чем ожидалосьWhen apps consume more memory than expected

Если вы заметите по данным мониторинга или по рекомендациям службы, что приложение использует больше памяти, чем ожидалось, попробуйте применить функцию автоматического восстановления службы приложений.When you notice an app consumes more memory than expected as indicated via monitoring or service recommendations, consider the App Service Auto-Healing feature. В одном из режимов работы функция автоматического восстановления выполняет действия с учетом заданного порога использования памяти.One of the options for the Auto-Healing feature is taking custom actions based on a memory threshold. Возможные действия включают уведомления по электронной почте, исследования с помощью дампа памяти, мгновенное реагирование с перезапуском рабочего процесса.Actions span the spectrum from email notifications to investigation via memory dump to on-the-spot mitigation by recycling the worker process. Функция автоматического восстановления настраивается через файл web.config или через удобный пользовательский интерфейс, как описано в записи блога App Service Support Site Extension(Расширение сайта поддержки для службы приложений).Auto-healing can be configured via web.config and via a friendly user interface as described at in this blog post for the App Service Support Site Extension.

Если приложения используют больше ресурсов ЦП, чем ожидалосьWhen apps consume more CPU than expected

Если вы заметите по данным мониторинга или по рекомендациям службы, что приложение потребляет больше ресурсов ЦП, чем ожидалось, или регулярно создает пиковые нагрузки на ЦП, примените вертикальное или горизонтальное масштабирование плана службы приложений.When you notice an app consumes more CPU than expected or experiences repeated CPU spikes as indicated via monitoring or service recommendations, consider scaling up or scaling out the App Service plan. Если приложение отслеживает состояние, допустимо только вертикальное масштабирование. Если же приложение работает без отслеживания состояния, горизонтальное масштабирование более предпочтительно, поскольку оно обеспечит дополнительную гибкость и больше возможностей.If your application is stateful, scaling up is the only option, while if your application is stateless, scaling out gives you more flexibility and higher scale potential.

Дополнительные сведения о "приложениях с отслеживанием состояния" и "без отслеживания состояний" см. в этом видео: планирование масштабируемого комплексного многоуровневого приложения в службе приложений Azure.For more information about “stateful” vs “stateless” applications you can watch this video: Planning a Scalable End-to-End Multi-Tier Application on Azure App Service. Дополнительные сведения о масштабировании службы приложений и возможностях автоматического масштабирования см. в статье Увеличение масштаба приложения в Azure.For more information about App Service scaling and autoscaling options, see Scale a Web App in Azure App Service.

Если исчерпаны ресурсы сокетовWhen socket resources are exhausted

Резерв исходящих TCP-подключений обычно исчерпывается, если используемые клиентские библиотеки не поддерживают повторное использование TCP-подключений или не используют метод проверки активности (Keep-Alive) для протоколов более высокого уровня (например, HTTP).A common reason for exhausting outbound TCP connections is the use of client libraries, which are not implemented to reuse TCP connections, or when a higher-level protocol such as HTTP - Keep-Alive is not used. Ознакомьтесь с документацией по каждой библиотеке, на которые ссылаются приложения в вашем плане службы приложений, и убедитесь, что настройка этих библиотек и методы их вызова обеспечивают эффективное повторное использование исходящих подключений.Review the documentation for each of the libraries referenced by the apps in your App Service Plan to ensure they are configured or accessed in your code for efficient reuse of outbound connections. Также выполните все приведенные в документации рекомендации по правильному созданию, освобождению и очистке подключений, чтобы избежать утечки данных во время подключений.Also follow the library documentation guidance for proper creation and release or cleanup to avoid leaking connections. Пока выполняется эта проверка клиентских библиотек, последствия можно временно устранить, увеличив количество экземпляров.While such client libraries investigations are in progress, impact may be mitigated by scaling out to multiple instances.

Node.js и исходящие HTTP-запросыNode.js and outgoing http requests

При работе с Node.js и большим числом исходящих HTTP-запросов важна поддержка открытых соединений HTTP.When working with Node.js and many outgoing http requests, dealing with HTTP - Keep-Alive is important. Вы можете использовать пакет agentkeepalive npm, чтобы упростить его в коде.You can use the agentkeepalive npm package to make it easier in your code.

Обязательно выполняйте обработку ответа http, даже при отсутствии действий в обработчике.Always handle the http response, even if you do nothing in the handler. Если не обработать ответ надлежащим образом, в работе приложения со временем возникнут затруднения, так как не останется дополнительных сокетов.If you don't handle the response properly, your application gets stuck eventually because no more sockets are available.

Например, при работе с пакетом http или https:For example, when working with the http or https package:

const request = https.request(options, function(response) {
    response.on('data', function() { /* do nothing */ });
});

Если служба приложений на платформе Linux работает на компьютере с несколькими ядрами, рекомендуем использовать PM2, чтобы запустить несколько процессов Node.js для выполнения приложения.If you are running on App Service on Linux on a machine with multiple cores, another best practice is to use PM2 to start multiple Node.js processes to execute your application. Для этого можно указать команду запуска контейнера.You can do it by specifying a startup command to your container.

Например, чтобы запустить четыре экземпляра:For example, to start four instances:

pm2 start /home/site/wwwroot/app.js --no-daemon -i 4

Когда начинаются сбои архивации приложенияWhen your app backup starts failing

Две основные причины, по которым происходят сбои архивации приложения, это недопустимые параметры хранилища и недопустимая конфигурация базы данных.The two most common reasons why app backup fails are: invalid storage settings and invalid database configuration. Эти сбои обычно происходят при изменении ресурсов хранилища или базы данных либо в случае изменения способа доступа к этим ресурсам (например, были обновлены учетные данные для базы данных, выбранной в параметрах архивации).These failures typically happen when there are changes to storage or database resources, or changes for how to access these resources (for example, credentials updated for the database selected in the backup settings). Обычно архивация выполняется по расписанию и требует доступа к хранилищу (для вывода резервной копии файлов) и базам данных (для копирования и чтения содержимого, добавляемого в резервную копию).Backups typically run on a schedule and require access to storage (for outputting the backed-up files) and databases (for copying and reading contents to be included in the backup). В случае отсутствия доступа к любому из этих ресурсов будет постоянно происходить сбой архивации.The result of failing to access either of these resources would be consistent backup failure.

При возникновении сбоев архивации просмотрите последние результаты, чтобы понять, какого типа происходит сбой.When backup failures happen, review most recent results to understand which type of failure is happening. В случае сбоев доступа к хранилищу просмотрите и обновите параметры хранилища, используемые в конфигурации архивации.For storage access failures, review and update the storage settings used in the backup configuration. В случае сбоев доступа к базам данных просмотрите и обновите строки подключения в параметрах приложения. Затем обновите конфигурацию архивации соответствующим образом, добавив в нее необходимые базы данных.For database access failures, review and update your connections strings as part of app settings; then proceed to update your backup configuration to properly include the required databases. Дополнительные сведения об архивации приложений см. в статье Архивация приложения в Azure.For more information on app backups, see Back up a web app in Azure App Service.

Развертывание новых приложений Node.js в службе приложений AzureWhen new Node.js apps are deployed to Azure App Service

Конфигурация по умолчанию службы приложений Azure для приложений Node.js предназначена для наиболее распространенных из них.Azure App Service default configuration for Node.js apps is intended to best suit the needs of most common apps. Если в конфигурации для приложения Node.js целесообразно использовать персонализированные настройки, чтобы повысить производительность или оптимизировать использование ресурсов ЦП, памяти и сети, ознакомьтесь со статьей Рекомендации и руководство по устранению неполадок приложений Node в веб-приложениях Azure.If configuration for your Node.js app would benefit from personalized tuning to improve performance or optimize resource usage for CPU/memory/network resources, see Best practices and troubleshooting guide for Node applications on Azure App Service. В этой статье описаны параметры IISNode, которые может потребоваться настроить для приложения Node.js. В ней также рассмотрены различные сценарии и проблемы, которые могут возникнуть при работе приложения, и показано, как устранить эти проблемы.This article describes the iisnode settings you may need to configure for your Node.js app, describes the various scenarios or issues that your app may be facing, and shows how to address these issues.

Следующие шагиNext Steps

Дополнительные сведения о рекомендуемых методиках см. в статье Диагностика службы приложений .For more information on best practices, visit App Service Diagnostics to find out actionable best practices specific to your resource.

  • Перейдите к веб-приложению в портал Azure.Navigate to your Web App in the Azure portal.
  • В области навигации слева щелкните Диагностика и устранение проблем , после чего откроется окно Диагностика службы приложений.Click on Diagnose and solve problems in the left navigation, which opens App Service Diagnostics.
  • Выберите элемент Главная страница с рекомендациями .Choose Best Practices homepage tile.
  • Щелкните рекомендации по обеспечению доступности & производительности или рекомендациям по оптимальной конфигурации , чтобы просмотреть текущее состояние приложения в соответствии с рекомендациями.Click Best Practices for Availability & Performance or Best Practices for Optimal Configuration to view the current state of your app in regards to these best practices.

Эту ссылку также можно использовать для непосредственного открытия диагностики службы приложений для ресурса: https://ms.portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot.You can also use this link to directly open App Service Diagnostics for your resource: https://ms.portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot.