Тема: Методы проектирования отказоустойчивых информационных систем
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
Введение 5
1 Теория надежности 7
1.1 Сбои и инциденты 8
1.2 Избыточность и резервирование 9
1.3 Понятия SLA, SLI и SLO 9
1.4 Бюджет ошибок 11
1.5 Метрики надежности ПО 11
1.6 Модели надежности 13
2 Риски эксплуатации приложений 15
2.1 Инструменты управления рисками 15
2.2 Цикл разработки ПО 16
2.3 Выявление рисков возникновения сбоев 17
2.4 Причины и триггеры сбоев 19
2.5 Классификация причин сбоев 21
2.6 Оценка влияния и последствий 22
2.7 Оценка вероятности возникновения 23
2.8 Реализация риск-стратегии 24
3 Основы построения отказоустойчивого ПО 26
3.1 Распределенная архитектура 26
3.1.1 Понятие сервисов и микросервисов 27
3.1.2 Балансировка нагрузки 28
3.1.3 Асинхронная обработка запросов 29
3.2 Отказоустойчивость хранилищ данных 31
3.2.1 CAP-теорема 31
3.2.2 Репликация данных 31
3.2.3 Шардирование данных 33
3.2.4 Партицирование данных 34
3.2.5 Резервное копирование 35
3.3 Шаблоны проектирования отказоустойчивых API 36
3.3.1 Повторные попытки и таймауты 37
3.3.2 Паттерн Circuit Breaker 38
3.3.3 Реализация fallback-сценариев 39
3.3.4 Использование контекста запроса 40
3.3.5 Пробы жизнеспособности сервиса 42
3.3.6 Механизм Graceful Shutdown 43
3.4 Устойчивость под высокой нагрузкой 44
3.4.1 Ограничение пропускной способности 44
3.4.2 Кэширование данных 45
3.4.3 Плавная деградация 47
3.4.4 Автоматическое масштабирование 48
3.5 Обеспечение безопасности релизов 49
3.5.1 Семантическое версионирование 50
3.5.2 Безопасное чтение файлов конфигурации 51
3.5.3 Паттерн Feature Toggle 51
3.5.4 Стратегии развертывания (релиза) 52
3.5.5 Имплементация динамических конфигов 53
3.5.6 Использование облачных технологий 54
3.6 Роль архитектурных фасадов 54
3.6.1 Паттерн API Gateway 55
3.6.2 Паттерн Strangler 56
3.6.3 Паттерн Sidecar 56
4 SRE-культура и практики 58
4.1 Взаимосвязь с DevOps 58
4.2 О роли SRE-специалиста 59
4.3 Практики мониторинга и реагирования 60
4.3.1 Логи и метрики 61
4.3.2 Трассировка запросов 62
4.3.3 Профилирование и отладка 62
4.3.4 Дежурства (on-call) 63
4.4 Практики тестирования программных компонентов 63
4.4.1 Симуляция отказов и хаос-тестирование 64
4.4.2 Нагрузочное и стресс-тестирование 64
4.5 Улучшение цикла разработки 66
4.5.1 Автоматизация рутинных действий 66
4.5.2 Ревью архитектурных решений 66
4.5.3 Методология Shift-left SRE 67
4.5.4 Работа с бюджетом ошибок 68
4.5.5 Формирование стратегических целей 68
4.6 Практики документирования 69
4.6.1 Архитектурные диаграммы 69
4.6.2 Документирование API 70
4.6.3 Ранбуки для дежурных 71
4.6.4 Постмортемы 71
4.6.5 План аварийного восстановления 72
4.6.6 Регламенты и договоренности 73
4.7 Непрерывное обучение 74
Заключение 75
Список использованных источников и литературы 76
📖 Введение
В настоящее время эта проблема стала особо актуальной по причине того, что информационные технологии являются одной из самых крупных инвестиций человечества. По статистике таких источников как «Gartner» и «Statista», ежегодные траты на информационные технологии исчисляются миллиардами долларов и эта цифра только продолжает расти [1, 2]. За каждым популярным приложением стоят сотни, тысячи или даже миллионы клиентов, которые ожидают стабильный сервис. В свою очередь, для заказчиков каждая минута недоступности приравнивается к прямым или косвенным финансовым потерям.
Первыми о необходимости изменения подхода к разработке приложений с большим уклоном в сторону надежности и отказоустойчивости задумались современные гиганты IT-индустрии, которые начали наращивать свою клиентскую базу в двухтысячные годы. Ещё в 1998 году Amazon издал статью «The Distributed Computing Manifesto», в которой были зафиксированы ключевые принципы создания сервис-ориентированной архитектуры и подчеркнуто их влияние на производительность и устойчивость к отказам [3].
В 2017 году компания Google выпустила книгу «Site Reliability Engineering» [4], ставшую основным руководством для построения надежных и отказоустойчивых информационных систем на последующие несколько лет. Практики из данной книги по-своему перенимались, модифицировались и адаптировались крупными IT-компаниями по всему миру, что в итоге привело к появлению и распространению профессии и культуры SRE (Software Reliability Engineering), имеющей несколько неоднозначный характер. Одни видят в этом следующую ступень развития для DevOps-инженеров или системных администраторов, другие приписывают этот термин разработчикам, которые занимаются поддержкой приложения в промышленной среде, последние выделяют SRE в отдельный класс специалистов со своими специфичными техническими задачами [5]. Так или иначе, всех работников данной области объединяет общая установка на обеспечение надежности и стабильности эксплуатируемых ими систем.
К сожалению, в открытых источниках доступно не так много систематизированного материала по теме отказоустойчивости корпоративных информационных систем по причине относительной новизны данного направления. Другой важной проблемой является то, что существующие ресурсы не описывают систематического подхода к обеспечению надежности, а только предлагают набор подходящих для этого практик и шаблонов проектирования.
Поэтому целью данной работы становится выявление и описание методов повышения отказоустойчивости информационных систем с использованием аппарата управления рисками, который может помочь выстроить работу над надежностью более систематически.
Это декомпозируется на следующие задачи:
1. Выявление и анализ рисков развертывания и эксплуатации приложений.
2. Изучение существующих практик и методов повышения отказоустойчивости систем.
3. Разработка методов реагирования и минимизации рисков на каждом этапе цикла разработки программного обеспечения.
Структура диссертации представляет собой четыре логически связанные главы. В первых двух частях изложены теоретические аспекты построения отказоустойчивых систем, а также проведен анализ и классификация рисков, с которыми сталкиваются команды разработки и сопровождения проектов. В последних главах разобраны шаблоны и практики проектирования отказоустойчивых систем, а также приведены практические рекомендации по трансформации процессов разработки ПО с уклоном в повышение его надежности и доступности.
Научная ценность и новизна заключается в структурировании и совершенствовании существующих знаний в области анализа рисков эксплуатации корпоративных информационных систем. Данная работа может стать хорошим техническим руководством для инженеров и разработчиков, желающих повысить качество своего программного обеспечения.
✅ Заключение
Основная часть диссертации посвящена практикам построения отказоустойчивого программного обеспечения, позволяющим минимизировать влияние сбоев путем реализации методов структурного, временного и функционального резервирования. Их задачей является не только минимизация возможных рисков эксплуатации, но и улучшение таких показателей, как MTTR и MTBF системы. В заключительной части разбираются методология SRE и некоторые инструменты, вносящие процессные улучшения в цикл разработки и развивающие SRE-культуру в продуктовой команде.
Результаты данной работы могут быть использованы как основа для дальнейших исследований в области разработки надежных информационных систем и будут полезны инженерам и разработчикам, стремящимся улучшить качество и надежность программных продуктов.





