New_project2026-27/ТЗ.txt

44 lines
4.2 KiB
Plaintext
Raw Permalink 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. Наименование системы
"MiniStore" — многопоточный in-memory key-value сервер с текстовым протоколом.
2. Предметная область
Системы кэширования и хранения данных типа "ключ-значение" (как Redis/Memcached) широко используются для ускорения доступа к часто запрашиваемым данным в высоконагруженных приложениях (веб-сайты, API, сессии пользователей). Задача — разработать упрощённый аналог, демонстрирующий базовые принципы работы таких систем: конкурентный доступ к данным, обработка множества сетевых подключений, простая коммуникация по протоколу.
3. Постановка задачи
Разработать сервер, который:
принимает TCP-подключения от произвольного числа клиентов одновременно;
хранит данные в оперативной памяти в виде пар "ключ-значение";
поддерживает базовый набор команд (SET, GET, DEL, возможно EXISTS, KEYS);
корректно обрабатывает конкурентный доступ к данным без потери целостности;
выдерживает нагрузочное тестирование с измерением производительности (запросов/сек, задержка).
4. Функциональные требования
FR1: Клиент подключается по TCP и отправляет текстовые команды
FR2: SET key value — сохранить пару
FR3: GET key — вернуть значение или "не найдено"
FR4: DEL key — удалить пару
FR5: Поддержка множества одновременных клиентских подключений
FR6 (опционально): TTL (время жизни ключа), персистентность на диск
5. Нефункциональные требования
NFR1: Сервер должен выдерживать не менее N одновременных подключений (например, 1000+) — конкретное число уточняется на этапе тестирования
NFR2: Среднее время ответа на запрос — не более X мс под нагрузкой
NFR3: Отсутствие гонок данных (data race) при конкурентном доступе
NFR4: Устойчивость к некорректным командам (не должен падать)
6. Технологический стек
Язык: Rust
Асинхронный рантайм / сеть: tokio (обработка TCP-соединений)
Хранилище: in-memory, HashMap внутри Arc<Mutex<>> или DashMap (конкурентная хэш-таблица) — обсудим на этапе архитектуры
База данных: не требуется (хранение только в памяти); опционально — простая сериализация на диск (serde + JSON/бинарный формат) для персистентности
Тестирование нагрузки: собственный скрипт-клиент на Rust, либо готовый инструмент (redis-benchmark-подобный самописный, либо wrk/hey если сервер получит HTTP-обвязку)
7. Результат (deliverables)
Исходный код сервера
Простой клиент для ручной проверки (или инструкция по подключению через netcat/telnet)
Скрипт нагрузочного тестирования
Отчёт с замерами производительности (RPS, latency при разном числе потоков/подключений)