Skip to content

PurpleCat404/Distributed-storage

Repository files navigation

Распределенное Хранилище Ключ-Значение

Этот проект реализует распределенное хранилище ключ-значение с использованием Flask для создания REST API. Хранилище распределено по нескольким узлам, обеспечивая масштабируемость и отказоустойчивость данных. Основные компоненты проекта включают:

  • B-дерево для структуры хранения данных.
  • CLI клиент для взаимодействия с системой.
  • Распространенные узлы с использованием Flask.
  • Главный сервер для координации узлов.
  • Механизм репликации и резервного копирования данных.

Содержание


Особенности

  • Распределенная Архитектура: Ключи и значения равномерно распределены по нескольким узлам.
  • B-дерево для Хранения: Узлы используют B-дерево для эффективных операций с ключами и значениями.
  • Репликация: Обеспечивает избыточность данных и доступность при отказе основного узла.
  • REST API:
    • Добавление ключ-значения.
    • Удаление ключ-значения.
    • Получение значения по ключу.
    • Получение всех значений из всех узлов.
  • Механизм Резервного Копирования: Данные узлов сохраняются на диск в формате JSON.
  • Командная Строка Клиента: Для удобного взаимодействия с системой.

Установка

  1. Клонируйте репозиторий:

    git clone https://github.com/ваш-репозиторий/distributed-key-value-storage.git
    cd distributed-key-value-storage
  2. Создайте и активируйте виртуальное окружение:

    python -m venv .venv
    .venv\Scripts\activate  # Для Windows
    # или
    source .venv/bin/activate  # Для Unix/Linux/Mac
  3. Установите зависимости:

    pip install -r requirements.txt

Использование

Запуск Главного Сервера

Главный сервер отвечает за координацию узлов и обработку запросов к хранилищу.

Пример запуска:

python main_server.py --num-nodes 3 --replication-factor 1 --main-port 8000 --base-port 5000

Опции:

  • --num-nodes: Количество узлов для запуска.
  • --replication-factor: Фактор репликации (количество копий для каждого ключа).
  • --main-port: Порт для главного сервера.
  • --base-port: Базовый порт для запуска узлов (каждый сервер хранит локальное хранилище).

Использование Клиента

CLI клиент (client.py) предоставляет удобный интерфейс для взаимодействия с системой.

Команды:

  • add <key> <value>: Добавить новый ключ-значение.
  • get <key>: Получить значение по ключу.
  • delete <key> <value>: Удалить ключ-значение.
  • all_values: Получить все ключ-значения из всех узлов.

Опции:

  • --base-url: Базовый URL главного сервера (по умолчанию: http://localhost:8000).

Примеры:

  • Добавление ключа:

    python client.py add my_key my_value
  • Получение значения:

    python client.py get my_key
  • Удаление ключа:

    python client.py delete my_key my_value
  • Получение всех значений:

    python client.py all_values

Тестирование

Проект включает юнит и интеграционные тесты, расположенные в директории Tests. Для запуска тестов используйте следующую команду:

python -m pytest

Тесты включают:

  • B-дерево: Проверка корректности операций вставки, удаления и поиска.
  • KVStorage: Тестирование механизма резервного копирования и CRUD операций.
  • NodesHelper: Проверка распределения ключей, репликации и взаимодействия между узлами.
  • Интеграционные Тесты: Симуляция взаимодействия с главным сервером и проверка корректной координации узлов.

Структура Проекта

├── b_tree.py            # Реализация B-дерева для хранения данных
├── client.py            # CLI клиент для взаимодействия с системой
├── kv_storage.py        # Хранилище ключ-значение с B-деревом и резервным копированием
├── main_server.py       # Главный сервер для координации узлов
├── node_server.py       # Сервер узла
├── nodes_helper.py      # Класс для управления узлами и репликацией
├── requirements.txt     # Список зависимостей Python
├── Tests/               # Юнит и интеграционные тесты
│   ├── test_b_tree.py
│   ├── test_kvstorage.py
│   ├── test_nodes_helper.py
│   ├── test_integration.py
└── backups/             # Директория для хранения резервных копий узлов

Зависимости

Все зависимости указаны в файле requirements.txt. Основные пакеты включают:

  • Flask: Веб-фреймворк для создания REST API.
  • pytest: Фреймворк для тестирования.
  • requests: Библиотека для HTTP-запросов.

Установка зависимостей:

pip install -r requirements.txt

Примечания

  1. Механизм Резервного Копирования:

    • Каждый узел сохраняет свои данные в директории backups/ в формате JSON. Убедитесь, что эта директория существует перед запуском системы.
  2. Управление Портами:

    • Убедитесь, что используемые порты (например, 8000 для главного сервера и 5000+ для узлов) свободны и не используются другими приложениями. При необходимости измените порты в командах запуска.
  3. Окружение:

    • Рекомендуется использовать виртуальное окружение для изоляции зависимостей проекта.
  4. Отладка:

    • Для дополнительной отладки можно включить debug=True в app.run() в main_server.py и node_server.py, чтобы получать подробные логи Flask.

About

KV-storage

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages