PROFESSIONAL_KV-STORE/Тех.задание

74 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

1. Наименование системы
«PROFESSIONAL KV-STORE» — высокопроизводительное key-value хранилище данных в оперативной памяти с TCP-интерфейсом
2. Принципы общения (взаимодействия)
Система должна обеспечивать интеллектуальное взаимодействие с клиентом через TCP-соединение с поддержкой текстовых команд.
Клиент подключается, отправляет команды, получает ответы. Сервер обрабатывает запросы асинхронно, поддерживает конкурентный доступ к данным и сохраняет целостность информации.
3. Прикладная задача
Разработка серверного приложения, которое:
• Принимает TCP-подключения от клиентов
• Хранит данные в оперативной памяти в формате "ключ-значение"
• Поддерживает базовые операции: SET, GET, DEL, EXISTS
• Обеспечивает корректный конкурентный доступ
• Выдерживает высокие нагрузки и позволяет тестировать производительность
4. Функциональные требования
FR1: Клиент подключается по TCP и отправляет текстовые команды
FR2: SET key value — сохранить пару ключ-значение
FR3: GET key — получить значение по ключу или вернуть "(nil)"
FR4: DEL key — удалить пару ключ-значение
FR5: EXISTS key — проверить существование ключа
FR6: KEYS — получить список всех ключей
FR7: SETEX key seconds value — сохранить с TTL (время жизни)
FR8: FLUSH — удалить все данные
FR9: DBSIZE — получить количество ключей
FR10: INFO — получить статистику сервера
FR11: PING — проверить доступность сервера
5. Нефункциональные требования
NFR1: Сервер должен поддерживать не менее 10 000 одновременных подключений
NFR2: Среднее время ответа на запрос — не более 1 мс под нагрузкой
NFR3: Отсутствие утечек памяти (проверка Valgrind)
NFR4: Устойчивость к некорректным командам (не должен падать)
NFR5: RPS для GET — не менее 50 000 запросов/сек
NFR6: RPS для SET — не менее 35 000 запросов/сек
NFR7: Поддержка TTL (автоматическое удаление истекших ключей)
NFR8: Персистентность (сохранение данных в JSON файл)
6. Технологический стек
• Язык: С++
• Сетевая библиотека: Boost.Asio (асинхронный TCP)
• Хранилище данных: std::unordered_map + shared_mutex (in-memory)
• Персистентность: nlohmann/json (сохранение в файл)
• Логирование: spdlog
• Сборка: CMake 3.20+
• Тестирование: Google Test
• Бенчмарки: Google Benchmark
• Контейнеризация: Docker
• Тип базы данных: Встроенная in-memory (без внешней БД)
7. Результат
1. Исходный код сервера на C++20
2. Простой клиент для ручной проверки (telnet или Python)
3. Сервис нагрузочного тестирования (скрипты)
4. Отчет с замерами производительности (RPS, задержки, память)
5. Unit-тесты (покрытие ≥ 80%)
6. Интеграционные тесты
7. Dockerfile для контейнеризации
8. Полная документация (README, API, инструкции)
8. Критерии примерки
1. Сервер успешно компилируется и запускается
2. Все команды работают корректно (проверка через telnet)
3. TTL работает (ключи автоматически удаляются)
4. Персистентность работает (сохранение/загрузка)
5. RPS ≥ 35 000 для SET
6. RPS ≥ 50 000 для GET
7. Средняя задержка ≤ 1 мс
8. Поддержка ≥ 10 000 соединений
9. Отсутствие утечек памяти (Valgrind)
10. Покрытие тестами ≥ 80%
11. Есть Dockerfile и инструкция по запуску
12. Есть отчет с результатами нагрузочного тестирования