Системи C2
Система командування й управління (C2) — це софт, який перетворює доповіді з багатьох джерел на одну спільну картину, за якою можна діяти; зазвичай її уявляють як мапу. Краще розуміти її як механізм кореляції, до якого прикріплено мапу: доповіді приходять із джерел, що суперечать одне одному, спізнюються, мають різні схеми й часто описують той самий обʼєкт двічі, — і центральна робота системи полягає в тому, щоб вирішити, це одна річ чи дві. Тут — про це рішення, про те, чому час і певність мусять бути полями, а не припущеннями, що стається, коли два вузли втрачають контакт, і чому інженерія зрештою опиняється в інтерфейсі.
- Центральна операція
- Кореляція
- Два годинники
- Події й отримання
- При розриві
- Обидві тримають обидві
Кореляція є операцією — і вона ніколи не є певною
Три терміни роблять решту цієї сторінки читною, і їх варто розділити, бо системи, що їх змішують, дають картину, про яку неможливо міркувати. ДОПОВІДЬ — це те, що одне джерело сказало в один момент: сира, з авторством, ніколи не змінювана. СУТНІСТЬ — це справжня річ у світі, про яку доповідь може бути, а може й ні. ТРЕК — це поточне найкраще переконання системи про сутність, зібране з доповідей і завжди переглядуване. Доповіді є фактами про джерела; треки є гіпотезами про світ.
Кореляція — це крок, що приписує доповідь до треку, і щоразу вона є судженням у непевності. Два сенсори, що дають позиції за вісімдесят метрів одна від одної, можуть бачити один обʼєкт із похибкою позиції або два обʼєкти, що просто поруч. Система мусить обрати, і обидві помилки дорогі в різні боки: злиття двох сутностей ховає одну з них, а розділення однієї дає картину, у якій є річ, якої не існує. Жодна з помилок не є виправною, якщо доповіді після злиття викинули.
Два поля, що мають існувати з першого дня
Додати будь-яке з них згодом означає міграцію через усіх споживачів даних, тож їм місце в першій схемі, а не в другій версії. Обидва виглядають деталями і обидва вирішують, чи можна довіряти картині.
Час події й час отримання
Коли це сталося і коли ви про це дізналися — різні числа, і розрив може бути хвилинами. Доповідь віком сорок секунд не є доповіддю про зараз, а відображення, що не показує різниці, подасть застаріле як поточне.
Певність як значення
Кожна доповідь і кожен трек несуть, наскільки вони певні й на якій підставі. Округлити непевність на межі системи — найчастіший спосіб зробити картину впевнено хибною.
Походження
Яке джерело, який сенсор, який оператор, яка версія якого класифікатора. Саме це робить розбіжність придатною до розслідування, а не питанням думки.
Дисципліна годинника
Вузли, що не дістають до джерела часу, дрейфують. Записуйте джерело годинника та його якість разом із міткою часу — інакше впорядкування між вузлами стає здогадкою в одязі факту.
Певність заслуговує на окрему примітку, бо саме там гинуть добрі наміри. Число від нуля до одиниці має сенс, лише якщо всі, хто його виробляє, розуміють під ним те саме, — а вони не розуміють: 0,9 у сенсора є каліброваною ймовірністю, 0,9 у класифікатора є виходом softmax, що означає дуже мало, а 0,9 у людини є знизуванням плечима, поданим як число. Або домовтеся, що означає шкала, і калібруйте під неї, або несіть сирий доказ і дайте споживачеві вирішувати. Що не працює — усереднити три несумісні 0,9 в одну 0,9, яка не описує нічого.
Коли два вузли втрачають контакт
Саме тут обмеження з огляду стає конкретним. Два вузли годину без звʼязку, обидва далі отримують доповіді, обидва оновлюють свої треки, і обидва мають рацію щодо побаченого. Коли звʼязок повертається, вони не згодні — не тому, що якийсь зламаний, а тому, що вони бачили різне. Загальний матеріал з розподілених систем про це живе на інших сторінках; специфічне тут те, що правильним розвʼязанням майже ніколи не є обрати переможця.
| Стратегія узгодження | Що вона робить із розбіжністю | Вердикт |
|---|---|---|
| Перемагає останній запис | Пізніша мітка часу тихо перезаписує ранішу. | Типова поведінка більшості баз і хибна відповідь тут: «пізніше» часто означає «з вузла, у якого годинник біжить швидше». |
| Один вузол є головним | Береться версія призначеного вузла, іншу відкидають. | Придатне, коли той вузол справді має кращу інформацію, а зазвичай не має: передовий вузол побачив це першим. |
| Тримати обидві, зливати за доказом | Обидві версії лишаються окремими доповідями; кореляція перезапускається на обʼєднанні й може злити їх, а може ні. | Правильне значення за замовчуванням. Нічого не втрачено, а справжня розбіжність лишається видимою, а не розвʼязаною годинником. |
| Ескалювати до людини | Конфлікт показують з обома версіями та їхнім походженням, щоб хтось розсудив. | Правильно для невеликої кількості конфліктів, що важать, і непридатне як загальна політика: тисячі ніхто не розбере. |
Один практичний наслідок: оскільки узгодження відбувається над доповідями, а не над треками, протокол синхронізації обмінюється журналом незмінних фактів лише на дозапис, а не диффом змінюваного стану. Це помітно простіше зробити правильно, воно є ідемпотентним за побудовою і переживає обрив посередині — а це важить, коли вікно контакту міряють секундами.
Інженерія зрештою опиняється в інтерфейсі
Усе вищеописане існує, щоб людина могла ухвалити рішення, а отже, відображення не є шаром презентації над справжньою системою: воно є її останньою стадією і місцем, де ретельне моделювання даних найлегше викинути. Трек, що несе вік, певність і походження, намальований іконкою, тотожною до всіх інших, утратив усі три на останньому кроці.
- Вік має бути видимим без запиту. Трек за доповіддю чотирихвилинної давнини не має виглядати так само, як оновлений дві секунди тому, і оператор не має клікати, щоб це зʼясувати.
- Непевність слід малювати як непевність: області, а не точки; порожній маркер, а не суцільний. Точний символ є твердженням, і намалювати його поверх здогадки — це брехня, яку інтерфейс каже від імені системи.
- Кожен елемент має вміти відповісти «чому ти так вважаєш» за одну взаємодію, показавши доповіді за ним та їхні джерела.
- Деградовані режими потребують дизайну, а не порожньої панелі. Коли стрічка застаріла чи вузол ізольований, відображення мусить сказати про це прямо: мовчання читається так само, як «нічого не відбувається».
- Алерти підпорядковані тому самому правилу, що й усюди на цьому сайті: переривання, на яке людина не може зреагувати, привчає її ігнорувати ті, на які може.
Антипатерни, які варто назвати
- Згортати доповіді в трек і викидати їх: кожна помилка кореляції стає постійною й неперевірною.
- Одна мітка часу на запис: ніхто не скаже, чи трек поточний, чи йому сорок хвилин.
- Узгодження «перемагає останній запис»: справжні розбіжності розвʼязує порівняння двох годинників, які ніколи не синхронізували.
- Усереднювати певність джерел, які розуміють це число по-різному: виходить величина, що не описує нічого.
- Відображення, що малює всі треки однаково, видаляючи вік, певність і походження на останньому можливому кроці.
Коли це застосовувати
Застосовуйте, коли
- Будь-яка система, що збирає одну картину з кількох джерел, які суперечать, спізнюються або перетинаються.
- Коли проєктуєте схему: час події, час отримання, певність і походження належать першій версії.
- Коли вузли будуть відʼєднані один від одного, а обидва мають працювати далі й узгоджуватися при контакті.
- Коли переглядаєте відображення: воно є останньою стадією системи, а не шаром презентації над нею.
Уникайте, коли
- Як загальний матеріал про розподілені системи: ним володіють розділи архітектури й інфраструктури, і ця сторінка на них спирається.
- Для системи з одним джерелом, де кореляції не існує і більшість цього є зайвим тягарем.
- Як виправдання ескалувати кожен конфлікт до людини: за будь-якого справжнього обсягу це непридатне.
- Як заміну рішенню про те, що саме просять зробити оператора: жодна модель даних цього не дає.
Було корисно?
Поділіться з тим, хто працює над тією ж задачею.