commit 29b2d721117c9db104fcebe6db90d78fba975561 Author: iskanderbrat09 Date: Mon Sep 14 20:18:33 2026 +0500 Добавить Тех.задание diff --git a/Тех.задание b/Тех.задание new file mode 100644 index 0000000..1b4e61d --- /dev/null +++ b/Тех.задание @@ -0,0 +1,73 @@ +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. Есть отчет с результатами нагрузочного тестирования