Конфигурационный сервер - приложение для обмена информацией между компонентами распределенной системы. Позволяет считывать и изменять информацию о текущих настройках и состоянии каждого из компонентов. Включает:
- серверное приложение
- протокол обмена данными
- тестовое клиентское приложение
Модель доступа к данным:
- доступ к данным представлен в виде дерева
- каждый элемент дерева имеет свое строковое имя
- имя уникально в рамках одного уровня иерархии
- имя не может содержать символ /
- имя не может быть пустым, кроме корня всего дерева
- каждый элемент может иметь дочерние элементы
- элементы адресуются ключом
- ключ элементов верхнего уровня дерева представлен в виде /node_name
- ключ вложенных элементов состоит из имен всех элементов от корневого до конечного: /parent/child/param1
- каждый элемент может хранить значение в виде строки
- значение всегда присутствует. При установке значения null значение устанавливается в “”
Все операции атомарны: либо выполняются успешно, либо данные остаются неизменными + возвращается ошибка
create(string key) создать элемент с ключом key и пустым значением
remove(string key) удалить элемент с ключом key если указанный элемент отсутствует - выбрасывается исключение при удалении элемента все его дочерние элементы также удаляются
bool exists(string key) проверить, существует ли элемент с ключом key
string get(string key) считать значение по ключу key если указанный элемент отсутствует - выбрасывается исключение
set(string key, string value) установить значение элемента по ключу key в value если указанный элемент отсутствует - выбрасывается исключение
list children(string key) получить список имен дочерних элементов с ключом key, упорядоченных по имени ключа если указанный элемент отсутствует - выбрасывается исключение
- работа в высококонкурентной среде
- многопоточное обслуживание запросов
- время отклика одиночного запроса (< 5 мс)
- число одновременных подключений: (до 500)
- сетевой протокол (Thrift)
- язык реализации: (java)
- целевая платформа: (любые поддерживаемые JVM)
- среда сборки (maven)
- журналирование
- конфигурируемый пул соединений/потоков
- покрытие тестами:
- юнит тесты
- нагрузочные тесты
- сохранение состояния между запусками (JSON)
- временный элемент: исчезает автоматически, если значение было установлено более N мс назад (Timer?)
- упорядоченность: все запросы от одного клиента применяются в том порядке, в каком они были вызваны (TimeStamp)
- интерфейс просмотра данных (REST, встроенный Web-сервер)
- оповещения при изменении элемента: Thrift + клиентская библиотека (шаблон Observer)
- работа в кластере + репликация данных между экземплярами