Система состоит из двух основных компонентов:
- Кеш-сервер - хранит данные в памяти
- Шлюз (Gateway) - распределяет запросы между несколькими кеш-серверами
Сервер запускается и становится доступен интерфейс для работы с кешем:
GET /- получить полный список данных из кешаGET /{key}- получить значение по ключуPUT /{key}- записать значение по ключуDELETE /{key}- удалить значение по ключу
Шлюз управляет несколькими кеш-серверами и распределяет между ними нагрузку:
GET /- получить список зарегистрированных кеш-серверовPUT /register- зарегистрировать кеш-сервер вручнуюDELETE /register- удалить кеш-сервер из спискаPOST /auto-register- автоматическая регистрация кеш-сервераGET /{key}- получить значение по ключу (проксируется на один из кеш-серверов)PUT /{key}- записать значение по ключу (проксируется на один из кеш-серверов)DELETE /{key}- удалить значение по ключу (проксируется на один из кеш-серверов)
API шлюза документировано с использованием OpenAPI/Swagger. Для генерации актуальной схемы с учетом настроек окружения используйте скрипт:
php bin/generate-swagger.phpСкрипт создаст файл swagger.generated.yaml с актуальными настройками порта из переменной окружения GATEWAY_PORT.
- Скопируйте файл конфигурации:
cp .env-example .env- Настройте переменные окружения в файле
.env:
SERVER_PORT=80 # Порт для кеш-сервера
GATEWAY_PORT=81 # Порт для шлюза- Запустите систему через Docker Compose:
docker-compose up -dДля тестирования API можно использовать сгенерированную Swagger схему с помощью инструментов:
- Swagger UI
- Postman
- curl
Пример запроса к API:
# Получение списка серверов
curl http://localhost:81/
# Регистрация нового сервера
curl -X PUT http://localhost:81/register -H "Content-Type: application/json" -d '{"ip":"http://localhost:80"}'
# Сохранение значения
curl -X PUT http://localhost:81/test-key -d "test-value"
# Получение значения
curl http://localhost:81/test-key- Кеш-серверы автоматически регистрируются в шлюзе при запуске
- При завершении работы кеш-сервер автоматически отключается от шлюза
- Шлюз равномерно распределяет запросы между кеш-серверами на основе хеша ключа
- Система поддерживает горизонтальное масштабирование - можно добавлять новые кеш-серверы без остановки
# Запись значения
curl -X PUT http://localhost:81/my-key -d "my-value"
# Чтение значения
curl http://localhost:81/my-key
# Удаление значения
curl -X DELETE http://localhost:81/my-key# Запись значения
curl -X PUT http://localhost:80/my-key -d "my-value"
# Чтение значения
curl http://localhost:80/my-key
# Удаление значения
curl -X DELETE http://localhost:80/my-keyphp bin/gateway/app.phpphp bin/server/app.php --port 778
php bin/server/app.php --port 779
php bin/server/app.php --port 780