Appearance
Масштабирование
Gateway
Для увеличения пропускной способности системы, можно создать несколько входных точек (gateway). Каждому такому сервису в конфиге или env необходимо задать порядковый номер. Номера должны начинаться с 1. Пример для env: POTENTIAL_GATEWAY_SERVICE_INSTANCE_NUMBER=1
Пример docker-compose.yml с двумя gateway.
yaml
services:
gateway-1:
image: nextbox-docker.ptnl.moscow/nextbox/gateway:elder
restart: always
networks:
- nextbox
environment:
- POTENTIAL_GATEWAY_DATABASE_DSN=postgres://nextbox:nextbox@postgresql:5432/gateway_1
- POTENTIAL_GATEWAY_RABBIT_MQ_HOST=rabbitmq
- POTENTIAL_GATEWAY_HTTP_PORT=9690
- POTENTIAL_GATEWAY_DISCOVERY_URL=http://discovery:6011
- POTENTIAL_GATEWAY_SERVICE_BACK_URL=http://gateway-1:9690
- POTENTIAL_GATEWAY_SERVICE_INSTANCE_NUMBER=1
- POTENTIAL_GATEWAY_REDIS_HOST=redis
gateway-2:
image: nextbox-docker.ptnl.moscow/nextbox/gateway:elder
restart: always
networks:
- nextbox
environment:
- POTENTIAL_GATEWAY_DATABASE_DSN=postgres://nextbox:nextbox@postgresql:5432/gateway_2
- POTENTIAL_GATEWAY_RABBIT_MQ_HOST=rabbitmq
- POTENTIAL_GATEWAY_HTTP_PORT=9690
- POTENTIAL_GATEWAY_DISCOVERY_URL=http://discovery:6011
- POTENTIAL_GATEWAY_SERVICE_BACK_URL=http://gateway-2:9690
- POTENTIAL_GATEWAY_SERVICE_INSTANCE_NUMBER=2
- POTENTIAL_GATEWAY_REDIS_HOST=redis
Теперь в основном конфиге nginx можно добавить upstream с адресами гейтвеев.
nginx
upstream gateway_upstream {
server gateway-1:9690;
server gateway-2:9690;
}
location /api/ {
proxy_pass http://gateway_upstream/api/;
#...
}
File storage
Для ускорения и увеличения размера хранилище можно отмасштабировать систему этим способом. Файловое хранилище состоит из трех со зависимых сервисов
- file_storage - отвечает за хранение метаинформации
- file_storage_worker - хранит непосредственно сами файлы или проксирует запросы в s3 (зависит от выбранного режима работы)
- file_storage_router - проксирует запросы и делает необходимые проверки для доступа к операциям связанными с файлами
file_storage_worker и file_storage_router могут масштабироваться. Для этого необходимо каждому сервису задать порядковый номер, пример для docker-compose:
yaml
services:
file-storage-router-1:
image: nextbox-docker.ptnl.moscow/nextbox/file_storage_router:elder
restart: always
networks:
- nextbox
environment:
- POTENTIAL_FILE_STORAGE_ROUTER_SERVICE_BACK_URL=http://file-storage-router-1:6004
- POTENTIAL_FILE_STORAGE_ROUTER_DISCOVERY_URL=http://discovery:6011
- POTENTIAL_FILE_STORAGE_ROUTER_RABBIT_MQ_HOST=rabbitmq
- POTENTIAL_FILE_STORAGE_ROUTER_FILE_SYSTEM_TMP=/usr/share/nextbox/tmp
- POTENTIAL_FILE_STORAGE_ROUTER_REDIS_HOST=redis
- POTENTIAL_FILE_STORAGE_ROUTER_SERVICE_INSTANCE_NUMBER=1
file-storage-router-2:
image: nextbox-docker.ptnl.moscow/nextbox/file_storage_router:elder
restart: always
networks:
- nextbox
environment:
- POTENTIAL_FILE_STORAGE_ROUTER_SERVICE_BACK_URL=http://file-storage-router-2:6004
- POTENTIAL_FILE_STORAGE_ROUTER_DISCOVERY_URL=http://discovery:6011
- POTENTIAL_FILE_STORAGE_ROUTER_RABBIT_MQ_HOST=rabbitmq
- POTENTIAL_FILE_STORAGE_ROUTER_FILE_SYSTEM_TMP=/usr/share/nextbox/tmp
- POTENTIAL_FILE_STORAGE_ROUTER_REDIS_HOST=redis
- POTENTIAL_FILE_STORAGE_ROUTER_SERVICE_INSTANCE_NUMBER=2
file-storage-worker-1:
image: nextbox-docker.ptnl.moscow/nextbox/file-storage-worker-1:elder
restart: always
networks:
- nextbox
volumes:
- storage_data_1:/var/nextbox/storage_worker/1
environment:
- POTENTIAL_FILE_STORAGE_WORKER_SERVICE_BACK_URL=http://file-storage-worker-2:6004
- POTENTIAL_FILE_STORAGE_WORKER_DISCOVERY_URL=http://discovery:6011
- POTENTIAL_FILE_STORAGE_WORKER_RABBIT_MQ_HOST=rabbitmq
- POTENTIAL_FILE_STORAGE_WORKER_SERVICE_INSTANCE_NUMBER=1
file-storage-worker-2:
image: nextbox-docker.ptnl.moscow/nextbox/file-storage-worker-2:elder
restart: always
networks:
- nextbox
volumes:
- storage_data_2:/var/nextbox/storage_worker/2
environment:
- POTENTIAL_FILE_STORAGE_WORKER_SERVICE_BACK_URL=http://file-storage-worker-2:6004
- POTENTIAL_FILE_STORAGE_WORKER_DISCOVERY_URL=http://discovery:6011
- POTENTIAL_FILE_STORAGE_WORKER_RABBIT_MQ_HOST=rabbitmq
- POTENTIAL_FILE_STORAGE_WORKER_SERVICE_INSTANCE_NUMBER=2
В такой конфигурации запрос с гейтвея будет по алгоритму Round Robin попадать в один из file_storage_router. Далее из текущего file_storage_router по алгоритму Round Robin попадать в один из file_storage_worker.