Tor düwünlerini masştablamak
(Bölüm: Ekosistema we Tor)
1) Düwünleriň rollary we traffigiň konturlary
Tassyklaýjy/öndüriji (consensus/block/rollub-sequencer): gutarmagyň möhüm ýoly.
Reader/indeksator (read-only/API/arhiw): programmalaryň we analitikleriň haýyşlaryna hyzmat edýär.
Releer/Bridge (cross-domain): domenleriň arasynda habarlary/aktiwleri geçirmek.
Şlýuz/edge (ingress/gRPC/WebSocket/QUIC): Müşderi soraglaryny kabul etmek, rate-limit, kesh.
Telewizor metriýasy/syn edilmegi: metrikleri/loglary/treýsleri ýygnamak, sintetiki nusgalar.
Her rol üçin - öz SLO, ýalňyşlyklaryň býudjeti we masştabyň syýasaty.
2) Masştab modelleri
2. 1 Dik (scale-up)
CPU/RAM/SSD/NIC. Iň ýokary derejeler üçin çalt, ýöne demir bilen çäklenýär we ulag birliginiň bahasyny ýokarlandyryp biler.
2. 2 Gorizontal (scale-out)
Balanslaýjylaryň/nobatlaryň aňyrsyna göçürmeleri goşmak. Idempotentlik, sticky-syýasatçy, kworum we ylalaşylan keşler (ýa-da olaryň maýyplygy) talap edýär.
2. 3 Funksional dargamak
Borçlaryň bölünmegi: konsensus düwünleri izolirlenýär; RPC/API - aýratyn; indeksator/arhiw - aýratyn; bridge/relayer - aýratyn.
2. 4 Geo-skeýl
Sebitleýin toparlar (EU/US/AP) + anycast/GeoDNS/Latency Aware LB; jemlemek/gijikdirmek we ýerli keş bilen köpeltmek.
2. 5 Şarding/partiýa ýerleşdirmek
Nobatlar/indeksatorlar we sütün saklaýjylar üçin açarlar boýunça bölünişi (chainId, shard, topic).
3) Sorag ýoly: deňagramlylyk, kesh, QoS
L4/L7 deňagramlylygy: health-checks, sticky/trace-id, circuit-breaker, outlier-ejection.
Keshler:- edge (köplenç okalýan RPC üçin short-TTL);
- prosessoryň içinde (indeksler üçin read-through, write-around);
- negatiw keşler (tapylmady).
- QoS synplary: P0 (gutarmak/köpri/tölegler), P1 (azyk önümleri), P2 (bulk/arhiw).
- Backpressure: tokenler/karzlar, concur-haýyşlary çäklendirmek, DLQ bilen nobatlar.
- Admissions: pre-süzgüç (auth, limitler, geo/sanksiýalar), "gymmat" haýyşlaryň irki ret edilmegi.
4) Ýagdaýy dolandyrmak: snapshotlar, pruning, arhiw
Doly/Pruned: RPC üçin pruned-düwünler; Archive - aýratyn howuzda retrospektiv soraglar üçin.
Snapshotlar/fast-sync: yzygiderli snapshotlar, çalt bootstrap täze sözler.
Hot/Warm/Cold saklamak: NVMe-de gyzgyn ýagdaý, taryhy bloklar - S3/indeksli obýekt.
Garbadge-collect/compaction: iň ýokary wagty däl, meýilleşdirilen penjireler.
DA/Batch-buferler (L2/köprüler üçin): pruf-kwitansiýalar bilen eltip bermek kepillikleri we arassalamak döwri.
5) Nobatlar we akym bejergisi
Ingress: Kafka/Pulsar/NATS с partition-key = `chainId|shard|topic`.
Konsumer toparlary: partiýa boýunça masştablamak, idempotent prosessor (outbox/inbox).
DLQ we retralar: eksponensial backoff, poison-message karantini.
Ylalaşylan tertip: partiýanyň çäginde determinizm üçin.
6) Ulag we tor optimizasiýalary
QUIC/HTTP/2: multiplekslemek, head-of-line düzediş.
TCP sazlamak: BBR/CUBIC, ulaldylan buferler, 'SO _ REUSEPORT'.
Kernel/eBPF: deňagramlylyk üçin çaltlaşdyrylan tor steki, konsistent heşi.
NIC offload и pinning IRQ к NUMA.
gRPC: keepalive/ping parametrleri, max-inflight çäklendirmeleri.
WebSocket: birikme howuzlary, ping/pong, müşderä ýazylmagyň çäklendirilmegi.
7) Ygtybarlylyk: kworumlar, zaýalanma, bulam-bujarlyk synaglary
Okamak/ýazmak kworumy (mümkin bolsa), lideriň fensingi.
Pese gaçmak düzgünleri: readonly, "diňe gutarnykly", agyr usullary öçürmek.
Chaos-in engineeringenerçilik: gijikdirmeler/ýitgiler, täzeden başlamalar, disk/toruň şowsuzlygy, "tizlikli reorg" ssenarisi.
8) SLI/SLO we maksatlaýyn görkezijiler
SLI (mysal):- p95 RPC latency usullaryň synplary boýunça;
- Success-rate; Queue-lag p95;
- Time-to-finality p95 (releýler/köprüler üçin);
- Snapshot bootstrap time;
- State growth/day; CPU/IO saturation.
- P0 RPC p95 ≤ 400 ms; Availability ≥ 99. 95%;
- Finality relay p95 ≤ 3 min;
- Queue-lag P0 p95 ≤ 2 с;
- Bootstrap new reader ≤ 30 мин (fast-sync+snapshot);
- Error budget burn 2 sagatlyk penjire boýunça ≤ 2 ×.
9) Syn etmek we alerting
Metrikler: latency (histogram), RPS, errors (synplar boýunça), queue-lag, GC/heap, disk-io, p2p peers, gossip-rate.
Söwda: edge → RPC → indeksator → saklamak → köpri arkaly 'trace _ id' arkaly.
Loglar: gurluş, 'request _ id' bilen baglanyşyk.
Alertler: burn-rate P0, queue-lag, peer-count, reorg-spayki, snapshot-drift.
10) Awtoskeýlingiň patternleri
HPA/VPA (K8s): по CPU/latency/RPS/queue-lag; Topikleriň uzynlygy boýunça KEDA.
Step-scaling: Gündelik iň ýokary profiller; Predictive ML/möwsümliligi boýunça.
Warm-spares: traffiksiz gyzdyrylan replikalar (graceful promote).
Safe rollout: canary + outlier-ejection + SLO-гейты.
11) Howpsuzlyk we izolýasiýa
mTLS/pinning açarlary; usullar üçin RBAC/ABAC; QoS çäkleri per org/tenant.
Rate-limit we DoS-shield: köpçülik RPC üçin bellikler, kapçalar, anomaliýa-detekt.
Gizlin dolandyryş: gysga ömürli bellikler, aýlaw.
Gum gutulary: arhiw/köpçülige açyk müşderiler üçin aýratyn boşluklar.
12) Salgylanma konfigurasiýalary
12. 1 K8s: RPC şlýuzy (gorizontal masştaby)
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: rpc-gateway }
spec:
replicas: 6 strategy: { type: RollingUpdate, rollingUpdate: { maxSurge: 2, maxUnavailable: 0 } }
selector: { matchLabels: { app: rpc-gateway } }
template:
metadata: { labels: { app: rpc-gateway, qos: P0 } }
spec:
containers:
- name: gateway image: org/rpc-gateway:2. 4. 1 ports: [{ containerPort: 443 }]
resources:
requests: { cpu: "1", memory: "2Gi" }
limits: { cpu: "4", memory: "6Gi" }
env:
- { name: MAX_CONCURRENCY, value: "400" }
- { name: CACHE_TTL_MS, value: "200" }
readinessProbe: { httpGet: { path: /healthz, port: 443 }, initialDelaySeconds: 5, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /livez, port: 443 }, initialDelaySeconds: 10, periodSeconds: 10 }
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: rpc-gateway-hpa }
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: rpc-gateway }
minReplicas: 6 maxReplicas: 36 metrics:
- type: Pods pods:
metric:
name: request_latency_p95_ms target:
type: AverageValue averageValue: 350m # 350 мс
12. 2 Envoy: ileri tutulýan we outlier-ejection
yaml clusters:
- name: readers type: EDS lb_policy: LEAST_REQUEST outlier_detection:
consecutive_5xx: 5 interval: 2s base_ejection_time: 30s circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 20000 max_pending_requests: 5000 max_requests: 20000 health_checks:
- timeout: 1s interval: 3s http_health_check: { path: /healthz }
route_config:
request_headers_to_add:
- header: { key: x-trace-id, value: "%REQ(X-TRACE-ID)%" }
weighted_clusters:
clusters:
- name: readers weight: 100
12. 3 Kafka: domen boýunça partiýa
yaml topic: "rpc. events"
partitions: 48 replicationFactor: 3 config:
retention. ms: 604800000 # 7 days max. message. bytes: 1048576 min. insync. replicas: 2 cleanup. policy: delete
12. 4 QoS we çäkler syýasaty
yaml qos:
P0:
rps_limit_per_org: 1500 queue_lag_p95_ms: 2000 retry: { attempts: 3, backoff_ms: [100,400,800] }
P1:
rps_limit_per_org: 800
P2:
rps_limit_per_org: 200 admissions:
denylist_methods: ["eth_getLogs(>10k blocks)"]
heavy_query_guard: { max_range_blocks: 5000, require_token: true }
13) Maglumatlaryň shemalary we haýyşlaryň mysallary
13. 1 Düwün ölçegleri (katalog)
sql
CREATE TABLE node_metrics (
ts TIMESTAMPTZ,
node_id TEXT, role TEXT, region TEXT,
rps INT, latency_p95_ms INT, errors_5xx INT,
queue_lag_ms INT, cpu NUMERIC, mem NUMERIC, io_wait NUMERIC
);
13. 2 SLO-gözegçilik we burn-rate
sql
SELECT date_trunc('hour', ts) AS h, role,
AVG(latency_p95_ms) AS p95,
100. 0 SUM(CASE WHEN latency_p95_ms <= 400 THEN 1 ELSE 0 END)/COUNT() AS slo_hit_pct
FROM node_metrics
WHERE ts >= now() - INTERVAL '24 hours'
GROUP BY 1,2;
13. 3 Ýükleri meýilleşdirmek
sql
SELECT region, role,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY rps) AS rps_p95,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY queue_lag_ms) AS lag_p95
FROM node_metrics
WHERE ts >= now() - INTERVAL '7 days'
GROUP BY region, role;
14) Ekspluatasiýa düzgünleri
Her gün: SLO, kapasiti-delta, snapshot ýagdaýy, peer-health boýunça hasabat.
Her hepde: çäklendirmeleri gözden geçirmek/QoS, DR synagy (snapshot-dan bootstrap), pruning we kompakşenleri barlamak.
Goýberilmezden öň: kanar rollout, SLO-geýtlar we syn edilýän metrikler, yza gaýdyp geliş meýilnamasy.
Gymmaty hasaba almak: CTS per 1k soraglar, TPS_per_$ (dollara netijelilik).
15) Playbook hadysalary
A. Gizlinlik partlamasy RPC p95
1. Sampling P2-throttle açyň; 2) gateway/reader belliklerini köpeltmek;
2. traffigiň bir bölegini diňe kesele geçirmek; 4) gyzgyn usullaryň seljermesini açmak, zerur bolsa - deny-rules.
B. tekerde queue-lag> SLO
1. Konsumerleriň awtoskeýli (KEDA), 2) partiýany gaýtadan paýlamak, 3) bulk-joblary wagtlaýyn duruzmak.
C. Walidatorda/releýde peer-count ýykylmagy
1. P2p modullaryny täzeden başlamak, 2) oturgyçlary üýtgetmek, 3) ACL/NAT torlaryny barlamak, 4) ätiýaçlyga geçmek.
D. Täze göçürmäniň uzyn bootstrap
1. Täze snapşota geçmek; 2) IO-nyň geçirijilik ukybyny ýokarlandyrmak; 3) arhiw indekslerini wagtlaýyn aýyrmak.
E. reorg/köpri gijikdirmeleri
1. K-tassyklamalary/penjiräni köpeltmek, 2) "finalized-only" re modeimini açmak, 3) sarp edijilere habar bermek.
16) Girizmegiň çek-sanawy
1. Düwünleriň we olaryň SLO/ýalňyşlyk býudjetleriniň rollaryny kesgitlemek.
2. Funksiýalary ýaýratmak: consensus/RPC/indeksator/arhiw/köpri/edge.
3. Deňagramlylygy, QoS, backpressure we DLQ bilen nobaty açyň.
4. Snapshotlary/fast-sync, pruning we köp derejeli saklamak.
5. Metrikleri/treysleri/logleri, daşbordlary we burn-rate alertlerini birikdirmek.
6. Awtoulag skelingini (HPA/KEDA) we kanar relizlerini sazla.
7. Bulam-bujarlyk synaglaryny we yzygiderli DR maşklaryny geçirmek.
8. Amal düzgünlerini we çykdajylara gözegçiligi girizmek.
17) Sözlük
Backpressure - artykmaç ýüklenende giriş akymyny dolandyrmagyň mehanizmleri.
DLQ - problemaly habarlar üçin "öli nobat".
Pruning - häzirki penjiräniň daşyndaky taryhy ýagdaýy aýyrmak.
Çalt sync/Snapshot - täze göçürmäni sinhronlamagyň çaltlaşdyrylan usuly.
Outlier-ejection - bozulan ýagdaýlary howuzdan aýyrmak.
Burn-rate - SLO degişlilikde ýalňyşlyklaryň býudjetini sarp etmegiň tizligi.
Netije: tor düwünleriniň masştaby diňe bir "göçürme goşmak" däl, eýsem arhitekturanyň, QoS-iň, ýagdaýy dolandyrmagyň we operasiýa berkliginiň ulgamlaýyn düzgünidir. Bu freýmworkdan (rollaryň bölünmegi, nobatlar, keşler, awtoskeýl, gözegçilik we aýdyň SLO) soň ekosistema öňünden aýdyp boljak öndürijiligi, iň ýokary derejä çydamlylygy we traffigiň birligine gözegçilik edilýän bahany alýar.