Тораптар арасындағы деректер ағындары
(Бөлім: Экожүйе және Желі)
1) Мақсаты мен мәні
Тораптар арасындағы деректер ағыны - бұл экожүйенің рөлдері (валидаторлар/ридерлер/индекстеушілер/көпірлер/шлюздер/сақтау орындары/талдау) арасындағы оқиғаларды, жай-күйлер мен артефактілерді берудің басқарылатын арналары. Мақсаттары:- Болжамдылық: кідіріс/табыс/жаңалық бойынша тұрақты SLO.
- Сенімділік: шығындарға, телнұсқаларға, реоргаларға төзімділік.
- Қауіпсіздік және комплаенс: шифрлау, қолтаңбалар, резиденттік.
- Масштабталуы: гео-бөлу, партиялану, QoS.
2) Ағындардың таксономиясы
1. Control Plane: конфигалар, фичефлагтар, маршруттау/лимиттер саясаты.
2. Data Plane - оқиға: домендік оқиғалар ('deposit.', 'payout.', 'bridge.').
3. Data Plane - стрим: сигналдар мен live-метриктер үшін ұзақ мерзімді ағындар (gRPC/WebSocket).
4. Batch/Backfill: тарихи тіліктерді, репликаларды, снапшоттарды жүктеу.
5. Репликация/анти-энтропия: state sync, мерклизация, CRDT ағындары.
6. Телееметрия/бақылау: логи/метрика/трейстер side-band, негізгі UX кедергі келтірмейді.
Әр түрге QoS сыныптары және ретрайлардың/тәртіптің жеке ережелері сәйкес келеді.
3) Топологиялар және бағыттау
Hub-and-Spoke: аймақтық хабтар шиналар ретінде; споуктар - рөлдердің түйіндері.
Mesh/P2P: репликалау/мемсипке арналған ішінара ұяшық.
Edge-Tiered: жұқа edge-шлюздер (rate-limit/кэш) → қалың өңірлік кластерлер.
Geo-Routing: Anycast/Latency-Aware LB + резиденттік ережелері.
Негізгі - партиялану: 'partition _ key = chainId' tenant 'topic' entityId 'болжамды тәртіп пен масштабты береді.
4) Көлік және форматтар
HTTP/2/3, gRPC/QUIC - төмен латенттілік, мультиплексиялау, keepalive.
Kafka/Pulsar/NATS - персистенттілігі/партиялары/консьюмер-топтары бар кезектер.
WebSocket - іске қосу оқиғалары мен live-арналар.
Форматтар: Protobuf/Euro (эволюциясы бар схемалар), сыртқы API үшін JSON.
Тұтастығын тексеру үшін хеш-адрестеу және Merkle-түбіртегі.
5) Тәртібі, жеткізу және аяқтау
Жеткізу үлгісі:- At-least-once (әдепкі; іспеттілік/дедуп талап етіледі).
- Exactly-once-effect Outbox/Inbox + демпотенттік консюмер арқылы.
- Тәртіп: партия шегінде кепілдендіріледі; партияаралық тәртіпке кепілдік берілмейді.
- Аяқтау: 'observed → confirmed (K) → finalized → invalidated (reorg)' мәртебелері; optimistic үшін - дау терезесі.
6) Іспеттілік және дедуп
Оқиғалар үшін сәйкестік кілті:- `idempotency_key = ${chainId}|${block}|${tx}|${logIndex}|${type}`
- Upsert кілт бойынша, TTL атасының терезелері ≥ 72 сағ.
- Payload қақтығысына - «ақиқат көзі» саясаты (басымдық, нұсқа, қолтаңба).
- HTTP сұраулары үшін - 'Idempotency-Key' + жауаптар журналы.
7) Кезектер, backpressure және квоталар
Кезектер: кілт бойынша партия; «Улы» хабарлар үшін DLQ.
Backpressure: кредиттер/белгілер, max-inflight шектеу, circuit-breaker.
Квоталар/QoS: P0 (сындарлы), P1 (өнім), P2 (bulk). RPS/bytes/s/жазылымдардың бөлек пулдары/лимиттері.
Admission control: ауқымдар/өлшемдер бойынша «қымбат» сұраулардан ерте бас тарту.
8) Деректердің келісімділігі мен модельдері
Партия/торап шегінде Read-you-write.
Өңірлер/партиялар арасындағы Eventual Consistency.
CRDT кейбір жиындарды (есептегіштер, жиындар) жанжал-фри репликалауға арналған.
Snapshotlar + жылдам bootstrap және детерминирленген replay журналдары.
9) Қауіпсіздік және сенім
түйіндер арасындағы mTLS, кілттердің пиннингі, ротация.
Хабар/вебхук қолтаңбалары, уақыт белгісі және анти-replay терезесі.
Жолда/тыныштықта шифрлау; өңірлік кілттерді сегрегациялау.
PII-азайту: лейблдерде/метриктерде дербес деректерді токендеу, тыйым салу.
10) Тиімділігі: пакеттеу, компрессия, кэш
Batching: overhead төмендету үшін ұсақ хабарларды топтау.
Compression: қауіпсіз сөздіктері бар zstd/gzip.
Кэш: теріс жауаптар және «ыстық» анықтамалықтар; TTL және оқиға бойынша мүгедектік.
11) Деректер схемалары (референстер)
Ағындардың/партиялардың тіркелімі
sql
CREATE TABLE streams (
name TEXT PRIMARY KEY,
partitions INT,
qos TEXT, -- P0 P1 P2 retention_days INT,
schema_version TEXT
);
CREATE TABLE offsets (
stream TEXT, partition INT, consumer_group TEXT,
offset BIGINT, updated_at TIMESTAMPTZ,
PRIMARY KEY (stream, partition, consumer_group)
);
Оқиғалар журналы (idempotent upsert)
sql
CREATE TABLE events_core (
id UUID PRIMARY KEY,
idempotency_key TEXT UNIQUE,
ts TIMESTAMPTZ,
partition_key TEXT,
type TEXT,
payload JSONB,
status TEXT, -- observed confirmed finalized invalidated signature TEXT
);
DLQ/карантин
sql
CREATE TABLE dlq (
id UUID PRIMARY KEY,
stream TEXT, partition INT, offset BIGINT,
reason TEXT, payload JSONB, ts TIMESTAMPTZ
);
12) Саясат (YAML)
QoS және лимиттер
yaml qos:
P0: { ack_timeout_ms: 2000, retries: 3, backoff_ms: [100,400,800], rps_per_org: 1500 }
P1: { ack_timeout_ms: 5000, retries: 2, rps_per_org: 800 }
P2: { best_effort: true, rps_per_org: 200 }
limits:
max_message_bytes: 1048576 max_stream_subscriptions_per_client: 20
Аяқтау және терезелер
yaml finality:
eth-mainnet: { k: 12 }
polygon: { k: 256 }
optimistic: { k: 0, challenge_minutes: 20 }
Роутинг/резиденттік
yaml routing:
prefer_local_region: true fallback: [nearest_healthy, master_hub]
residency:
eu: ["eu"]
uk: ["uk"]
13) Бақылау қабілеті: SLI/SLO
SLI (ядро):- Latency p95/p99 (ingress→egress, per-stream/QoS).
- Success Rate / Drop Rate.
- Queue Lag p95 және consumer lag партиялары бойынша.
- Freshness p95 (ingest→consume).
- Reorg/Invalidated Rate (егер ончейн болса).
- Dedup Efficiency (демпотентпен жұтылған дублдар%).
- Geo-Hit Ratio (жергілікті қызмет көрсетілген).
- P0 latency p95 ≤ 400 мс; Success ≥ 99. 95%; Queue-lag p95 ≤ 2 с; Freshness p95 ≤ 60 с.
- Dedup efficiency ≥ 99%; DLQ ≤ 0. Трафиктің 1%.
Дашбордтар: Streams Core/Lag & Freshness/QoS & Errors/Geo/Security (mTLS/қолтаңбалар).
14) Тұтынушылардың паттерндері
Outbox/Inbox: атомарлық жарияланым және демпотенттік қолдану.
Exactly-once әсері: соңғы қолданылған кілт пен нұсқаны сақтау.
Watermarks: кешігетін оқиғаларды өңдеу (late data).
Idempotent Side-Effects: сыртқы сұраулар тек кілтпен және жауап журналымен.
15) Тозу режимдері
Finalized-only mode: тек аяқталған оқиғалар ғана беріледі.
Анықтамалықтар үшін Cache-only, ауыр әдістерді қатыру.
Throttle P2 және стримдерге арналған «диета режимі» (жаңартулардың төмендетілген жиілігі).
Екінші дәрежелі API үшін Read-only.
16) Даунтайсыз релиздер мен көші-қон
Blue-Green/Canary ағындар мен консьюмерлер бойынша.
Schema-first: тек өрістерді қосу; MAJOR - топиктердің параллель нұсқалары.
Offset миграциялары: shadow-консумерлер, lag/табысты салыстыру, ауыстырып қосу.
17) Операциялық регламенттер
Күн сайын: SLO есебі (latency/success/lag/freshness), қол қою аудиті, DLQ тексеруі.
Апта сайын: партияларды/квоталарды тексеру, DR тесті (снапшоттан bootstrap), Dedup Efficiency талдауы.
Ай сайын: chaos-тесттер (loss/jitter, брокердің бас тартуы, reorg-бурст), finality-терезелерді қайта қарау.
Шығару алдында: канарейка ≥ 120 мин, SLO-гейттер, кері қайтару жоспары.
18) Playbook оқиғалар
А. Queue-Lag/Consumer-Lag жарылысы
1. Консумерлерді/KEDA ұлғайту; 2) партияларды қайта бөлу; 3) P2 және bulk-джобтарды мұздату; 4) «ыстық» кілттерді талдау.
B. p95 Latency P0
1. P2-throttle, Р0 басымдығы; 2) шлюздерді/брокерлерді масштабтауға; 3) тек анықтамалықтар үшін кэш; 4) outlier-ejection.
C. жоғары DLQ/дубляж
1. Теңсіздік/TTL кілтін тексеру; 2) дедупты күшейту; 3) шулы продюсерді шектеуге; 4) фикстен кейінгі реплика.
D. drift схемалар/келісімшарттар
1. strict-mode дегенді қосу 2) продюсерді хабардар етуге; 3) адаптер шығару; 4) линтерлерді жаңарту.
Е, Резиденттікті/қолтаңбаларды бұзу
1. Экспорт/арна блогы; 2) кілттерді/сертификаттарды ротациялау; 3) аудит және пост-мортем; 4) саясатты жаңарту.
19) Енгізу чек-парағы
1. Ағындардың түрлерін және топтастыру кілтін анықтаңыз.
2. Демпотенттілікті/дедупты және К/дау терезелерімен аяқтауды қосыңыз.
3. Кезектерді, QoS, квоталар мен backpressure.
4. mTLS/қолтаңбаларын және резиденттік саясатын іске қосыңыз.
5. Схемаларды/тізілімдерді (streams, offsets, dlq) және SLI/SLO телеметриясын енгізіңіз.
6. Downtime-сіз canary/blue-green және схемаларды көшіруді ұйымдастырыңыз.
7. Деградациялық режимдер мен инциденттердің плейбуктерін пысықтаңыз.
20) Глоссарий
Backpressure - кіріс жүктемесін бақылау (кредиттер/белгілер/лимиттер).
DLQ - проблемалық хабарлар үшін «өлі кезек».
CRDT - қайшылықтарды үйлестірусіз шешетін деректер құрылымы.
Finality - оқиғаның/күйдің қайтымсыздығы.
Exactly-once әсері - жеткізу at-least-once үстінен қауіпсіз нәтиже.
Watermark - кейінгі оқиғалар үшін өңдеу прогресінің белгісі.
Outlier-ejection - тозған инстанцияларды пулдан алып тастау.
Қорытынды: түйіндер арасындағы деректер ағыны - бұл жай ғана «кезек пен тыңдаушы» емес, тәртіптің, ақтаудың, теңсіздіктің, қауіпсіздіктің және бақылаудың жүйелі тәртібі. Партияланудың стандартты кілттері, QoS/квоталар, қатаң схемалар және SLO деградациялық режимдермен және плейбукпен бірге экожүйеге масштабта және аудитке арналған деректерді берудің тұрақты арналарын береді.