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

Просто обеспечивать доступность инфраструктуры в сегодняшнем «постоянно подключенном» мире уже недостаточно. Службы должны не только отвечать на запросы — они также должны гарантировать, что все точки интеграции предприятия работают должным образом и что их основная функция в экосистеме приложений работает согласно ожиданиям. Именно поэтому организации необходима команда инженеров по обеспечению отказоустойчивости (resilient engineering).

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

Мониторинг и видимость

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

Один из способов подготовить команду инженеров к неизвестному — регулярные тренировки и тестирование, например, тестирование надежности систем (site reliability testing, SRT) и симуляция сбоев. В этих играх мы делим команду на две части. Перед одной командой стоит задача понять, как контролировать несколько показателей новой технологии, чтобы убедиться, что она работает правильно, и принять ответные меры, чтобы восстановить обслуживание при обнаружении сбоя. Другая команда намеренно включает несколько режимов, которые провоцируют сбой, и будет следить за тем, как это отразится на системе. Это нормально — и даже поощряется — создавать для нее экстремальные ситуации, чтобы оценить свои силы и научиться чему-то новому.

Избыточность

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

Никаких загадок

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

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

Сильная автоматизация

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

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

Правильная команда

Организация, которая уделяет первоочередное внимание вопросам обеспечения отказоустойчивости, начинает со своих сотрудников. Давно прошли те дни, когда инженер писал ПО, а затем передавал его на тестирование и проверку работоспособности. Сегодня каждый инженер отвечает за то, чтобы его ПО было надежным, точным и всегда работало. Инжиниринг отказоустойчивости сложен и требует преданных своему делу инженеров, труд которых должен быть признан и вознагражден. Топ-менеджеры компании должны знать, с какими сложными задачами имеет дело ваша команда инженеров. Это требует культурного сдвига и начинается с комплектации команды. Следует нанимать людей, которые гордятся своей предыдущей работой и получают удовлетворение от решения сложных проблем.

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