Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
ℹ️Настоящий учебно-методический информационный материал размещён в ознакомительных и исследовательских целях и представляет собой пример учебного исследования. Не является готовым научным трудом и требует самостоятельной переработки.
Введение 3
1 Постановка задачи 6
2 Поиск решения согласно требованиям 8
2.1 Библиотека LMDB 8
2.2 Библиотека LevelDB 9
2.3 Проверка библиотек на набор свойств ACID 10
2.4 Сравнение производительности LevelDB и LMDB 12
2.5 Выбор отказоустойчивого протокола для распределенной системы 12
2.5.1 Протокол Paxos 13
2.5.2 Алгоритм RAFT 18
2.5.3 Сравнение Paxos и Raft 21
3 Программный прототип 24
3.1 Файловая структура проекта 24
3.2 Сценарий работы приложения 25
3.3 Руководство по установке 27
3.4 Руководство по эксплуатации 27
4 Библиотека LMDB-RAFT 30
4.1 Создание разделяемой библиотеки 30
4.2 Файловая структура библиотеки 30
4.3 Процесс создания и тестирования библиотеки 31
4.4 Создание deb-пакета 32
4.4.1 Создание файловой директории debian 33
4.4.2 Г енерация deb-пакета 3 4
4.5 Руководство по установке 35
4.6 Руководство по эксплуатации 35
Заключение 36
Список использованной литературы 37
Приложение А Структура Makefile 41
📖 Введение
Нереляционные базы данных на основе пар ключ-значение применяются при проектировании хранилищ больших данных, для обеспечения кэширования web-серверов, хранения пользовательских данных, в решениях, где ключевую роль играет быстрое и легкое масштабирование и пр. Как ключи, так и значения могут представлять собой что угодно: от простых до сложных составных объектов. При этом очень важной является задача обеспечения высокой доступности, невзирая на возможный сбой такого хранилища, с сохранением консистентности данных согласно теореме CAP [7]. Сами хранилища на основе пар “ключ-значение” в большинстве случаев не обладают встроенными механизмами обеспечения отказоустойчивости. Одним из решений является организация отказоустойчивого хранилища в кластер на основе алгоритмов принятия консенсуса. Эти алгоритмы позволяют строить надежные системы из ненадежных компонентов, поэтому являются основой многих распределенных систем [2].
В рамках данной работы ставилась задача предложить и создать вариант отказоустойчивого хранилища данных на кластере из нескольких узлов, используя концепцию конечного автомата. Настоящая работа посвящена разработке программного прототипа отказоустойчивого хранилища на основе пар ключ-значение (первой исследовательской версии хранилища), и разделяемой библиотеки на его основе.
Разделяемые библиотеки - это механизм размещения библиотечных функций в едином файле, доступном сразу нескольким выполняющимся процессам. Такую библиотеку можно использовать в любом проекте, где требуется наличие распределенного отказоустойчивого хранилища по типу ключ-значение, поскольку она содержит набор необходимых для этой цели функций из прототипа, созданного ранее.
В процессе работы выбрана программная библиотека LMDB, отвечающая набору заданных критериев производительности и позволяющая легко создавать хранилище типа "ключ-значение". Найдена технология организации этого хранилища в кластер - протокол консенсуса RAFT.
Одним из результатов работы является разделяемая библиотека на основе созданного программного прототипа, позволяющая запускать хранилище на нескольких серверах, образовывать отказоустойчивый кластер и далее выполнять функции хранилища данных на основе пар "ключ-значение". В тексте данной работы приводится описание процесса проектирования отказоустойчивого кластерного хранилища на основе библиотеки LMDB и консенсус-протокола RAFT, а также обзор созданного прототипа. В конце работы приводится заключение и обзор достигнутых результатов.
✅ Заключение
В работе проведено исследование двух библиотек хранилищ на основе пар ключ-значение. Библиотеки исследованы на набор свойств ACID, проанализирована их производительность, и способность отвечать архитектурным требованиям искомого хранилища.
Путем анализа возможных подходов к построению распределенной системы, найден способ организации серверов в кластер. Используемый для этой цели протокол интуитивно понятен, достаточно прост в реализации, корректность его работы формально доказана.
Предложена реализация разделяемой библиотеки на основе первой исследовательской версии(прототипа) отказоустойчивого хранилища на основе пар ключ-значение. Созданное хранилище образует отказоустойчивый кластер, способный сохранять данные в виде пары по типу ключ-значение на всех узлах. Отказ части узлов не приводит к потере работоспособности кластера.
Программный код хранилища оформлен в виде разделяемой библиотеки и упакована в установочный пакет с расширением *.deb. Библиотека протестирована на работу в операционных системах семейства Debian.