Дата-платформи
Дата-платформа — це стек, який збирає, зберігає й переміщує записи організації, а та, що збудована під надійну мережу, спершу надсилає, а зберігає як побічний ефект. Переверніть це припущення — і разом із ним перевернеться архітектура: вузол пише локально й завжди, а надсилання стає фоновою справою за нагоди, якої сьогодні може не бути. Сторінка починається з дванадцяти способів, якими відʼєднана платформа губить чи псує дані, — кожен із рішенням, що його відвертає; далі — черга за пріоритетом, приймальний бік, що очікує обриву, що несе кожен запис, доказ як результат роботи, двадцять років форматів і сім задокументованих випадків.
- Записувати
- Локально, завжди
- Надсилати
- За пріоритетом, за нагоди
- Запис переживає
- ПЗ, що його читає
Дванадцять способів, якими відʼєднана платформа губить дані, — і рішення для кожного
Спершу весь список — бо відʼєднана платформа рідко ламається в лабораторії й зазвичай ламається одним із цих дванадцяти способів у перші місяці в полі: тихо, з усіма дашбордами зеленими. Кожен рядок ставить поруч те, що ви побачите, те, що насправді сталося, і рішення, яке це відвертає. Рядки пронумеровано, щоб на рев’ю можна було сказати «для рядка 9 у нас нічого немає», а розділи нижче посилаються на них за номером.
| # | Що ви бачите | Що насправді сталося | Рішення, що це відвертає |
|---|---|---|---|
| 1 | Найсвіжіша тривога прийшла після години рутинної телеметрії | Черга надсилала в порядку надходження, і кожне вікно закривалося, не дійшовши до тривоги. | Класи пріоритету: критичний клас завжди йде першим. |
| 2 | Черга ніколи не спорожніє, хоча звʼязок зʼявляється щогодини | Кожна передача починається спочатку, і кожне вікно закривається до кінця. | Поновлювана передача з прогресом для кожного запису. |
| 3 | Позиції годинної давнини зʼїдають сорокасекундне вікно | Ніщо в черзі не старіє, і новіша позиція не заміщає старішу. | Термін придатності для кожного класу й стан, що заміщує сам себе; прострочений запис відкидають свідомо — і рахують. |
| 4 | Після дня поганого звʼязку підрахунки завищені | Повтор після обірваного вікна зберегли як нові дані, бо id призначав приймач. | Id генерують на краю в момент спостереження; приймання пропускає id, який уже має. |
| 5 | Учорашня позиція замінила сьогоднішню на мапі | Записи розміщували в порядку прибуття, а не в порядку подій. | Кожен запис несе свій час події і розміщується за ним. |
| 6 | Виправлення стерло початкову доповідь, а з нею й розбіжність | Сховище перезаписало запис під час оновлення. | Лише дозапис: виправлення — новий запис, що посилається на старий. |
| 7 | Записи несправного сенсора неможливо знайти, не те що виключити | Записи не казали, який пристрій, сенсор чи версія ПЗ їх створили. | Походження на кожному записі, з першої схеми. |
| 8 | Робочу систему не можна розгорнути, бо її дані лежать не там | Класифікація була міткою при вивантаженні, а не полем, за яким обирали сховище. | Класифікація — поле кожного запису, і вона вирішує, де його можна зберігати й куди надсилати. |
| 9 | Прогін видалення прибрав записи, які мав лишити | Зберігання було скриптом по живому сховищу, без попереднього перегляду й без запису того, що він прибрав. | Правило зберігання на кожному записі; кожен прогін видалення заздалегідь переглядають, журналюють, і його можна скасувати протягом пільгового строку. |
| 10 | Записи зникли між двома системами, а всі підсумки досі виглядали правдоподібно | Обмеження формату чи інтерфейсу обрізало передачу без жодної помилки. | Кожну передачу рахують з обох кінців, і розбіжність зупиняє конвеєр. |
| 11 | Ніхто не може сказати, що система знала о 14:02 | Зберігали лише поточний стан; кожне оновлення знищувало попереднє. | Зберігати, коли факт записали, а не лише коли він стався, і питати «станом на». |
| 12 | Записи десятирічної давнини неможливо прочитати | Формат залежав від програми, версії бібліотеки чи носія, яких більше не існує. | Відкриті, задокументовані, самоописні формати й архівні зразки, які читають на кожному релізі. |
Зберегти й переслати — і черга, що робить це проєктуванням
«Зберегти й переслати» — річ давня й проста: запиши там, де ти є, надішли, коли зможеш. Проєктуванням, а не буфером, це робить те, що стається, коли черга більша за вікно, — а це нормальний випадок, а не виняток.
Порахуйте один раз — і суть стане очевидною. Сорокасекундне вікно на девʼяти кілобітах на секунду переносить близько сорока пʼяти кілобайтів. Критична подія важить два кілобайти й іде щоразу. Оновлення треків — сорок кілобайтів і йдуть здебільшого. Відео — девʼятсот мегабайтів, і цим каналом воно не піде ніколи, — і це проєктний факт, який вирішують наперед, а не несподіванка, яку виявляють у полі. Відео їде на фізичному носії, коли платформа повернеться, або зводиться на борту до чогось, що вміщається, або не їде взагалі.
Це рішення — таблиця, яку хтось має написати, клас за класом. Розміри нижче умовні; стовпці — ні. Стовпець, який зазвичай пропускають, — термін придатності, і саме про нього рядок 3: оновлення позиції варте надсилання лише доти, доки немає новішого, тож стан має заміщувати сам себе в черзі, а не чекати своєї черги позаду самого себе.
| Клас | Приклади | Типовий розмір | Коли перестає бути вартим надсилання | Якщо вікно коротке |
|---|---|---|---|---|
| 1 · Критична подія | Доповідь про контакт, несправність, тривога, піднята людиною | 1–2 КБ | Ніколи; її надсилають, доки не підтвердять | Завжди першою, повторно — до підтвердження |
| 2 · Стан | Власна позиція, оновлення треків, заряд і справність | Десятки КБ на годину | Коли зʼявилося новіше значення | Надіслати найновіше; відкинути те, що воно заміщує |
| 3 · Зведення | Списки детекцій, мініатюри, зведення останньої години відео | 10–500 КБ | Через години | Коли є місце |
| 4 · Масив | Сире відео, повні логи | Сотні МБ | Після повернення | Ніколи цим каналом; фізичний носій після повернення |
Та сама логіка стосується власного сховища вузла — воно теж черга. Вузол, що тиждень без звʼязку, заповнює диск, і без бюджету першим зникає те, що надійде наступним, — часто саме тривога. Дайте кожному класу бюджет сховища: рутинні дані витісняються від найстаріших, критичні — ніколи, і кожне витіснення рахують, щоб «ми відкинули 4 000 оновлень позиції» було рядком у звіті, а не відкриттям.
Приймальний бік припускає, що його обірвуть
Оскільки вікно закривається без попередження, кожна передача може завершитися наполовину, а відновлене зʼєднання може бути іншим, з іншого вузла й не в тому порядку. Тож проєктне питання — не перше вікно, а друге: що стається із записами, які були в дорозі, коли перше закрилося. Це рядки 2 і 4, і три поширені відповіді намальовано нижче.
Чотири властивості роблять обрив переживним, і всі чотири дешево закласти й боляче додати згодом.
| Властивість | Що це означає конкретно | Що ламається без неї |
|---|---|---|
| Ідемпотентне приймання (рядок 4) | Кожен запис має стабільний id, згенерований на краю; отримати його двічі — те саме, що отримати один раз. | Повтор після обірваного вікна дає дублікати, і всі підрахунки тихо стають хибними. |
| Незалежність від порядку (рядок 5) | Записи несуть власний час події і розміщуються за ним, а не за послідовністю прибуття. | Учорашня партія, що прийшла після сьогоднішньої, переписує теперішнє минулим. |
| Дописувати, ніколи не перезаписувати (рядок 6) | Нова інформація є новим записом із посиланням на старий; ніщо вже збережене не заміщується. | Пізня правка видаляє початкове спостереження, і розбіжність, що важила, зникає. |
| Поновлювана передача (рядок 2) | Прогрес відстежується щодо кожного запису, тож наступне вікно продовжує, а не починає спочатку. | Черга, більша за вікно, ніколи не розбирається, бо кожна спроба починається спочатку. |
Разом вони роблять протокол синхронізації обміном незмінними фактами, а не узгодженням змінюваного стану, — а це помітно простіше зробити правильно. Це також та властивість, від якої залежить шар C2Command and control — системи командування й управлінняПЗ, що зводить доповіді з багатьох джерел в одну спільну картину, за якою можна діяти, і несе рішення, ухвалені за нею. Його центральна робота — кореляція: вирішити, чи описують дві доповіді одну річ чи дві, — і тому воно складніше за мапу, якою його зазвичай малюють.Докладніше в статті →Усі терміни, — рядок 3.1 його чеклиста: журнал доповідей лише на дозапис, а не дифф треків. Кореляцію можна перезапустити на обʼєднанні побаченого обома сторонами лише тоді, коли обидві зберегли побачене як записи, а не як поточне значення.
Що їде з кожним записом
Кожне з цих полів виглядає метаданими, і кожне вирішує щось структурне. Додати будь-яке згодом — це міграція через кожного виробника, кожне сховище й кожного споживача, тож їм місце в першій схемі. Читайте останній стовпець як причину: кожне поле тут тому, що без нього стається рядок зі вступної таблиці.
| Поле | Що воно тримає | Рядок, який воно відвертає |
|---|---|---|
| Id | Генерується на краю в момент спостереження, стабільний на кожному повторі. | 4 |
| Час події й час запису | Коли це сталося, коли платформа про це дізналася і який годинник поставив кожну мітку. | 5 і 11 |
| Походження | Пристрій, сенсор, версія ПЗ, оператор; для похідного запису — записи, з яких його виведено. | 7 |
| Клас пріоритету й термін придатності | Його місце в черзі й момент, коли він перестає бути вартим надсилання. | 1 і 3 |
| Класифікація | Категорія обробки, що вирішує, де запис можна зберігати, хто може його читати і де він може перетнути кордон. | 8 |
| Правило зберігання | Скільки його зберігають і що далі — на хабі й на пристрої. | 9 |
| Виправляє | Для виправлення — id запису, який воно змінює; оригінал лишається. | 6 |
Саме класифікація дивує інженерів, бо вона переносить юридичне питання в архітектуру. Якщо категорія записів не може покинути юрисдикцію чи не може лежати на спільному сервісі, це обмеження вирішує, де живе сховище, як маршрутизується синхронізація і які керовані продукти вам доступні, — і вирішує це раніше за будь-які міркування продуктивності. І це властивість не лише окремих записів. У січні 2018 року публічна теплова карта фітнес-застосунку, зібрана з мільярда нешкідливих пробіжок, виявилася картою маршрутів військових довкола баз, планування яких не було публічним. Платформа, що класифікує запис за записом, потребує й правила для сукупностей, а застосовувати його треба там, де таку сукупність будують, — на вивантаженні.
Зберігання ріже в обидва боки — це рядок 9. Видалення тут є обовʼязком, який хтось перевірить, а не способом зменшити рахунок за сховище, і воно має дістати до копії на пристрої, якого ви можете більше не побачити, — тож правило їде разом із записом, а пристрій виконує його сам. Резервні копії й архіви — частина, про яку зазвичай забувають; шифрувати кожен період зберігання власним ключем і знищувати ключ, коли період спливає, — так видалення дістає до копій, яких ніхто не може перелічити. Друга половина не менш реальна: у січні 2021 року хибна щотижнева задача видалення в британській Police National Computer прибрала сотні тисяч записів, які мала лишити. Прогін видалення заздалегідь переглядають, журналюють, і його можна скасувати протягом пільгового строку, перш ніж він стане остаточним.
Доказ — це результат роботи: що система знала і коли
У цій галузі показати, що щось працює, — окремий результат роботи з власною оцінкою трудовитрат: протоколи тестів, простежуваність від кожної вимоги до тесту, що її доводить, аргумент, чому безпекове обґрунтування тримається. Дата-платформа несе той самий обовʼязок після події. Коли щось іде не так, питання ніколи не звучить як «що правда зараз». Воно звучить як «що система знала в певний момент, що вона показала людині, яка діяла, і чи хтось відтоді змінював цей запис».
Механізм — два часи на кожному записі, це рядок 11. Час події — коли щось сталося; час запису — коли платформа про це дізналася. Зберігайте обидва, ніколи не оновлюйте на місці — і «станом на 14:02» стає звичайним запитом, а не неможливим. SQL:2011 стандартизував обидва види часу в таблицях, і кілька баз даних це реалізують; журнал лише на дозапис із двома мітками часу дає ту саму властивість, не залежачи від жодної з них.
| Що питає слідчий | Що платформа мала зберегти |
|---|---|
| Що система знала о 14:02? | Час запису на кожному записі й жодних оновлень на місці (рядок 11). |
| Що бачив оператор і що він обрав? | Стан відображення й рішення, записані, — рядок 6.5 чеклиста C2. |
| Звідки взялося це значення? | Походження, аж до сенсора й версії ПЗ (рядок 7). |
| Чи хтось змінював його відтоді? | Журнал лише на дозапис, записи якого зчеплені хешами, тож правку видно, і запис кожного адміністративного доступу. |
| Чи дійшов кожен запис? | Підрахунки з обох кінців кожної передачі (рядок 10). |
| Який тест показує, що вимогу виконано? | Простежуваність від вимоги до тесту, до його результату й до збірки, яку тестували. |
Двадцять років форматів
Десять–двадцять років служби тут норма, і це змінює кожне рішення про формат даних. Записи, які система пише в перший рік, мають бути читними в останній — ПЗ, якого ще не написано, і людьми, які ніколи не бачили початкової програми. Схема дає цьому числа: за політиками самих виробників усе, що читає дані, замінять кілька разів, поки дані лежатимуть на місці.
Повчальна історія — з 1986 року. BBC відзначила 900-річчя Книги Страшного суду цифровим описом Британії на лазерних дисках, які могла читати лише одна конкретна конфігурація компʼютера. До 2002 року робоче обладнання стало таким рідкісним, що вміст довелося рятувати емуляцією. Сама Книга Страшного суду, написана 1086 року, весь цей час лишалася читною.
- Відкриті, задокументовані формати з опублікованою специфікацією — не внутрішній файл одного продукту й не те, що випадково серіалізує поточна бібліотека.
- Схема їде разом із даними або на неї посилаються за версією, тож файл пояснює себе без програми, що його записала.
- Схеми розвиваються за правилами, які витримує старіший читач: поля додають, але ніколи не перепризначають, а невідоме поле зберігають, а не відкидають.
- Зразок кожної версії схеми архівують, і новий читач читає його на кожному релізі, — рядок 12 у вигляді тесту.
- Носії мігрують за графіком, поки приводи для них ще легко купити, а не тоді, коли відмовить останній.
Сім випадків — і рядок, якого вчить кожен
Збої даних в оборонці публікують рідко, тож ці випадки цивільні — з тієї ж причини, що й на сторінці про компʼютерний зір; механізми переносяться один в один. Два із семи — про дані, що вціліли, а не зникли, бо це друга половина уроку: слідчі мали те, що записали локально, або те, що було досить малим, щоб піти першим.
| Випадок | Що сталося | Рядок, якого він учить |
|---|---|---|
| BBC Domesday Project, 1986 | Цифровий опис Британії, створений приблизно мільйоном учасників до 900-річчя Книги Страшного суду, видали на лазерних дисках для однієї конкретної конфігурації BBC Micro. До 2002 року робоче обладнання стало таким рідкісним, що вміст довелося рятувати емуляцією; Книга Страшного суду 1086 року весь час лишалася читною. | 12. Формат жив і помер разом з однією машиною. |
| Шатл Columbia, лютий 2003 | Коли Columbia зруйнувався під час входу в атмосферу, першою припинилася телеметрія на землю. Його бортовий магнітофон OEX, що записував сенсори, дані яких ніколи не передавали, знайшли неушкодженим біля Гемфілла, Техас, 19 березня 2003 року. Його запис тривав і після втрати телеметрії й дав слідчим показники, яких більше ніде не було. | Перше правило сторінки, а не рядок: писати локально, завжди. Самописець зберіг те, чого канал ніколи не ніс. |
| Air France 447, червень 2009 | Airbus A330 зник над Атлантикою. Майже два роки головним доказом були 24 автоматичні технічні повідомлення, які літак надіслав через ACARS за останні хвилини і які вказували на недостовірні показники швидкості; самописці підняли з дна лише в травні 2011 року. Тепер ICAO вимагає, щоб нові великі літаки в аварійній ситуації передавали позицію щонайменше раз на хвилину. | 1. Малі критичні записи, що пішли першими, два роки були єдиними, що дійшли. |
| Теплова карта Strava, січень 2018 | Фітнес-застосунок опублікував глобальну теплову карту з мільярда активностей. У січні 2018 року австралійський студент Натан Рузер звернув увагу, що в таких місцях, як Сирія та Афганістан, вона малює маршрути пробіжок військових довкола баз, планування яких не було публічним. Кожна пробіжка була нешкідливою; сукупність — ні. | 8. Класифікацію вирішували для кожного запису, а сукупність не класифікував ніхто. |
| Post Office Horizon, рішення суду, грудень 2019 | Пʼятнадцять років британська Post Office переслідувала в суді сотні керівників поштових відділень за нестачі, які показувала її облікова система Horizon. У грудні 2019 року Високий суд встановив, що в Horizon були помилки, здатні спричиняти такі нестачі, і що рахунки відділень можна було змінювати дистанційно, — що Post Office публічно заперечувала. У 2021 році Апеляційний суд скасував 39 вироків, визнавши докази з Horizon ненадійними. | 6 і 11. Зміни не дописували з автором, тож ніхто не міг показати, хто що змінив і що система знала. |
| Результати тестів на Covid-19, Англія, жовтень 2020 | Агентство Public Health England виявило, що 15 841 позитивний результат за 25 вересня — 2 жовтня 2020 року випав зі щоденної статистики. Результати лабораторій проходили через шаблон таблиці старого формату XLS, що вміщує 65 536 рядків; усе, що виходило за межу, відкидалося без жодної помилки, і відстеження контактів для цих випадків почалося на дні пізніше. | 10. Ніщо не рахувало рядки з обох кінців. |
| Police National Computer, січень 2021 | Щотижнева задача, що мала видаляти записи з вичерпаним строком зберігання, запустилася з помилкою в коді й видалила записи, які мала лишити, — за пізнішою оцінкою відповідального від поліції, близько 213 000 записів про правопорушення, 175 000 про арешти й 15 000 про осіб, а разом із ними й повʼязані записи ДНК та відбитків пальців. | 9. Видалення запустили без попереднього перегляду, і його скасування стало окремим проєктом відновлення. |
Де це вироджується
Чесне обмеження в тому, що «зберегти й переслати» вирішує лише порядок утрат. Вузол, знищений до свого вікна, утрачає все, що тримав; черга за пріоритетом вирішує лише те, які записи вже встигли піти. Ніщо в платформі не поверне спостереження, якого не записали, і жодна черга не змусить канал на девʼять кілобіт нести відео. Чесний дизайн письмово каже, що втрачається першим, коли все йде не так, замість натякати, що не втрачається нічого.
- Класи пріоритету, де кожен виробник позначає свої записи як критичні, — і черга тихо знову стає «перший прийшов — перший пішов».
- «Офлайн-режим», перевірений тим, що кабель висмикнули на пʼять хвилин.
- Поля походження, що є в схемі й у більшості рядків кажуть «невідомо».
- Усе класифіковане за найвищим рівнем, тож нічим не можна поділитися, і люди копіюють дані вручну.
- Лише дозапис у базі — і задача вивантаження, що перезаписує.
- Політика зберігання, що існує як документ і не виконується ніде, а найменше на пристроях.
- Архів, який ніхто не читав відтоді, як його записали.
- Дашборд синхронізації, що показує частку успіхів, але не кількості, — тож передача, яка загубила половину рядків, звітує про успіх.
- «Зберігати все назавжди», подане як обережність, хоча це рішення про зберігання, якого ніхто не ухвалював.
Коли це застосовувати
Застосовуйте, коли
- Як дизайн-рев’ю для будь-якої платформи, що працює крізь довгу відсутність мережі, — дванадцять рядків угорі.
- Коли черга більша за вікно контакту: тоді порядок пріоритетів стає продуктовим рішенням.
- Коли пишете першу схему: id, обидва часи, походження, класифікація й зберігання, додані згодом, стають міграціями.
- Коли комусь колись доведеться показати, що система знала і коли, — а в цій галузі це завжди.
Уникайте, коли
- Як загальний матеріал з дата-інженерії: ним володіють розділи баз даних та інфраструктури, і ця сторінка на них спирається.
- Як настанову щодо спільної картини, збудованої з цих даних: це сторінка C2, а не ця.
- Там, де мережа справді надійна: тоді «зберегти й переслати» є складністю, за яку вам не платять.
- Як привід зберігати все назавжди: зберігання тут є обовʼязком, а не рішенням про сховище.
Джерела й метод
На чому стоїть ця стаття
- 11 джерел
- 6 задокументованих збоїв
- Перевірено 13 жовтня 2026 р.
Збої, на яких вчиться стаття
як дані губили чи псували — у таблиці кейсів- СтаттяBBC Domesday Project (відкривається в новій вкладці)Wikipedia
- Звіт регулятораColumbia Accident Investigation Board — Report, Volume IColumbia Accident Investigation Board · 08.2003
- Звіт регулятораBEA — Final Report on the accident on 1st June 2009 to the Airbus A330-203 registered F-GZCP, flight AF 447 (відкривається в новій вкладці)BEA · FAA copy · 07.2012
- СтаттяStrava Data Heat Maps Expose Military Base Locations Around the World (відкривається в новій вкладці)WIRED · 29.01.2018
- Звіт регулятораBates & Others v Post Office Ltd (No 6: “Horizon Issues”) [2019] EWHC 3408 (QB) (відкривається в новій вкладці)High Court of Justice · 16.12.2019
- Звіт регулятораHamilton & Others v Post Office Limited [2021] EWCA Crim 577 (відкривається в новій вкладці)Court of Appeal · 23.04.2021
- СтаттяExcel: Why using Microsoft’s tool caused Covid-19 results to be lost (відкривається в новій вкладці)BBC News · 05.10.2020
Практики й походження термінів
скільки живе читач даних: політики підтримки за діаграмою- ДокументаціяPostgreSQL — Versioning Policy (відкривається в новій вкладці)postgresql.org
- СтандартPEP 602 – Annual Release Cycle for Python (відкривається в новій вкладці)Python Software Foundation
- ДокументаціяUbuntu release cycle (відкривається в новій вкладці)Canonical
- ДокументаціяKubernetes — Patch Releases (відкривається в новій вкладці)Kubernetes
Дослідження з Claude. Пошук і звірку першоджерел зроблено з Claude (Anthropic). Відбір, текст і перевірку фактів — редакція Anatomy of IT Product.
Було корисно?
Поділіться з тим, хто працює над тією ж задачею.