Разработка с учетом горизонтального увеличения масштаба

Разработка приложения с учетом горизонтального масштабирования

Основным преимуществом облака является эластичное масштабирование — возможность использовать столько емкости, сколько вам нужно, масштабирование по мере увеличения нагрузки и масштабирование, если дополнительная емкость не требуется. Учитывайте горизонтальное масштабирование при разработке приложения, чтобы можно было добавлять и удалять его экземпляры в зависимости от нагрузки.

Рекомендации

Избегайте закрепления экземпляров. Закрепление экземпляров, или сходство сеансов, означает ситуацию, в которой запросы от конкретного клиента всегда направляются к одному и тому же серверу. Прилипание ограничивает возможность горизонтального масштабирования приложения. Например, трафик от пользователя с большим объемом не будет распространяться между экземплярами. Закрепление возникает по разным причинам, например при сохранении в памяти сведений о состоянии сеанса или при шифровании с использованием ключей конкретного компьютера. Следите за тем, чтобы любой экземпляр приложения всегда мог обработать любой запрос.

Определите узкие места. Горизонтальное масштабирование не станет панацеей от любых проблем с производительностью. Например, если узким местом является серверная база данных, дополнительные веб-серверы никак не улучшат ситуацию. Сначала найдите и устраните все узкие места в системе, и лишь затем пытайтесь решить проблему, добавляя новые экземпляры. Возникновение узких мест наиболее вероятно в компонентах, которые работают с отслеживанием состояния.

Разделите рабочие нагрузки на части в соответствии с требованиями к масштабируемости. В приложениях часто выполняется несколько рабочих нагрузок с разными требованиями к масштабированию. Например, в приложении может использоваться общедоступный веб-сайт и отдельный веб-интерфейс администрирования. На общедоступном сайте часто возникают непредвиденные всплески трафика, а нагрузка на сайт администрирования намного ниже и более предсказуема.

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

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

Используйте встроенные возможности автомасштабирования. В многие вычислительные службы Azure встроена поддержка автомасштабирования. Если рабочая нагрузка приложения хорошо прогнозируется и регулярно изменяется, используйте горизонтальное увеличение масштаба по расписанию. Например, горизонтально увеличивайте масштаб приложения в рабочее время. Если же рабочая нагрузка плохо прогнозируется, используйте для автомасштабирования триггеры по метрикам производительности, таким как загрузка процессора и длина очереди. Также изучите наши рекомендации по автомасштабированию.

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

Учитывайте возможность горизонтального уменьшения масштаба при разработке приложения. Не забывайте, что при гибком масштабировании нужно предусмотреть и периоды свертывания, когда выполняется горизонтальное уменьшение масштаба и удаляются некоторые экземпляры приложения. Приложение должно корректно обрабатывать удаление экземпляров. Вот несколько возможных способов для обработки свертывания:

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

Рассмотрите возможность масштабирования для избыточности. Масштабирование может повысить надежность приложения. Например, рекомендуется масштабировать между несколькими зонами доступности, например с помощью служб, избыточных между зонами. Такой подход может повысить пропускную способность приложения, а также обеспечить устойчивость, если в одной зоне возникает сбой.