From b2eb4f79a4776bb02f12fef8c450ae74603b73a7 Mon Sep 17 00:00:00 2001 From: iskanderbrat09 Date: Mon, 14 Sep 2026 20:20:51 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82=D1=8C=20?= =?UTF-8?q?=D0=A2=D0=B5=D1=85.=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Тех.задание | 73 ----------------------------------------------------- 1 file changed, 73 deletions(-) delete mode 100644 Тех.задание diff --git a/Тех.задание b/Тех.задание deleted file mode 100644 index 1b4e61d..0000000 --- a/Тех.задание +++ /dev/null @@ -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. Есть отчет с результатами нагрузочного тестирования