Skip to content

Green-Chan/afina

This branch is 35 commits ahead of, 4 commits behind xphoenix/afina:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

25d7a59 · May 29, 2020

History

58 Commits
Sep 12, 2018
May 18, 2020
Sep 12, 2018
Sep 12, 2018
May 18, 2020
Mar 26, 2020
Apr 15, 2020
Sep 12, 2018
Sep 12, 2018
Sep 12, 2018
Sep 12, 2018
Sep 12, 2018
Feb 16, 2019

Repository files navigation

afina

Simple caching server

Проект создан для курса по многопоточному программированию в Техносфере

Telegram - obsolote

https://t.me/spheremt В связи с героической смертью сервиса принимаем предложения на тему, где-бы создать группу для общения...

Components

Сервер состоит из компонент, каждый в виде отдельной статической библиотеки:

  • Allocator (include/afina/allocator/, src/allocator): менеджер памяти
  • Storage (include/afina/Storage.h, src/storage): хранилище данных
  • Execute (include/afina/execute/, src/execute/): комманды, сервер создает экземпляры комманд на основе сообщений из сети и применяет их над заданным хранилищем
  • Network (src/network/): сетевой слой, реализует подмножество memcached текстового протокола

How to build

Для сборки нужен cmake >= 3.0.1, gcc > 4.9 и ядро 4.5+. Система сборки автоматически использует ccache если последний найден в системе:

[user@domain afina] mkdir build
[user@domain afina] cd build
[user@domain build] cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=y -DECM_ENABLE_SANITIZERS="memory,address" ..
[user@domain build] make

Сервер:

[user@domain build] ./src/afina

Поддерживает следующий опции:

  • --network <st_block, mt_block, non_block> какую использовать реализацию сети
    • st_block: все в одном треде
    • mt_block: 1 тред на каждое соединение (домашка)
    • non_block: многопоточный epoll (домашка)
  • --storage <st_lru, mt_lru> какую реализацию хранилища использовать
    • st_lru: LRU без синхронизации (домашка)
    • mt_lru: LRU с глобальным локом (домашка)

Вот так можно отправить комманды:

echo -n -e "set foo 0 0 6\r\nfooval\r\n" | nc localhost 8080

обратите внимание на -e и -n

А вот тут подробнее про систему комманд: https://github.com/memcached/memcached/blob/master/doc/protocol.txt

Tests

make runExecuteTests && ./test/execute/runExecuteTests - собрать и запустить тесты комманд
make runProtocolTests && ./test/protocol/runProtocolTests - собрать и запустить тесты парсера memcached протокола
make runStorageTests && ./test/storage/runStorageTests - собрать и запустить тесты хранилиза данных

TODO

  • benchmarks
  • integration tests

About

Simple caching server

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 77.1%
  • C 11.4%
  • CMake 8.9%
  • Perl 2.0%
  • Other 0.6%