Модель зрелости надежности

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

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

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

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

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

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

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

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

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

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

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

Ключевые стратегии

✓ Оценка возможностей для разгрузки операционной ответственности

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

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

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

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

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

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

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

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

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

✓ Определение критически важных потоков пользователей и системных потоков

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

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

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

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

Замечание

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

Дополнительные сведения см. в статье Azure Well-Architected Framework: оптимизация проектирования рабочей нагрузки с помощью потоков.

✓ Выберите правильную модель проектирования, ресурсы и функции

Эту стратегию следует применить на следующих уровнях:

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

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

    Осторожность

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

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

  • Номера SKU или уровни в службах Azure: Просмотрите функции каждого номера SKU и изучите гарантии доступности платформы. Чтобы понять охват, предоставляемый в контексте опубликованного процентиля, изучите соглашения об уровне обслуживания.

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

✓ Используйте базовый уровень избыточности при развертывании

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

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

Риск: Если приложение не предназначено для среды с несколькими экземплярами, оно может бороться с несколькими активными экземплярами, что может привести к несогласованным данным. Кроме того, если приложение создано для локальной установки с низкой задержкой, использование зон доступности может нарушить его производительность.

✓ Включение метрик, журналов и трассировок для мониторинга потоков

Выберите собственные инструменты платформы, такие как Azure Monitor, чтобы обеспечить видимость метрик, журналов и трассировок. Используйте встроенные функции для задания оповещений для потенциальных проблем. Для отправки уведомлений и получения оповещений необходимо иметь базовое оповещение. Воспользуйтесь преимуществами возможностей платформы Azure, которые указывают на изменения состояния работоспособности служб, например:

Настройте группы действий Azure Monitor для инфраструктуры и приложения.

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

Для начала создайте наблюдаемость на следующих уровнях.

Инфраструктура

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

Заявление

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

Кроме того, проверьте базовые тесты доступности в Application Insights.

Данные

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

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

✓ Начало создания сборника схем устранения сбоев

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

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

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

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

  • Высоко. Полный сбой системы, который приводит к значительной финансовой потере и снижению доверия пользователей.

  • Средняя. Временное нарушение, которое влияет на часть рабочей нагрузки и приводит к неудобствам пользователей.

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

Ниже приведен пример шаблона:

Проблема Риск Исходный материал Степень серьезности Вероятность Смягчение последствий
Временный сбой сети Клиент теряет подключение к серверу приложений. Платформа Azure Высоко Очень вероятно Используйте шаблоны проектирования в логике на стороне клиента, например логику повторных попыток и средства разбиения цепи.
Сбой в зоне Пользователь не может связаться с приложением. Платформа Azure Высоко Маловероятный Включите устойчивость зоны для всех компонентов.
Окончание срока действия сертификата TLS Клиент не может установить сеанс TLS с приложением. Ошибка из-за действий человека Высоко Вероятно Используйте автоматическое управление сертификатами TLS.
Использование ЦП или памяти достигает определенных ограничений и приводит к сбою сервера. Истекло время ожидания запросов. Заявление Средний Вероятно Реализуйте автоматические перезапуски.
Компонент недоступен во время обновления. Пользователь испытывает необработанную ошибку в приложении. Развертывание или изменение конфигурации Низкий уровень Высокая вероятность во время развертывания и маловероятно в другое время Обработка компонентов в логике на стороне клиента.

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

✓ Добавление механизмов для восстановления после временных сбоев

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

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

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

✓ Запуск базовых тестов

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

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

Риск: Тестирование часто приводит к трению в цикле разработки. Чтобы устранить этот риск, сделайте тестирование надежности отслеживаемым вместе с задачами разработки.

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

Дальнейшие шаги