|

Formáty dat pro přenos mezi aplikacemi

V rámci distribuovaných systémů potřebujete sdílet data. Jaký formát dat ale zvolíte, abyste mohli komunikovat mezi aplikacemi nezávisle na programovacím jazyku a operačním systému. Na formáty serializace dat pro přenos strukturovaných dat mezi aplikacemi se podíváme v tomto videu 🎞️👇.

Nejznámější formáty jsou
👉 XML
👉 JSON (JavaScript Object Notation)

Ty jsou jsou používaný u webových API buď pomocí protokolu SOAP nebo pomocí architektury REST.

Pak si řeknete, že JSON a XML jsou moc ukecané a pomalu se parsují a vy už máte větší systém a potřebujete rychlost. Tak opustíte textově orientované formáty serializace a použijete binární serializaci.

Nejznámější binární formáty pro serializaci dat jsou:
👉 Apache Thrift,
👉 Google Protocol Buffers
👉 Apache Avro,

U technologie DDS® je to pak
👉 CDR – Common Data Representation od konsorcia OMG
👉 XCDR™ – Extended Common Data Representation od konsorcia OMG

Všechny tyto formáty využívají schémata pro určení struktury přenášených dat a jsou také vhodné pro dokumentaci.

Takže máme schémata:
👉 XML Schema
👉 JSON Schema
👉 Protocol Buffer Schema
👉 Avro Schema (JSON, IDL)
👉 IDL (Interface Definition Language), který používá DDS.

Z těchto schémat je pak možné vygenerovat kód pro zápis a čtení dat v aplikaci.
Každý formát data serializuje jinak, takže tyto formáty nejsou interoperabilní mezi sebou.

Co však dělat, když se změní toto schéma❔

Každý systém prochází nějakou evolucí a tak se mění i struktury přenášených dat.

Thrift, Protobuf, Avro i DDS umožňují provádět úpravy schématu a tak v systému mohou být aplikace, které mají různé verze schémat. To je opravdu důležité, protože jsme schopni postupně aktualizovat různé části systému nezávisle bez nutnosti se starat o kompatibilitu.

👉 U Protocol Bufferů je každé pole otagováno (číslo položky a typ položky), takže když je přidáme nebo vynecháme položku, tak jsme schopni stále zprávu číst pomocí cílového schématu.

👉 Thrift je podobný protobufferům.

👉 Avro je také dopředně i zpětně kompatibilní, nicméně nutnou podmínkou je znalost schématu zapsané zprávy a cílového schématu. Ty mohou být různá, ale změny v nich musí být kompatibilní. Avro nepodporuje volitelná položky jinak než přes union.

Výhodou u Avra je zase to, že umožňuje velmi jednoduše pracovat i s protobuffery, thriftem, jsonem a umožňuje serializovat data bez nutnosti generovaní kódu pro serializaci a deserializaci.

👉 U DDS jde vlastně o takovou kombinací Protobufferů a Avra. DDS pomocí specifikace DDS-XTYPES umožňuje datový typ definovat pomocí IDL, XSD, XML nebo pomocí API (TypeObject) a poskytuje dopřednou i zpětnou kompatibilitu. Data tak mohou být vytvořena až za běhu aplikace a druhá strana je schopna je přečíst na základě datového typu, který je zaslán při vyhledávání aplikací.

DDS-XTYPES umožňují nejvíce kompatibilních změn schématu, když je rozšiřitelnost dobře použita. Nicméně každá z DDS implementací má různou podporu pro DDS-XTypes.

Nejjednodušší je to u protobufferů, kdy jsou jednotlivé položky tagovány, ale musí se dávat pozor na čísla tagů.

Zajímají-li vás formáty pro serializaci dat, tak se můžete podívat na Wiki.

Máte li zájem o technologii DDS, tak si stáhněte myšlenkovou mapu o DDS ze stránky www.pavelpohanka.cz/dds

PP
Author: PP

Podobné příspěvky

Napsat komentář

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