4.3 KiB
4.3 KiB
mevnode-bot overlay
To jest docelowy overlay dla runtime mevnode_bot.
Zakres:
postgreshasuratrade-frontend(NodePort 30081)dlob-redisdlob-publisher-hotdlob-publisher-alldlob-hot-redis-to-postgres-raw-writerdlob-hot-postgres-to-postgres-derived-writerdlob-all-redis-to-postgres-derived-writer
Założenia runtime:
mevnode_solwystawia powg0:RPC:http://10.91.0.1:8899WS:ws://10.91.0.1:8900Yellowstone:http://10.91.0.1:10000
mevnode_boturuchamia tylko warstwę aplikacyjną.trade-frontendjest wystawiany przezNodePort 30081.- Namespace pozostaje
trade-staging.
Topologia DLOB w tym overlayu:
dlob-publisher-hotto hot-path na wybrane markety (PERP_MARKETS_TO_LOAD=0,20,72, czyliSOL-PERP,JTO-PERP,ADA-PERP) i prefix RedisDLOB_HOT(dlob-hot:).dlob-publisher-allto szeroki feed do wszystkich marketów na prefix RedisDLOB_ALL(dlob-all:).dlob-hot-redis-to-postgres-raw-writerto schema-first writer: czytadlob-hot:z Redis i zapisuje kanoniczny raw DLOB do PostgreSQL (dlob_hot_snapshot_latest,dlob_hot_snapshot_ts).dlob-hot-postgres-to-postgres-derived-writerczyta raw hot z PostgreSQL i buduje normalized layer (dlob_hot_derived_latest,dlob_hot_derived_ts).LIVEnak3s: sciezkahotjest juz aktywna jakoRedis -> raw PG -> derived PG.dlob-publisher-allcelowo nie ma patcha persistent store, żeby nie dublowac zapisow do Postgresa.dlob-all-redis-to-postgres-derived-writerzapisuje dlaalltylko warstwe pochodna do PostgreSQL; bezraw_ts, zeby nie zjadac dysku w kilka dni.LIVEnak3s: sciezkaalljest aktywna jakoRedis -> derived PG.allzapisuje pelnederived_tsdla wszystkich marketow zdlob-all:*, bez samplingu i bez shortlisty marketow.
Planowany zakres zapisu dla all:
- tozsamosc i czas:
source,market_type,market_index,market_name,is_indicative,event_ts/ts_ms,slot,market_slot - cena i mikrostruktura:
mark_price,oracle_price,best_bid_price,best_ask_price,mid_price,spread_quote,spread_bps - plynnosc:
depth_levels,bid_levels,ask_levels,top_bid_size,top_ask_size,top_bid_notional,top_ask_notional,depth_bid_base,depth_ask_base,depth_bid_quote,depth_ask_quote,imbalance - drabinka do modelu/UI:
bids_norm,asks_normjako top10leveli z polamiprice,sizeBase,notional,sources - kontrola jakosci i dedupe:
raw_payload_hash,updated_at/inserted_at - celowo pomijamy: pelny
raw payload,raw latest,raw ts,L3,best_makers
Polityka hot vs all:
hotiallrozniamy po roli operacyjnej, nie po samym mechanizmie subskrypcji.hot=dlob-publisher-hot: subset marketow, najnizsza latencja, najwyzszy priorytet operacyjny.all=dlob-publisher-all: pelne pokrycie marketow, feed do coverage/read-side/analityki, nizszy priorytet operacyjny nizhot.USE_ORDER_SUBSCRIBER=truemoze byc wlaczone na obu publisherach; to nie definiuje rolihotvsall.hotpowinien byc broniony jako pierwszy przy problemach z CPU/RAM/RPC i nie powinien byc degradowany przedall.- Jesli trzeba ograniczac load albo robic fallback, najpierw
degradujemy
all, dopiero potemhot.
Zalecana polityka runtime:
hot: utrzymywacOrderSubscriber + gRPCjako sciezke docelowa.all: domyslnie tezOrderSubscriber + gRPC, ale to pierwszy kandydat do przejscia na slabszy tryb przy presji zasobow.- Kolejnosc degradacji dla
all:gRPC -> websocket -> polling. - Wylaczenie
USE_ORDER_SUBSCRIBERtraktowac jako tryb awaryjny/testowy, nie jako stan docelowy.
Wymagane sekrety:
trade-postgrestrade-hasuratrade-frontend-tokenstrade-dlob-rpc
Opcjonalne:
gitea-registrynie jest tu wymagane, bo overlay czyściimagePullSecrets.
Uwagi:
- Overlay zastępuje lokalny
_tmp/bot-rx-stack. trade-deploy/kustomize/overlays/mevnode-botjest teraz źródłem prawdy dla runtimemevnode_bot.- Ten overlay nadal korzysta z plików z
../../basewconfigMapGenerator, więc przy lokalnymkustomizemoże być potrzebne:
sudo k3s kubectl kustomize trade-deploy/kustomize/overlays/mevnode-bot --load-restrictor LoadRestrictionsNone | sudo k3s kubectl apply -f -