Курсовой проект 2020 года курса "Highload системы" в Технополис.
Форкните проект, склонируйте и добавьте upstream:
$ git clone git@github.com:<username>/2020-highload-dht.git
Cloning into '2020-highload-dht'...
...
$ git remote add upstream git@github.com:polis-mail-ru/2020-highload-dht.git
$ git fetch upstream
From github.com:polis-mail-ru/2020-highload-dht
* [new branch] master -> upstream/master
Так можно запустить тесты:
$ ./gradlew test
А вот так -- сервер:
$ ./gradlew run
Откройте в IDE -- IntelliJ IDEA Community Edition нам будет достаточно.
ВНИМАНИЕ! При запуске тестов или сервера в IDE необходимо передавать Java опцию -Xmx256m.
В своём Java package ru.mail.polis.service.<username> реализуйте интерфейс Service и поддержите следующий HTTP REST API протокол:
- HTTP
GET /v0/entity?id=<ID>-- получить данные по ключу<ID>. Возвращает200 OKи данные или404 Not Found. - HTTP
PUT /v0/entity?id=<ID>-- создать/перезаписать (upsert) данные по ключу<ID>. Возвращает201 Created. - HTTP
DELETE /v0/entity?id=<ID>-- удалить данные по ключу<ID>. Возвращает202 Accepted.
Возвращайте реализацию интерфейса в ServiceFactory.
Реализацию DAO берём из весеннего курса 2020-db-lsm, либо запиливаем adapter к уже готовой реализации LSM с биндингами на Java (например, RocksDB, LevelDB или любой другой).
Проведите нагрузочное тестирование с помощью wrk в одно соединение.
Почему не curl/F5, можно узнать здесь и здесь.
Попрофилируйте (CPU и alloc) под нагрузкой с помощью async-profiler и проанализируйте результаты.
Продолжайте запускать тесты и исправлять ошибки, не забывая подтягивать новые тесты и фиксы из upstream.
Если заметите ошибку в upstream, заводите баг и присылайте pull request ;)
Когда всё будет готово, присылайте pull request со своей реализацией и оптимизациями на review. Не забывайте отвечать на комментарии в PR (в том числе автоматизированные) и исправлять замечания!