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.

PP
Author: PP

Podobné příspěvky

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.