Перечень сокращений и обозначений 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, призванные улучшить его доступность на операциях чтения.
Дополнительно, выполнен анализ различных архитектур информационных систем, выявлены их достоинства и недостатки. На его основе был сделан вывод об эффективности сервисной архитектуры для реализации отказоустойчивого и высокодоступного приложения. Разработано веб-приложение с использованием сервисной архитектуры. В нем применены различные методы противодействия и маскирования сбоев, изученные в процессе подготовки данной работы.
Полученные результаты обладают практической и научной ценностью. Они могут быть применены при проектировании и разработки современных масштабируемых и высоконагруженных систем. Дальнейшим развитием данной работы может заключаться в создании нового алгоритма достижения распределенного консенсуса, нацеленного на работу с большими массивами данных и разработка на его основе распределенной базы данных.
1. Stonebraker M., Qetintemel U. ‘One Size Fits All’: An Idea Whose Time
Has Come and Gone // 21st International Conference on Data Engineering (ICDE), URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.68.9136&
rep=rep 1 &type=pdf.(дата обращения: 13.11.2018).
2. Kopetz, H. and Verissimo, P.: Real Time and Dependability Concepts. InMullender, S, с. 411-446. Wokingham: Addison-Wesley, 2nd ed., 1993.
3. Maarten van Steen, Andrew S. Tanenbaum. Distributed Systems — Published by Maarten van Steen, 2017 - 582 с. ISBN 978-15-43-0573-8-6
4. Pease, M., Shostak, R., and Lamport, L.: Reaching Agreement in the Presence of Faults. J. ACM, том 27, №. 2, с. 228-234, Апрель. 1980.
5. Yuan D., Luo Y., Zhuang X., et al. Simple Testing Can Prevent Most
Critical Failures: An Analysis of Production Failures in Distributed Data-Intensive Systems // 11th USENIX Symposium on Operating Systems Design and Implementation (OSDI), URL: https://www.usenix.org/
system/files/conference/osdi14/osdi14-paper-yuan.pdf. (дата обращения: 10.04.2019).
6. Ford D., Labelle F., Popovici F. I., et al. Availability in Globally
Distributed Storage Systems // 9th USENIX Symposium on Operating Systems Design and Implementation (OSDI), URL:
https://static.googleusercontent.com/media/research.google.com/ru//pubs/ archive/36737.pdf. (дата обращения: 04.08.2019).
7. Gunawi H. S., Hao M., Leesatapornwongsa T., et al. What Bugs Live in the Cloud? // 5th ACM Symposium on Cloud Computing (SoCC),. — URL: http://ucare.cs.uchicago.edu/pdf/socc14-cbs.pdf.(дата обращения: 14.10.2019).
8. Oppenheimer D., Ganapathi A., Patterson D. A. Why Do Internet
Services Fail, and What Can Be Done About It? // 4th USENIX Symposium on Internet Technologies and Systems (USITS), URL:http://static.usenix.org/legacy/events/usits03/tech/full_papers/oppenheimer/ oppenheimer.pdf. (дата обращения: 24.11.2019).
9. Guerraoui, R. and Schiper, A.: «Software-Based Replication for Fault Tolerance.» IEEE Computer, том. 30, №. 4, c. 68-74, Апрель. 1997.
10. Kreps J. Getting Real About Distributed System Reliability. URL: http://blog.empathybox.com/post/ 19574936361/getting-real-about-distributed- system-reliability. (дата обращения: 25.11.2019).
11. Клеппман М., К48 Высоконагруженные приложения.
Программирование, масштабирование, поддержка. — СПб.: Питер, 2019. — 640 с. ISBN 978-5-4461-0512-0
12. Cook J. D. ACID Versus BASE for Database Transactions. URL: https://www.johndcook.com/blog/2009/07/06/ brewer-cap-theorem-base/. (дата обращения: 04.05.2019).
13. Ongaro D., Ousterhout J. K. In Search of an Understandable Consensus
Algorithm (Extended Version) // USENIX Annual Technical Conference (ATC). — URL: https://pdfs.semanticscholar.org/b02c/
6b00bd5dbdbd951fddb00b906c82fa80f0b3.pdf. (дата обращения: 15.02.2019).
14. Fischer M.J., Lynch N. A., Paterson M.S., Impossibility of Distributed Consensus with One Faulty Process. JACM, 1985 URL: http:// dl.acm.org/citation. cfm?id=214121(дата обращения: 14.04.2019).
15. Singhal, M. and Shivaratri, N.: Advanced Concepts in Operating Systems: Distributed, Database, and Multiprocessor Operating Systems. New York: McGraw-Hill, 1994.
...
26 источников