Чвор аутоматско-откривање
cTrader CLI чворови придружи кластер по само-регистрирање + пулс — не ручна унос. Исти обрасца као Consul/Nomad/kubeadm агенти: агент буте знајући главни чвор локација + дељена кластер тајна, тада континуумно оглашава себе.
Верификовано крај-у-крај на Docker Compose и
kindKubernetes кластер: агенти само-регистрирају, појављују у 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. Прво позови создаје чвор (NodeRegisteredferdinand); касније позива освежи живост. Наставили пулс после прекид флипс чвор назад достижна (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:
| Кључ | Подразумевано | Значење |
|---|---|---|
Enabled | false | Главни прекидач за регистрирање крајњу тачку + монитор. |
JoinToken | — | Дељена кластер тајна (≥ 32 знакови) агенти мора презента. |
HeartbeatTtl | 00:01:30 | Милост пред тихо чвор означена недостижна. |
InstanceReclaimGrace | 00:01:00 | Додатно маржа минуло HeartbeatTtl пред стремда инстанца на недостижна чвор је захтева (неуспешна). |
MonitorInterval | 00:00:30 | Колико често монитор и инстанца-reclaimer метла. |
HeartbeatInterval | 00:00:30 | Вредност враћена агенти као предложена каденца. |
Агент (CtraderCliNode) — NodeAgent:
| Кључ | Значење |
|---|---|
MainUrl | База URL главни чвор. Празно = ручна регистрирање режим (петља не-оп). |
AdvertiseUrl | URL главни користи достићи ово агент. |
NodeName | Јединствено име; подразумевано машина име ако празно. |
Mode | Run / 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 видљивост.