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. Есть отчет с результатами нагрузочного тестирования