Offline-first laboratorijska platforma sa dva nivoa sinhronizacije
Arhitektura laboratorijskog sistema za terenske tehničare, lokalne lab servere i odloženu cloud sinhronizaciju tokom prekida veze.
Sistem podržava laboratorije koje obrađuju uzorke hrane, industrijskih postrojenja, reka i životinja. Prati životni ciklus od prijema uzorka, preko metoda testiranja i provera patogena ili bolesti, do konačnog statusa.
Izazov
Platformi su bila potrebna dva offline režima, ne samo jednostavna opcija da se podaci sačuvaju za kasnije. Terenski tehničari mogu biti van Wi-Fi dometa i i dalje unositi podatke o uzorku, status testiranja i napomene lokalno na mobilnom uređaju. Cela laboratorija takođe može izgubiti vezu sa cloud-om i nastaviti rad preko lokalnih servera bez zaustavljanja prijema uzoraka.
Ta razlika je važna jer su načini otkaza različiti. Mobilni uređaj se često ponovo poveže i obično ima rad jednog korisnika za usklađivanje. Prekid veze cele laboratorije može uključiti više korisnika, više modula i duži red poslovnih događaja koji se moraju ponovo poslati bez dupliranja izveštaja ili kvarenja statusa uzorka.
Arhitektura
Offline rad na uređaju koristi RxDB u browser-u. Offline rad laboratorije koristi lokalne servise i RabbitMQ federation za sinhronizaciju sa cloud RabbitMQ kada se konekcija vrati.
Aplikacija je modularni monolit sa jasnim granicama modula. Identity je izdvojen kao nezavisan servis zbog buduće Single Sign-On podrške. Moduli komuniciraju preko service bus-a i koriste Inbox/Outbox pattern lokalno i u cloud okruženju.
Lokalna laboratorijska instalacija drži operativni tok tokom prekida veze. Korisnici mogu primati uzorke, dodjeljivati metode testiranja, unositi opazanja i pomjerati rad kroz interne statuse. Kada se cloud konekcija vrati, lokalni broker federiše događaje prema cloud brokeru, a platforma usklađuje stanje kroz idempotentne handlere.
Inženjerske odluke
Arhitektura namjerno zadržava većinu poslovnih mogućnosti unutar modularnog monolita. Time se smanjuje pritisak distribuiranih transakcija i domenska pravila ostaju blizu podataka koje štite. Sistem i dalje koristi asinhrone poruke za integracione granice, ali ne razdvaja svaki modul u poseban servis prije nego što za to postoji stvarna operativna potreba.
Identity je izuzetak. Izdvojen je ranije jer autentifikacija, autorizacija i buduća Single Sign-On integracija imaju drugačiji životni ciklus od laboratorijskih workflow modula. Nezavisan Identity takođe olakšava podršku za više klijenata i okruženja bez vezivanja login logike za release ciklus obrade uzoraka.
Pouzdanost
Inbox i Outbox tabele štite tok poruka na obje strane konekcije. Komanda koja mijenja stanje uzorka može se sačuvati zajedno sa odlaznim event zapisom, a pozadinski dispatcher kasnije objavljuje event na RabbitMQ. Consumer-i bilježe obrađene identifikatore poruka prije sporednih efekata, pa je replay nakon ponovnog povezivanja očekivan dio sistema.
Rješavanje konflikata prati poslovno vlasništvo nad podacima. Konflikti na uređaju rješavaju se blizu rada tehničara, jer uređaj najčešće posjeduje najnovije terensko opažanje. Laboratorijska sinhronizacija je stroža: centralni status uzorka, status izveštaja i dodjela metoda prolaze kroz serverska pravila kako više korisnika ne bi tiho prepisalo kritične odluke.
Rezultat
Dizajn podržava terenske tehničare, lokalne laboratorijske timove i cloud operatore bez nametanja jednog modela sinhronizacije svim slučajevima. Platforma ima prostor za rast prema Single Sign-On-u, dodatnim laboratorijskim modulima i jačim integracionim tokovima, dok prva produkciona arhitektura ostaje razumljiva inženjerskom timu.