Rozšiřitelnost datového modelu u technologie DDS®
V příspěvku Formáty dat pro přenos mezi aplikacemi jsme si řekli, jak je důležité přemýšlet o možnosti vývoje schématu datového modelu. Mluvili jsme o Protocol Bufferech, Apache Thriftu, Apache Avro a DDS-Xtypes.
A o tom jak DDS-XTypes podporují vývoj schématu se podíváme blíže v tomto videu🎞️👇.
Představte si stav, kdy integrace systémů mezi sebou a jejich rozšiřitelnost je tak snadná, že je možné dynamicky vytvářet rozsáhlé systémy.
Ale on je zde problém😞. Každý systém je potřeba rozšiřovat a upravovat a tedy měnit (změny v systému jsou nevyhnutelné). Jenže když něco změníte v datovém modelu (třeba si například přidáte do výčtového typu jednu další položku), který je součástí integračního rozhraní, tak se s ostatními aplikacemi už nemusíte domluvit.
Jak tedy zajistit dopřednou➡ (čteme nové schéma) a zpětnou⬅ (čteme staré schéma) kompatibilitu v datovém modelu?
Řešením je mít možnost přidat, odebrat, nebo nepoužívat položky v datovém modelu nové aplikace aniž bych znemožnil aplikacím komunikovat se staršími aplikacemi.
To právě umožňuje DDS-XTypes. Bez této specifikace se DDS aplikace, které neměly identické datové typy ani nepropojili.
Nyní mám možnost označit datový typ jako:
1️⃣ FINAL – v tomto případě už není možné do datového typu přidat další data. Takto označíme typy, které jsou naprosto zásadní a nesmí se měnit. Při jejich změně musíme updatovat celý systém.
2️⃣ APPENDABLE – možnost přidat element na konec.
3️⃣ MUTABLE – zde můžeme provádět přidávání kamkoliv, odebrání odkudkoliv a také provádět změnu pořadí.
Když přidáváme položky, tak je nutné dát pozor na to, že když přijímám data od starších aplikací, které tato neposkytují, tak budou hodnoty nulové. To však je normální hodnota. Proto je vhodné používat anotace
@optional – v tomto případě není problém, když tato položka v datovém modelu chybí
@must_understand – v tomto případě musí být položka přítomna.
Každá položka by měla mít vždy přiřazenu jednu z těchto dvou anotací.
Pro možnost odstranit, nebo měnit pořadí položek je potřeba označit položku datového typu číslem @Id (podobně jako u Proto Bufferů)
Nezapomeňte tedy na rozšiřitelnost systému❗
Protože distribuované systémy jako jsou i systémy pro průmyslový internet věcí jsou často rozsáhlé systémy a jsou do nich investovány nemalé peníze a očekává se od nich, že budou v provozu velmi dlouhou dobu.
Zajímá-li vás technologie DDS🌀 a její další vlastnosti, které vám umožní usnadnit vybudování systémů pro průmyslový internet věcí🌆, tak mám pro vás dobrou zprávu.
Připravuji trénink, kde popisuji technologii DDS® z nadhledu. Jestli by vás takový trénink🎥 zajímal, tak se podívejte na stránku www.pavelpohanka.cz/technologie, kde se po zadání emailu budete moci o tréninku dozvědět více.