Skip to content

Масштабирование

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.