Ugrás a fő tartalomhoz

Méretezés

Alapértelmezés szerint az IntraCord API-tároló egyetlen uvicorn-munkavégzőt futtat. Éles forgalom esetén – különösen sok egyidejű hanghívás (hosszú élettartamú WebSocket) esetén – több dolgozóra lesz szüksége. Az IntraCord ehhez beépített támogatással érkezik: az nginx terheléselosztja N független uvicorn folyamatot a least_conn stratégia használatával.

Ez az oldal bemutatja, hogyan működik a több dolgozós beállítás, hogyan válasszuk ki a dolgozók számát a telepítéskor, és hogyan módosítsuk azt futó stackben.

Hogyan működik

Az API konténer FASTAPI_WORKERS különálló uvicorn folyamatokat indít el, amelyek mindegyike a saját portjához van kötve (8000, 8001, 8002, …). Az nginx egyetlen upstream IntraCord_api-t tesz közzé, amely magában foglalja az összes dolgozói portot, és arra irányítja az új kéréseket, amelyik jelenleg a legkevesebb aktív kapcsolattal rendelkezik.

┌───────────────────────────────────┐
│ api container │
│ uvicorn worker 0 → :8000 │
browser ──► nginx ──► │ uvicorn worker 1 → :8001 │
(443) (least_conn) uvicorn worker 2 → :8002 │
│ uvicorn worker 3 → :8003 │
└───────────────────────────────────┘

Az API-tárolón belüli ari_manager és campaign_orchestrator folyamatok egyesek maradnak, függetlenül a FASTAPI_WORKERS-től – koordinálják a globális állapotot (Csillag csatornák, kampányütemezés), és nem szabad duplikálni őket. Az ARQ háttérmunkásait külön a ARQ_WORKERS vezérli.

A dolgozók számának kiválasztása

A biztonságos kiindulási pont egy dolgozó minden rendelkezésre álló vCPU-nként, legfeljebb 8, hacsak nem profilozta a munkaterhelését. A Remote Server Deployment előfeltételei legalább 4 vCPU-t igényel, tehát:

vCPU-kJavasolt FASTAPI_WORKERS
44
86–8
16+profil első

Minden dolgozó saját Python-folyamattal és memóriával rendelkezik – a költségvetés körülbelül 300–500 MB RAM dolgozónként a postgres/redis/minio többletköltségen felül. Ha közel jár a 8 GB RAM minimumához, és OOM-okat lát, csökkentse a dolgozók számát, mielőtt továbbiakat adna hozzá.

A dolgozók számának beállítása a telepítéskor

A setup_remote.sh kéri a dolgozók számát a másik konfiguráció mellett:

Number of FastAPI workers (uvicorn processes nginx will load-balance):
[4]:

Nyomja meg az Entert az alapértelmezett értékhez (4), vagy írjon be egy másik pozitív egész számot. A nem interaktív hívók (cloud-init, CI, Terraform) ehelyett környezeti változón keresztül állíthatják be az értéket:

sudo SERVER_IP=... TURN_SECRET=... FASTAPI_WORKERS=8 ./setup_remote.sh

A szkript az értéket .env (FASTAPI_WORKERS=N) formában tárolja. A támogatott indítási útvonal (./remote_up.sh) minden távoli indítás előtt előfutja a IntraCord-init renderelést ettől az értéktől, így az nginx és az API-munkások száma összhangban marad.

A dolgozók számának módosítása futó stackben

Ha az IntraCord fut, a dolgozók számának növelése vagy csökkentése egy fájl szerkesztése és újraindítása. Módosítsa a .env elemet, majd kezdje el a ./remote_up.sh-vel, így a IntraCord-init újragenerálja az nginx futásidejű konfigurációját, mielőtt a Docker elindítja a stacket.

Lépések

Minden parancs a IntraCord/ könyvtárából fut (a docker-compose.yaml-vel rendelkező könyvtárból).

1. A .env szerkesztése és a FASTAPI_WORKERS sor módosítása:

# Before
FASTAPI_WORKERS=4

# After
FASTAPI_WORKERS=8

2. Hozza létre újra a stacket az ellenőrzött wrapper scripttel. A legegyszerűbb út – rövid állásidő, meglepetések nélkül:

./remote_up.sh

Ha el szeretné kerülni az állásidőt, és a stack egészséges, csak a api és nginx konténereket hozhatja újra:

./remote_up.sh -- api nginx

A remote_up.sh ellenőrzi a .env-t, ugyanazt a IntraCord-init renderelést futtatja, amelyet a Compose az indításkor használ, futtatja a docker compose config -q fájlt, majd elindítja a kért szolgáltatásokat.

3. Ellenőrizze. Győződjön meg arról, hogy a megfelelő számú uvicorn folyamat fut. Az API-kép vékony, és nem tartalmazza a ps-t, ezért használja inkább a Docker gazdagépoldali nézetét:

sudo docker compose --profile remote top api | grep uvicorn

Dolgozónként egy sort kell látnia. A kötött portok megerősítéséhez ellenőrizze az indítási naplókat – minden dolgozó naplóz egy Uvicorn running on http://0.0.0.0:800X sort a rendszerindításkor:

sudo docker compose --profile remote logs api | grep "Uvicorn running"

Ezután nyomja meg az API-t az nginx-en keresztül, hogy megbizonyosodjon arról, hogy a kérések továbbra is folynak:

curl -k https://YOUR_SERVER_IP/api/v1/health

Miért nem futja újra a setup_remote.sh-t?

A setup_remote.sh nem hajlandó felülírni egy meglévő telepítést – az újbóli futtatása újragenerálja a OSS_JWT_SECRET-t (mindenki kijelentkezése), visszaállítja a TURN megosztott titkát (megtöri a WebRTC hitelesítést a csatlakoztatott klienseken), és újragenerálja az SSL-tanúsítványokat. A fenti kétfájlos szerkesztés a támogatott módja a dolgozók számának telepítés utáni módosításának.

Ha valóban tiszta újratelepítést szeretne, tekintse meg a szkriptben dokumentált IntraCord_FORCE_OVERWRITE=1 menekülési nyílást.

Amit ez nem skáláz

A többmunkás mód méretezi a HTTP/WebSocket API felületet. nem skálázza:

  • ARQ háttérmunkások — a ARQ_WORKERS vezérli (alapértelmezett: 1). Növelje ezt az API-tároló környezetében, ha a háttérfeladatsor biztonsági másolatot készít.
  • ari_manager / campaign_orchestrator — egyszemélyes kivitel; nem profitálnak az extra folyamatokból.
  • Postgres, Redis, MinIO – mindegyik egyetlen tárolóként fut a stackben. A termelési léptékű Postgres esetében egy felügyelt szolgáltatást kell futtatnia, és rá kell mutatnia a DATABASE_URL-re; ugyanez vonatkozik a Redis és S3-kompatibilis tárolókra is.

A többgépes vízszintes skálázáshoz — amikor külön API-konténerek futnak több gépen — lásd az Egyéni domain útmutató több gép elé helyezett terheléselosztó mintáját. Ez ugyanaz az elv, mint a konténeren belüli least_conn upstream, csak egy réteggel feljebb.