Удалить Тех.задание
This commit is contained in:
parent
4b816f4218
commit
b2eb4f79a4
73
Тех.задание
73
Тех.задание
|
|
@ -1,73 +0,0 @@
|
|||
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. Есть отчет с результатами нагрузочного тестирования
|
||||
Loading…
Reference in a new issue