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