Сигнали між вузлами
1) Поняття сигналу
Сигнал - мінімальна одиниця смислової комунікації в мережі: подія, запит, підтвердження, статус, ліміт, політика. На відміну від «сирого» пакета, сигнал має семантику (тип, схема, контекст, інваріанти) і гарантії (доставка, порядок, ідемпотентність).
Цілі: знизити зв'язаність сервісів, прискорити реакцію на зміни, зробити мережу керованою і спостережуваною.
2) Таксономія сигналів
Подієві (Event): факти про подію (Created, Updated, Settled, Slashed).
Командні (Command): намір виконати дію (Mint, Pause, RotateKey).
Запит-відповідь (Query/Reply): отримання стану/агрегацій.
Стан (State Snapshot): періодичні знімки (ліміти, квоти, конфіги).
Алерти/Інциденти (Alert): відхилення, деградації, порушення SLA.
治理/Politiki (Governance/Policy): параметри тарифів, лімітів, версій.
Крос-доменні (X-Chain/X-Domain): перенесення прав/повідомлень між ланцюгами/зонами довіри.
Кожен клас фіксується схемою (ID версії, обов'язкові поля, інваріанти).
3) Модель повідомлення
Мінімальний склад:- `signal_id` (ULID), `causality_id` (trace/span), `ts`, `ttl`
- `type` (namespace:version), `schema_hash`
- 'producer _ id','domain','auth _ proof'( підпис/VC/ZK)
- 'qos'( клас),'retries','attempt'
- `payload` (CBOR/JSON/ProtoBuf), `crc`
- 'idempotency _ key'( по бізнес-сутності)
4) QoS і класи доставки
Q0 Fire-and-Forget: без підтверджень (telemetry, метрики).
Q1 At-Least-Once: ретраї, дедуп на приймачі, ідемпотентність.
Q2 Exactly-Once (ефективна): ідемпотентний запис + дедуп + транзакційна outbox/inbox.
Q3 Ordered: збереження порядку за ключем партії (keyed partitioning).
Q4 Priority/Deadline: пріоритети та дедлайни (EDF/LLF) для критичних команд.
Рішення: за замовчуванням Q1 + ідемпотентність; Q3 - для потоків з причинністю; Q4 - для avary/治理.
5) Порядок, причинність та ідемпотентність
Ключі причинності: `aggregate_id`, `version`, `prev_hash`.
Outbox/InBox-патерн: транзакційна фіксація події та відправлення.
Ідемпотентні хендлери: збереження'idempotency _ key'в «seen table» + upsert.
Reconciliation: періодичні звірки снапшотів і логів (repair jobs).
Ліміти ретраїв/TTL: захист від «вічних» повторів і дрейфу стану.
6) Контроль потоку і backpressure
Квоти та токени: leaky/bucket, rate-limit за типами/споживачам.
Договір по частоті/розміру: batch size, window, max-in-flight.
Drop/Degrade-політики: оглядова телеметрія при перевантаженні; важливі Q4 не дропати.
Справедливість: WFQ/DRR-планування по чергах.
Адаптивність: PID-контролери: зростання затримки → зменшити вікно.
7) Транспорт і шина
Локальна шина подій: Kafka/Pulsar/NATS/Redis Streams - партіонування за ключами.
Синхронні запити: gRPC/HTTP2 для Query/Reply, тайм-аути і Circuit Breakers.
Крос-доменні канали: IBC/CCIP-подібні шари, релейєри із заставами, доказові підтвердження.
Edge/POP: локальні буфери і ретрансляція в core.
8) Безпека сигналів
Автентифікація: mTLS/OIDC для S2S; підписані повідомлення (EdDSA/secp256k1).
Авторизація: ABAC/RBAC на топіки і типи сигналів; RNFT-права/ліміти.
Цілісність: хеші/мерклізації батчів, незмінні журнали.
Конфіденційність: поля в ZK/шифрування полів (FPE для часткових витоків).
Анти-фрод: поведінкові сигнатури, «медовий» трафік, стохастичні перевірки.
9) Спостережуваність і трасування
Кореляція: trace-id/span-id в кожному сигналі, наскрізні лейбли.
Метрики: p50/p95 latency по типам, success rate, timeout/reties %, DLQ depth, consumer lag.
Логи політики: хто, коли, що змінив (治理/limity), підписи і диффи конфігів.
Алертинги: SLO-бюджети помилок; синтетичні проби для критичних маршрутів.
DLQ/Replay: мертві черги, reprocess із захистом від дублів.
10) Схеми та версіонування
Schema Registry: еволюція полів (back/forward compatible), semver типів.
Feature flags: поступова активація полів/логіки.
Контракти сумісності: тести «стара продюсер ↔ новий консюмер» і навпаки.
Міграції: dual-write/dual-read, дзеркальні топіки, sunset-плани.
11) Політики ретраїв і дедуплікації
Ретраї: експоненціальна затримка + джиттер, максимум спроб, quarantine після порогу.
Дедуп: зберігання останніх «N» ключів на партію або bloom-фільтри; TTL записів.
Анти-шторм: групові ACK/NACK, coalescing подій (debounce/aggregate).
12) SLA/SLO для сигналів
Приклад цільових SLO (по класу):- Q4: p95 ≤ 200 мс, успішність ≥ 99. 99%, DLQ = 0, MTTR інциденту ≤ 15 хв.
- Q3: p95 ≤ 500 мс, успішність ≥ 99. 9%, порушення порядку ≤ 10⁻⁶/soobshcheniye.
- Q1: успішність ≥ 99. 5% за вікно T, p95 ≤ 1-2 с.
Error budget: перевитрата → авто-скачування швидкостей, включення пріоритетів, фіч-прапор деградації.
13) Крос-ланцюгові сигнали (мультичейн)
Докази подій: light-client/state proofs замість «довіри до релеєра».
Фінальність: облік затримок фіналізації домену, тимчасові замки (challenge period).
Економічні гарантії: S-застава релеєрів, слешинги за помилкові підтвердження.
Ідемпотентність X-Domain: глобальний'x _ msg _ id', таблиці seen на обох кінцях.
Політики виходу: стоп-крани, ліміти об'єму/часу, ручний кворум при атаках.
14) Анти-колюзія і зловживання
Сигнали-підробки: strong auth + поведінковий детектор аномалій.
Реплей-атаки: nonce/TTL і одноразові ключі.
Колюзія виробників: кореляційний аудит, сліпі вибірки, штрафи за систематичну помилку.
Фармінг подій: тарифікація за якістю (Q-клас), rate limits по суті.
15) Плейбук впровадження
1. Картування доменів і типів сигналів. Визначити критичність (Q-клас), власників, схеми.
2. Вибір транспорту і топік-архітектури. Партіонування за ключами причинності.
3. Визначення SLO/SLA. Бюджети помилок, алерти, аварійні процедури.
4. Security-by-default. Підписи, mTLS, ABAC, ключова ротація.
5. Ідемпотентність і дедуп. Outbox/InBox, seen-tables, TTL.
6. Backpressure. Квоти, вікна, пріоритети, дашборди лагів.
7. Schema Registry & версіонування. Контракти сумісності, тестові матриці.
8. Спостережуваність. Трасування E2E, синтетичні проби, DLQ/Replay.
9. Пілот і game-days. Інцидентні тренування, реплей реальних логів.
10. Масштабування. X-domain, ліміти, стоп-крани, публічні пост-мортеми.
16) Метрики і дашборди
Продуктивність: latency p50/p95/p99, throughput, consumer lag, in-flight.
Надійність: success rate, retry %, DLQ depth, duplicate ratio.
Порядок: out-of-order %, reordering distance.
Економіка: вартість обробки/повідомлення, маржа по класу, штрафи/стимули.
Безпека: rate підозрілих сигналів, фолс-позитив/негатив.
治理: швидкість розкатки схем/політик, частка успішних апгрейдів без відкату.
17) Шаблони контрактів/сервісів
Signal Gateway: валідація, автентифікація, нормалізація, пріоритизація.
Schema Registry: зберігання/валідація схем, сумісність.
Signal Router: маршрутизація за типом/доменом, QoS-класи, rate limits.
Idempotency Store: ключі, TTL, дедуп.
DLQ/Replay Service: карантин, відкладена обробка, реплей по вікнах.
X-Domain Relay: докази, застави, слешинг, фінальність.
Policy Hub: управління лімітами/конфігами, аудит змін.
18) Чек-лист прод-готовності
- Визначено класи QoS і SLO для всіх типів сигналів
- Включені підписи, mTLS, ротація ключів, ABAC
- Налаштовані outbox/inbox, ідемпотентні хендлери, дедуп
- Реалізовані rate limits, backpressure, пріоритети
- Введений Schema Registry, тести сумісності, мить-плани
- Доступні дашборди: latency/lag/DLQ, алерти за бюджетами помилок
- Відпрацьовані інциденти (game-days), реплей, пост-мортеми
- Для X-domain включені докази, застави і стоп-крани
19) Глосарій
QoS: клас гарантій доставки/пріоритету.
Idempotency: повторне виконання без побічних ефектів.
Backpressure: механізми, що обмежують навантаження при перевантаженні.
DLQ: «мертва» черга для неуспішної обробки.
Trace/Span: ідентифікатори наскрізного трасування.
X-Domain/X-Chain: крос-доменні/крос-ланцюгові маршрути сигналів.
Підсумок: правильно спроектовані сигнали - це «нервова система» мережі. Стандартизувавши схеми, гарантії, безпеку і спостережуваність, екосистема отримує передбачувану доставку, стійкість до збоїв і керовану еволюцію без прихованих зв'язків і ручних милиць.