КС:2015:Проект:Memcached
Содержание
Ментор
Ментор -- Татьяна Сергеевна Борисова. e-mail: tanyatik@yandex.ru Аккаунты в GIT-сервисах:
https://github.com/tanyatik/ https://bitbucket.org/tanyatik/
Что это за проект
Введение
Memcached -- распределенная система кеширования объектов в памяти, предназначенная для ускорения веб-приложений за счет ослабления нагрузки на базу данных. Memcached представляет интерфейс ключ-значение (key-value) -- данные идентифицируются по ключу. Memcached использует LRU политику вытеснения записей. Подробности можно прочитать здесь https://code.google.com/p/memcached/wiki/NewStart?tm=6 и здесь https://ru.wikipedia.org/wiki/Memcached .
Github-репозиторий с конспектами семинаров находится здесь https://github.com/tanyatik/hseos-project/tree/master/memcached/sem01 .
Что требуется
Требуется сделать сервер, реализующий текстовый протокол Memcached, совместимый с существующими клиентами memcached.
Чему вы научитесь
Сетевому и многопоточному программированию под Linux.
Начальные требования
1. Владение техническим английским языком.
2. Умение разрабатывать программы на Cи или C++.
Критерии оценивания
Требования на зачет к 1 контрольной точке (24 октября 2015)
Необходимо иметь приватный git-репозиторий с проектом, в который приглашен ментор с правами администратора. Приватные репозитории на bitbucket доступны для всех. Приватные репозитории на github бесплатны для студентов, подробности здесь https://education.github.com/pack
В репозитории должно быть:
1. Файл README.md: фамилия и имя студента, а также краткое описание проекта, написанное самостоятельно;
2. Скелет реализации (который был дан для задания 2, смотри https://github.com/tanyatik/hseos-project/tree/master/memcached/project , нужно положить все файлы оттуда в корень репозитория)
3. Файл server.cpp , созданный для задания 1 (можно пока нерабочий).
Требования на зачет к 2 контрольной точке (21 ноября 2015)
Необходимо реализовать:
1. Сетевое взаимодействие для сервера (без параллельной обработки соединений).
2. Протокол memcached (обработка команд, в качестве результата можно выдавать заглушку).
Этому соответствуют задания 2, 3 и 4, данные на семинарах.
ДляLRU кеша можно использовать заглушку.
Дедлайн сдачи проекта 19 ноября 2015
Что должно быть в README:
1. Фамилия и имя студента.
2. Описание проекта (своими словами)
3. Описание того, что вы сделали, и на сколько баллов претендуете. Выпишите все пункты! То, что вы не напишете, может оказаться не проверено.
4. Параграф про LRU кеш. Должен быть описан алгоритм работы кеша, получившаяся асимптотика для всех операций и замеры производительности кеша для разного количества операций, экспериментально подтверждающие асимптотику.
5. Параграф про нагрузочное тестирование при помощи memaslap. Должны быть описаны параметры, с которыми вы запускали memaslap и получившиеся результаты. Приветствуется скриншот.
http://docs.libmemcached.org/bin/memaslap.html
Итоговая оценка
- 4 балла. Сервер способен выполнять команды "set", "add", "get", "delete". Реализован LRU кеш.
- 6 балла. Требования на 4 балла + Сервер совместим с существующими клиентами memcached. Сервер способен выполнять до 10 подключений одновременно.
- 8 баллов. Требования на 6 баллов + Сервер способен обработать до 1000 подключений одновременно.
- +1 балл. Поддержка опций -d, -m.
- +1 балл. Асимптотика O(1) для выполнения операций в классе Cache.
- +1 балл. Реализация чтения параметров из конфига (порт, объем кеша, другие настройки на ваш выбор). Формат конфига может быть любым.
- +1 балл. Остановка сервера.
- +0.5 баллов за каждую команду. Реализация команд "replace", "append", "prepend", "touch", "incr", "decr".
- +1 балл за каждую команду. Реализация команд "cas", "flush_all".
- +2 балла. Реализация команды "stats" (последнюю как минимум для подмножества "pid", "uptime", "time", "rusage_user", "rusage_system", "curr_items", "total_items", "bytes", а также для всех реализованных команд).
- +2 балла. Реализация ThreadPool.
- +5 балла. Реализация бинарного протокола в дополнение к текстовому (не рассматривается на семинаре).
- +5 баллов. Реализация асинхронной обработки соединений (не рассматривается на семинаре).