Java & DevOps

Roman Naglič

Naše izkušnje pri vpeljavi Event Sourcing ter CQRS principov pri implementaciji rešitve doZdravnika

Roman Naglič
SRC Infonet d.o.o

Ko smo se v podjetju SRC Infonet odločali, kakšno arhitekturo uporabiti za rešitve doZdravnika, smo se najprej odločili za klasično arhitekturno rešitve JEE z uporabo aplikacijskega strežnika, JPA specifikacije za dostop in shranjevanje podatkov ter komunikacijo prek REST vmesnikov.

Načrt je bil, da produkt doZdravnika implementiramo z drugačnim pristopom pri implementaciji imenovanem DDD (Domain Driven Design), ki vpeljuje v razvoj že znane termine kot so Entities, Value Objects, Services, Repositories kot tudi nekatere nove termine kot so Aggregates, Ubiquitous language, Bounded Context, Onion architecture.

Naša prva ugotovitev je bila, da se novi principi težko implementirajo na star način. Zato smo iskali nove načine implementacije in naleteli na tako imenovani Event Sourcing pristop k implementaciji rešitve. Medtem ko klasičen način shranjevanja podatkov vedno shrani samo zadnje stanje podatkov v aplikaciji, Event Sourcing način shranjuje vse dogodke, ki so do tega stanja pripeljali in trenutno stanje vrne šele, ko izvede vse pretekle dogodke. Tak način prinaša kar nekaj prednosti pred klasičnim pristopom.

Glavna prednost po našem mnenju je, da pri implementaciji ni potrebno zajeti vsega znanja oziroma zahtev za implementacijo, temveč se funkcionalnosti enostavno dodajajo kasneje v procesu razvoja programske opreme oziroma, ko je rešitev že v produkciji, saj imamo vso zgodovino stanj shranjeno v podatkovni zbirki.

Velika prednost je tudi pri analizi delovanja aplikacije v primeru napak, saj imamo v bazi shranjen 100% pravilen audit log in vedno lahko vidimo kaj oziroma kakšni podatki so povzročili nepravilno delovanje. Tak način implementacije nam je omogočil tudi uporabe druge arhitekture rešitve imenovane CQRS (Command Query Responsibility Segregation). CQRS in Event Sourcing nam omogoča, da pri rešitvi uporabljamo dva modela in sicer enega za pisanje v bazo, pri katerem se izvedejo vsa preverjanja poslovne logike ter drugega, optimiziranega za branje podatkov iz baze. Prenos podatkov iz pisalnega v bralni model lahko poteka sinhrono ali asinhrono. Za bralni model se lahko uporabijo različni tipi podatkovnih zbirk. Tako lahko uporabimo graf baze, No SQL baze, lahko pripravimo podatke v ne normalizirani obliki in podobno.

Event Sourcing ter CQRS pristop je popolnoma neodvisen od tehnoloških rešitev in lahko teče tako na aplikacijskih strežnikih kot tudi desktop aplikacijah oziroma mikroservisih (mi smo uporabili SpringBoot za implementacijo mikroservis rešitve). Prav tako implementacija ni odvisna od vrste podatkovne zbirke. Naša rešitev trenutno teče na PostgreSQL-u, imamo pa implementirano tudi rešitev, ki shranjuje podatke v Oracle podatkovno zbirko.


Informacije o predavanju

Jezik / Language: SLO


O Avtorju

Trenutno je zaposlen v SRC Infonet, kjer je vodja Java razvoja za strežniški del nacionalne rešitve eRecepti, platforme doZdravnika, zaZdravnika ter rešitve Vrstomat. V preteklosti je bil zaposlen v Oracle Consultingu na poziciji Principal Consultant, zadolžen za MiddleTier tehnologije (WebLogic server, Java, ADF, Oracle SOA Suite, Oracle Service Bus …). Kot del Oracle Consultinga je sodeloval na različnih projektih v Turčiji, Grčiji, Nemčiji, Rusiji, Danskem, Hrvaški, …).