Режим критичности и автоматические выключатели

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

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

Было… обнаружено, что в целом 80% определенного программного обеспечения можно написать за 20% от общего выделенного времени. И наоборот, самые сложные 20% кода занимают 80% времени.

И одновременно:

Microsoft отметила, что путем исправления 20% самых распространенных ошибок 80% связанных ошибок и сбоев в данной системе будут устранены.

Сейчас не сказано, что эти 20% первого утверждения полностью совпадают со вторым, но, по крайней мере, здесь есть корреляция. Те 20%, которые «нужно сделать правильно», отнимают 80% нашего времени и склонны к сокращению.

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

Режим критичности

Неудача может проявляться по-разному и по многим причинам. Это делает так, что вам нужно будет вытаскивать вилки из розетки на макроуровне. В случае интернет-магазина вы можете реализовать три уровня:

Критичность зеленый

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

Оранжевый критичность

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

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

Criticality Red

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

Это первая и самая простая реализация режима критичности. Для этого вам нужно создать:

  • выберите случайного облачного провайдера, отличного от того, на котором вы размещаете свои операции (вы захотите это, когда, например, вы случайно запустили терраформу, которая удалила жизненно важные операционные части вашей операции)
  • ежедневно планировать рекурсивную команду wget для вашей домашней страницы, которая записывает свой вывод в корзину хранилища
  • убедитесь, что wget отправляет заголовок при сканировании. Вроде x-criticality-mode: red.
  • сделайте первый проход по вашему решению и настройте интерактивную логику так, чтобы она не отображалась (без призывов к действию для добавления в корзину, без корзины и тому подобного).
  • настроить отображение баннера вверху страницы, чтобы проинформировать пользователя в случае предоставления заголовка.
  • Настройте балансировщик нагрузки на маршрутизацию - в зависимости от предпочтительного режима критичности - всего внешнего трафика к статической корзине. Каждый ответ должен быть снабжен заголовком без кеширования, который позволяет при необходимости быстро вернуться из этого режима.

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

Предохранители

Схема проектирования автоматического выключателя сводится к следующему:

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

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

Это имеет некоторые последствия:

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

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

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

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

  • Каждая функция должна быть указана
  • На каком уровне критичности должна быть показана эта функция? (Зеленый = только при полной работоспособности, Оранжевый = критически важная функция, красный = можно сканировать и не имеет интерактивных функций (или удаляется при сканировании))
  • Каково целевое состояние функции? (Зеленый = функция работает нормально, оранжевый = запускает автоматический выключатель, красный = отключение функции от внешнего трафика).

Эта установка позволяет вам:

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