Пређи на главни садржај

Чвор аутоматско-откривање

cTrader CLI чворови придружи кластер по само-регистрирање + пулс — не ручна унос. Исти обрасца као Consul/Nomad/kubeadm агенти: агент буте знајући главни чвор локација + дељена кластер тајна, тада континуумно оглашава себе.

Верификовано крај-у-крај на Docker Compose и kind Kubernetes кластер: агенти само-регистрирају, појављују у DB достижна, аутоматско-означена недостижна када пулс стане минуло TTL, враћа на мрежи када наставити.

Како то функционише​

CtraderCliNode агент Главни (Web)
------------------ ----------
POST /api/nodes/register ── придружи токен ──▶ верификована токен (константа-време)
{ име, baseUrl, режим, верификована протокол верзија
maxInstances, dataDir, уверени CtraderCliNode по име
protocolVersion } печат LastHeartbeatAt, IsReachable=true
▲ └─ CtraderCliNode.SelfRegister / RecordHeartbeat
│ свака HeartbeatInterval NodeHeartbeatMonitor (позадина):
└──────────────────────────────────── ако сада - LastHeartbeatAt > HeartbeatTtl
→ CtraderCliNode.MarkUnreachable() (NodeWentOffline)
  • Регистрирање == пулс. Агент обновити-POSTs на HeartbeatIntervalSeconds. Прво позови создаје чвор (NodeRegistered ferdinand); касније позива освежи живост. Наставили пулс после прекид флипс чвор назад достижна (NodeCameOnline).
  • Живост помирба. NodeHeartbeatMonitor означава чворови чије последња пулс превишне HeartbeatTtl недостижна. Планирач (IsActive/AcceptsRun/AcceptsBacktest гатирано на достижност) престаје стављање радни док не извести поново.
  • Осиромашена-инстанце захтева. NodeInstanceReclaimer (позадина) преласце било не-терминала инстанца стремда на недостижна чвор до Failed (FailureReason = "Node unreachable - instance reclaimed", InstanceFailed домена ferdinand → корисник обавештење), тако срушена/партиција чвор никад може оставити инстанца залегла "Running" заувек. Захтева само гори једном чвор последња пулс је затајена минуло HeartbeatTtl + InstanceReclaimGrace, давање кратак-брљот шансу опоравити прво. Захтева трчи нису аутоматско-re-scheduled: партиција-али-живо чвор може дакле бити извршавања контејнер и тамо је не контејнер-нивоа плачећи, тако обновити иска двоструко извршавања — корисник рестарт захтевана трчи намерно. Тестови само-изход, тако захтевана тест је једноставно обновити.
  • Идентичност је чвор име. Главни уверени од NodeName, тако под чији IP/URL промена на рестарт задржава идентичност, обновити-регистрирање нова AdvertiseUrl.
  • Режим фиксна на прво регистрирање. Чвор режим (Run/Backtest/Mixed) је трајна врста, не могу промена на пулс; обновити-регистрирање са другачиј режим хоноран за живост али режим промена игнориран (записана као упозорење). До промена режима: избаци чвор, дозволи то обновити-регистрирање.

Конфигурација​

Главни (Web) — App:Discovery:

КључПодразумеваноЗначење
EnabledfalseГлавни прекидач за регистрирање крајњу тачку + монитор.
JoinToken—Дељена кластер тајна (≥ 32 знакови) агенти мора презента.
HeartbeatTtl00:01:30Милост пред тихо чвор означена недостижна.
InstanceReclaimGrace00:01:00Додатно маржа минуло HeartbeatTtl пред стремда инстанца на недостижна чвор је захтева (неуспешна).
MonitorInterval00:00:30Колико често монитор и инстанца-reclaimer метла.
HeartbeatInterval00:00:30Вредност враћена агенти као предложена каденца.

Агент (CtraderCliNode) — NodeAgent:

КључЗначење
MainUrlБаза URL главни чвор. Празно = ручна регистрирање режим (петља не-оп).
AdvertiseUrlURL главни користи достићи ово агент.
NodeNameЈединствено име; подразумевано машина име ако празно.
ModeRun / Backtest / Mixed.
MaxInstancesКапацитета узвик хоноран од планирач.
HeartbeatIntervalSecondsОбновити-регистрирање каденца.
JwtSecretМора равна главни JoinToken — обе регистрирање носач и опход JWT потписивање кључ.

Безбедност модел (v1)​

Аутоматско-регистрирани чворови деле jedan кластер тајна (JoinToken == сваки агент JwtSecret). Главни потписи свака опход захтева као 5-минута HS256 JWT са то тајна; агент валидира. Захтевци:

  • Задржи JoinToken ≥ 32 знакови и ротирај то (освежи главни App:Discovery:JoinToken и сваки агент NodeAgent:JwtSecret заједно).
  • Заврши TLS унапред главни и агенти у производњи (обрни прокси / улаз).
  • Агент дакле само трчи слике одговарајућа AllowedImagePrefix.

Оковање следе-горе (не v1): издање јединствено по-чвор тајна на регистрирање (kubeadm-стил начин за стартање → по-чвор верификовања) тако једна угрожена агент не могу ковать опход токени за вршњаци. Регистрирање ток већ враћа одговор телу — природна место додати назад монета по-чвор тајна.

Ручна чворови дакле радови​

POST /api/nodes (администратор UI) наставља регистрирање прибиљене чворови са сопствено по-чвор тајна. Откривање је допунски.

Беларабежена развој могу скрити ручна контроле (или цела Nodes површина) и ослањање управо на аутоматско-откривање: App:Branding:NodesUi=Monitor капље ручна додај/избаци, Hidden уклања навигацију, страна и ручна API, и App:Branding:RestrictNodesToOwner подови површина на власник-само. Само-регистрирање + пулс крајњу тачку овде је неутичајно у сваки режим. Видити Беларабежена → Чворови UI видљивост.