4.0 KiB
3700X jako drugi bare metal dla Drift perps
Ten dokument opisuje sensowną rolę drugiego hosta:
AMD Ryzen 7 3700X128 GB RAM2 x 1 TB NVMe1 Gbps
W tym układzie zakładamy, że:
- host
9950Xrobi tylkoAgave + Yellowstone Geyser, - host
3700Xrobiconsumer + processing + lekka/umiarkowana baza, - komunikacja między hostami idzie po prywatnej sieci
(
private VLANalbo późniejwg0).
Cel
Rozdzielić role:
9950X: ingest danych z Solany, bez ciężkiej obróbki3700X: odbiór streamu, dekodowanie Drift, budowa DLOB, zapis pochodnych danych, API i worker-y
To zmniejsza ryzyko, że:
- baza danych,
- parser,
- albo batch/worker
zwiększą lag walidatora.
Co uruchamiać na 3700X
Tak:
- Yellowstone gRPC consumer
- parser Drift
- cache stanu w RAM
- worker-y realtime
- Redis / NATS / lekka kolejka
- Postgres o umiarkowanej skali
- read-only API / query layer
- monitoring
Nie:
agave-validator- ciężkie historyczne archiwum raw streamu
- duży ClickHouse na start
- wszystko naraz bez limitów retencji
Układ usług
Przepływ:
9950XuruchamiaAgave + Geyser plugin3700Xłączy się po prywatnym adresie dogRPC- consumer odbiera tylko potrzebny scope Drift
- parser buduje lokalny stan
- do DB trafiają tylko dane pochodne i potrzebne eventy
Model:
- host A = producer
- host B = consumer + processing
Dyski
Najprostszy podział:
nvme0:- system
- Docker
- binarki
- cache buildów
nvme1:- dane consumera
- Postgres
- logi aplikacyjne
- kolejki / spool
Filesystem:
ext4na obu dyskach
Minimalny scope Yellowstone pod Drift perps
Na start nie streamuj całej Solany. Dla Drift perps minimalny sensowny zakres to:
slotstransactionstylko dla programu Driftaccountsdla kont Drift potrzebnych do stanu rynku i userów
Konta i strumienie
Na start streamuj:
StatePerpMarketAccountdla wybranych rynkówSpotMarketAccountpotrzebne do collateral / quoteUserAccount
Powód:
- Drift trzyma zlecenia i pozycje w
UserAccount - lokalny
DLOBbuduje się właśnie zUserAccount PerpMarketAccountdaje stan rynkuSpotMarketAccountjest potrzebny dla cross-margin
Filtry v1
Najrozsądniejsza wersja startowa:
slots: włączonetransactions:account_include = [Drift Program ID]- bez vote tx
accounts:- exact accounts dla
Statei marketów UserAccountdla programu Drift
- exact accounts dla
Jeśli interesują Cię tylko wybrane rynki, np. SOL-PERP,
BTC-PERP, ETH-PERP, to:
- odbierasz
UserAccount, - po dekodzie odrzucasz userów bez pozycji i bez orderów na tych rynkach
To jest bezpieczniejsze operacyjnie niż próba zbyt agresywnego filtrowania przed dekodem.
Co liczyć po stronie consumera
W RAM trzymaj:
- cache
UserAccount - cache
PerpMarketAccount - cache
SpotMarketAccount - ostatni slot
Z tego licz:
- lokalny
DLOB - best bid / ask
- depth
- zmiany pozycji
- fills
- liquidations
- funding / mark / oracle impact
Do DB zapisuj:
- eventy biznesowe
- snapshoty pochodne
- agregaty
Nie zapisuj na start całego raw streamu 1:1.
Co daje taki układ
- mniejszy wpływ processingu na lag walidatora
- bezpieczny transport po prywatnej sieci
- prostsza diagnostyka
- możliwość restartu parsera bez ruszania noda
- łatwiejsze skalowanie w przyszłości
Ograniczenia 3700X
Ten host jest dobry jako:
- consumer node
- processing node
- umiarkowana DB
To nie jest idealny host pod:
- bardzo ciężki ClickHouse
- duże historyczne archiwum
- wiele ciężkich pipeline'ów naraz
Najbardziej ograniczą Cię:
1 Gbps- pojemność
2 x 1 TB - RAM przy większej retencji i większej liczbie workerów
Rekomendacja startowa
Na 3700X uruchom:
- Yellowstone consumer
- Drift parser
- Redis
- Postgres
- lekkie API
Na 9950X zostaw tylko:
AgaveGeyser
Najpierw uruchom zakres dla 2-3 rynków perp i dopiero potem rozszerzaj.
Powiązane dokumenty
doc/rpc/software-placement.mddoc/rpc/geyser-dlob.mddoc/dlob-services.md