Оптимизация производительности

Завершено

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

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

Что такое оптимизация производительности?

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

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

Вертикальное и горизонтальное масштабирование

Вычислительные ресурсы можно масштабировать в двух направлениях.

  • Вертикальное масштабирование — это добавление ресурсов к одному экземпляру. Также называется вертикальным масштабированием.

    Иллюстрация, на которой показано вертикальное масштабирование путем добавления ресурсов в виртуальную машину.

  • Горизонтальное масштабирование заключается в добавлении экземпляров. Также называется горизонтальное масштабирование.

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

Увеличение масштаба связано с добавлением дополнительных ресурсов, таких как ЦП или память, в один экземпляр. Этот экземпляр может быть виртуальной машиной или службой PaaS.

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

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

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

При обоих типах масштабирования ресурсы можно сократить, что приведет к оптимизации затрат.

Автомасштабированием называется процесс динамического выделения ресурсов в соответствии с требованиями к производительности. При увеличении объема работ приложению требуются дополнительные ресурсы, чтобы поддерживать необходимый уровень производительности и удовлетворять требования соглашений об уровне обслуживания (SLA). Так как требования не требуются и добавленные ресурсы больше не требуются, они могут быть освобождены для минимизации затрат.

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

Оптимизация производительности сети

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

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

Оптимизация производительности хранилища

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

Использование кэширования в архитектуре может повысить ее производительность. Кэширование — это механизм для хранения часто используемых данных или ресурсов (веб-страниц, изображений) для более быстрого извлечения. Кэширование можно использовать в различных слоях приложения. Его можно использовать между серверами приложений и базой данных для уменьшения времени получения данных.

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

Выявление узких мест в производительности приложения

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

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

Просмотрите все слои приложения, выявите и устраните в нем узкие места производительности. Эти узкие места могут плохо влиять на обработку памяти в приложении или даже на процесс добавления индексов в базу данных. Это может быть итеративный процесс. Устранив одно узкое место, вы вскроете другое, о котором ранее и не подозревали.

Благодаря тщательному подходу к мониторингу производительности вы можете определить типы шаблонов и методик, из которых может воспользоваться ваша архитектура.

Проверьте свои знания

1.

Что из следующего является примером вертикального увеличения масштаба (вертикального масштабирования)?

2.

Что из следующего является примером горизонтального увеличения масштаба (горизонтального масштабирования)?