Skip to content

denis-korolev/php-async-cache-server

Repository files navigation

Кеширующий сервер на PHP с поддержкой масштабирования

Система состоит из двух основных компонентов:

  1. Кеш-сервер - хранит данные в памяти
  2. Шлюз (Gateway) - распределяет запросы между несколькими кеш-серверами

Компоненты системы

Кеш-сервер

Сервер запускается и становится доступен интерфейс для работы с кешем:

  • GET / - получить полный список данных из кеша
  • GET /{key} - получить значение по ключу
  • PUT /{key} - записать значение по ключу
  • DELETE /{key} - удалить значение по ключу

Шлюз (Gateway)

Шлюз управляет несколькими кеш-серверами и распределяет между ними нагрузку:

  • GET / - получить список зарегистрированных кеш-серверов
  • PUT /register - зарегистрировать кеш-сервер вручную
  • DELETE /register - удалить кеш-сервер из списка
  • POST /auto-register - автоматическая регистрация кеш-сервера
  • GET /{key} - получить значение по ключу (проксируется на один из кеш-серверов)
  • PUT /{key} - записать значение по ключу (проксируется на один из кеш-серверов)
  • DELETE /{key} - удалить значение по ключу (проксируется на один из кеш-серверов)

API Документация

API шлюза документировано с использованием OpenAPI/Swagger. Для генерации актуальной схемы с учетом настроек окружения используйте скрипт:

php bin/generate-swagger.php

Скрипт создаст файл swagger.generated.yaml с актуальными настройками порта из переменной окружения GATEWAY_PORT.

Запуск системы

  1. Скопируйте файл конфигурации:
cp .env-example .env
  1. Настройте переменные окружения в файле .env:
SERVER_PORT=80    # Порт для кеш-сервера
GATEWAY_PORT=81   # Порт для шлюза
  1. Запустите систему через 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-key

Запускаем сначала шлюз, потом сервер

Запуск шлюза

php bin/gateway/app.php

Запуск сервера

php bin/server/app.php --port 778
php bin/server/app.php --port 779
php bin/server/app.php --port 780

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors