Перечень сокращений и обозначений 9
Введение 11
1 Основные положения 13
1.1 Основная информация о надежности 14
1.2 Отказы и сбои 15
1.2.1 Модели отказов 16
1.2.2 Причины отказов и сбоев 18
1.3 Метрики отказоустойчивости 20
1.4 Методы обеспечения отказоустойчивости 21
1.5 Распределенные системы 23
1.5.1 Проблемы распределенных систем 24
1.5.2 CAP теорема 27
1.5.3 Распределенный консенсус 28
1.6 Восстановление 29
2 Обеспечение отказоустойчивости 32
2.1 Обнаружение сбоев 32
2.1.1 Мониторинг 34
2.1.2 Т естирование 36
2.2 Маскирование сбоев 39
2.2.1 N-версионное программирование 39
2.2.2 Группы процессов 40
2.3 Алгоритмы восстановления 42
2.3.1 Точки восстановления 42
2.3.2 Журналирование событий 44
2.4 Алгоритм консенсуса Raft 46
2.4.1 Основные понятия 47
2.4.2 Основные фазы работы 49
2.4.3 Работа с журналом 49
2.4.4 Доступность 50
2.4.5 Применение 51
2.5 Модификация алгоритма Raft 51
3 Проектирование архитектуры отказоустойчивой и высокодоступной
системы 55
3.1 Общие принципы 55
3.2 Виды архитектур 57
3.2.1 Монолитная архитектура 58
3.2.2 Плагинная архитектура 59
3.2.3 Сервисная архитектура 60
3.3 Архитектура отказоустойчивой системы 63
4 Отказоустойчивое веб приложение 67
4.1 Архитектура 67
4.2 Сервис учетных записей 69
4.3 Сервис каталога 71
4.4 Сервис заказов 73
4.5 API шлюз 75
4.6 Инфраструктура 78
Заключение 80
Список используемых источников 82
Приложение А Листинг сервиса “Каталог” 85
Приложение B Листинг сервиса “Учетные записи” 92
Приложение С Листинг сервиса “API шлюз ” 99
Приложение D Листинг сервиса “Заказы” 113
Приложение E Листинг конфигурации Docker compose 122
Приложение F Презентация 124
Современные информационные системы, могут работать с сотнями тысяч пользователей. Широкое распространение приобрело использование облачных технологий для высоконагруженных и распределённых систем, предоставляющих доступ к своим вычислительным ресурсам. С их помощью производится автоматическое масштабирование, за счет размещения данных на серверах в огромных дата центрах. Что позволяет предотвратить отказ в обслуживании при пиковых нагрузках.
Обеспечение позитивного опыта взаимодействия с системой требует поддержания высокого уровня доступности и производительности. Время отклика современных веб-приложений должно находиться в пределах от нескольких сотен миллисекунд до секунды. В ином случаи многие пользователи перестанут пользоваться им. Для соответствия этим требованиям необходимо поддерживать бесперебойную работу на протяжении всей эксплуатации. Обеспечение отказоустойчивости позволяет поддерживать работоспособность системы в случаи сбоев.
Многие существующие алгоритмы позволяют повысить надежность при решении отдельных задач, с которыми сталкиваются информационные системы: хранение, обработка, передача информации. Одни из них эффективны на практике, другие могу применяться только в теории. Однако рост числа высоконагруженных геораспределенных систем требует постоянного увеличения эффективности, как существующих подходов, так и разработку новых.
В данной магистерской диссертации объектом исследования являются свойства отказоустойчивости и высокой доступности информационных систем. Предметом исследования выступают способы достижения отказоустойчивости и методы повышения надежности. В частности, за счет применения распределенных систем.
Целью магистерской диссертации является улучшение известных алгоритмов обеспечения отказоустойчивости и высокой доступности, а также проектирование архитектуры и реализация приложения, обладающего свойствами отказоустойчивости и высокой доступности.
Итогом проведенной работы являются следующие результаты: исследован материал, касающийся надежности функционирования информационных систем, а именно:
• отказы и сбои, причины их возникновения и классификация;
• отказоустойчивость, алгоритмы и пути ее достижения, метрики, использующиеся для оценки отказоустойчисвости;
• восстановление систем после сбоев;
• общие методы повышения надежности.
Исследован вопрос отказоустойчивости распределенных систем, трудности, которые возникают при их использовании, а также получаемые выгоды. Отдельно изучена проблема достижения консенсуса в распределенных системах. С целью усвоения методов достижения отказоустойчивости при решении проблемы достижения консенсуса рассмотрен алгоритм Raft. В итоге, на основе изученного материала, предложены модификации исходного алгоритма Raft, призванные улучшить его доступность на операциях чтения.
Дополнительно, выполнен анализ различных архитектур информационных систем, выявлены их достоинства и недостатки. На его основе был сделан вывод об эффективности сервисной архитектуры для реализации отказоустойчивого и высокодоступного приложения. Разработано веб-приложение с использованием сервисной архитектуры. В нем применены различные методы противодействия и маскирования сбоев, изученные в процессе подготовки данной работы.
Полученные результаты обладают практической и научной ценностью. Они могут быть применены при проектировании и разработки современных масштабируемых и высоконагруженных систем. Дальнейшим развитием данной работы может заключаться в создании нового алгоритма достижения распределенного консенсуса, нацеленного на работу с большими массивами данных и разработка на его основе распределенной базы данных.