Message-centric nebo Data-centric?
Když potřebujete přenášet data mezi aplikacemi a zařízeními v distribuovaném prostředí tak napřed zvolíte způsob komunikace pro danou část systému:
👉 Point to point,
👉 Client-Server
👉 Publish-Subscribe
Aby jste usnadnili komunikaci mezi komponentami systému, tak si zvolíte technologii nebo aplikační protokol pro komunikaci. Např. MQTT, RESTFull HTTP, gRPC, AMQP, CoAP, DDS, Kafka a další.
Ale co data?
Jak data přenášíte určí, zdali váš systém je zaměřen na přenos zpráv✉️, nebo spíše na sdílení dat📊. A na rozdíl mezi message-centric a data-centric systémem se podíváme v tomto videu🎞️👇.
➡️ Message-centric technologie: Důraz je kladen na doručování zprávy a infrastruktura neřeší co zpráva nese za data.
➡️ Data-centric technologie: Důraz je kladen na uživatelem definována data a jejich sdílení mezi aplikacemi. Infrastruktura zná obsah dat.
To je podobné jako u databází. Je definována struktura dat a je k nim umožněn jednotný přístup (CRUD). Akorát v DB jsou data uložená a musím si je vyžádat. Ale když potřebuji komunikovat mezi zařízeními a aplikacemi v reálném čase, tak ta data potřebují obdržet, když vzniknou a ne se na ně pořád dotazovat.
Výhodou zaměření se na data je ten, že
👉 datové položky se nemění tak často
👉 data může využít více aplikací.
Když však posíláme zprávy, tak jsou často závislé na daném použití nebo pro danou aplikaci. S větším počtem aplikací roste i počet různých zpráv, čímž roste složitost systému.
Aplikace pracují s datovým modelem a ne přímo samy se sebou. Místo toho jedna aplikace změní stav datového objektu a ostatní tuto změnu pozorují. To přináší volnou vazbu mezi aplikacemi.
Sdílený datový model je důležitý.
Proto se začaly používat XML a JSON. Jenže toto jsou textové, samopopisné jazyky, které nejsou efektivní pro přenos (síť i procesor). Proto vznikly např. Protocol Buffery nebo Apache Avro (Apache Kafka), které efektivně definují strukturu dat pro přenos. Je tak možné provádět jednoduše serializaci a deserializaci, validaci, a je tak usnadněna integrace.
Při použití výměny zpráv tak aplikace musí dále řešit například i filtrování, cachování, udržování dat (aplikace si vytváří svůj pohled na data v systému a udržuje si je v paměti nebo v databázi).
Ale čím více kódu je nutné napsat v aplikacích, tak tím vzniká i větší riziko chyb❌.
Kdy tedy zvolit jednotlivé přístupy. Záleží na použití.
➡️ Message-centric:
Když je potřeba zpracovat postupně všechny zprávy. Nebo mám centralizované řešení. Nebo potřebuji provádět load balancing. Tak je vhodnější zvolit přenos zpráv.
➡️ Data-centric:
Jestli však potřebujete snížit složitost u větších systémů, kde aplikace a zařízení jsou dynamicky přidávány a odebírány, je potřeba více kontrolovat přenos dat, nebo potřebujete usnadnit jejich integraci, tak bude vhodnější zvolit přístup zaměřující se na data (rozhraní je tvořeno daty s jasně definovanými operacemi pro přístup).
Jestli vás data-centric přístup zajímá, tak se podívejte na stránky www.datacentricmanifesto.org.
Zajímá-li vás technologie Data Distribution Service™ (DDS) 🌀, tak se podívejte na stránku www.pavelpohanka.cz/dds kde uvádím 10 věcí, které byste měli vědět o DDS dříve, než ji použijete ve svém projektu.