Sistem COBISS – prehod v odprtokodno okolje

Sistem COBISS se je v dobrih treh desetletjih od začetkov do danes vztrajno spreminjal in rasel. V prispevku opisujemo, na katero strojno in programsko opremo smo se opirali, in napovedujemo, v katero smer smo zastavili prihodnji razvoj ob upoštevanju IZUM-ovih strateških ciljev (Šoštarič, 2019).

COBISS2 ali obdobje 1987–1996

Ko se je leta 1987 začel razvoj COBISS, še ni bilo interneta, odprtokodnega okolja Linux in programskega jezika Java. Takrat so na Univerzi v Mariboru in Univerzi v Ljubljani prevladovali strežniki VAX/VMS. Za povezovanje med strežniki se je uporabljal protokol DECnet. Različni strežniki UNIX so bili v manjšini, strežniki Windows pa še niso obstajali. Relacijske baze še niso bile razširjene, ker strojna oprema ni bila dovolj zmogljiva.

Zaradi razširjenosti sistemov VAX/VMS je bila programska oprema za COBISS2 razvita v okolju VAX/VMS. Namesto relacijskih baz se je uporabljal sistem za delo z datotečnimi zapisi, imenovan RMS (Record Management System), ki je bil del operacijskega sistema VMS. Tudi iskalni stroj (search engine), ki smo ga takrat razvili, je temeljil na uporabi sistema RMS. Zaradi uporabljene tehnologije VMS ni bila možna migracija programske opreme COBISS2 na noben drug operacijski sistem.

COBISS3 ali obdobje 1997–2000

Leta 1997 smo sprejeli odločitev o tehnološki prenovi sistema COBISS in začetku razvoja programske opreme COBISS3. Zastavili smo si dva glavna cilja: grafični uporabniški vmesnik in neodvisnost programske opreme COBISS3 od operacijskega sistema. Izbrali smo programski jezik Java. Java prevajalnik ne prevede izvorne kode v strojno kodo, ampak v vmesno kodo (java bytecode), kar omogoča, da lahko preveden program izvajamo v katerem koli okolju, ne da bi morali kodo prevajati posebej za to okolje. Pogoj je le, da v tistem okolju teče javanski navidezni stroj (JVM – Java Virtual Machine), ki vmesno kodo prevede v strojno kodo.
Za komunikacijo med storitvami smo takrat izbrali protokol CORBA, ki pa smo ga kmalu zamenjali z javanskim protokolom RMI (remote method invocation), kasneje pa s protokolom HTTP.

Posamezni segmenti COBISS3 ali obdobje 2001–2018

Prve segmente programske opreme COBISS3 smo implementirali leta 2001 in jih nameščali na strežnike Windows.

Podobno kot so danes zanimive baze NoSQL (Monogo DB, Cassandra), so bile takrat novost objektne baze, ki so obljubljale hitrejše delovanje kot relacijske baze. Zato smo se takrat odločili za objektno bazo ObjectStore. Kasneje se je pokazalo, da so objektne baze primerne le za reševanje nekaterih problemov in da so za večino primerov bolj primerne relacijske baze, ki uporabljajo povpraševalni jezik SQL (structured query language). Zato smo leta 2007 zamenjali objektno bazo ObjectStore z relacijsko bazo Oracle.

Vendar pa imajo relacijske baze probleme s skalabilnostjo, ki jo na različne načine rešujejo tako imenovane baze NoSQL (not only SQL). Ker ima vsaka knjižnica svojo bazo podatkov in ne govorimo o ogromnih količinah podatkov (ne presegajo več tera ali peta bajtov), so za sistem COBISS relacijske baze dovolj zmogljive in s tem nimamo težav.

Uporaba strežniških sistemov Windows je bila na začetku dobra odločitev, saj smo bili takrat upravičeni do bistveno cenejših akademskih licenc pri lastnikih pravic, od katerih so odvisni naši sistemi in programska oprema. Ta licenčna politika se je zdaj drastično spremenila.

Konec leta 2018 smo sprejeli strateško odločitev, da produkcijske strežnike Windows preselimo na operacijski sistem Linux (CentOS). Hkrati pa bodo podatki iz komercialne baze podatkov Oracle preseljeni v odprtokodno bazo podatkov PostgreSQL.

Leto 2019 in naprej

Programske opreme COBISS3 ni bilo treba prilagajati operacijskemu sistemu Linux, ker Java omogoča, da ista vmesna koda (bytecode) teče tudi na operacijskem sistemu Linux. Morali pa smo prilagoditi namestitvene programe. Ker sistem Windows ne razlikuje med malimi in velikimi črkami pri imenih datotek in map, Linux pa razlikuje, smo morali uskladiti konfiguracijske parametre z dejanskimi imeni datotek. Teh neskladij je bilo kar veliko, zato smo pri večini imen datotek in map uporabili male črke, da ni bilo treba razmišljati, kje uporabiti veliko črko in kje ne. Drug problem je bila obravnava poti (mape). Na sistemih Windows se za poti uporablja enočrkovna oznaka diska in leva poševnica (backslash), Linux sistem pa ne pozna oznak diskov, za poti pa se uporablja desna poševnica (slash). Da bi rešili ta problem, smo morali razviti pomožne funkcije in jih klicati pri delu z datotekami. Trenutno smo na Linux preselili približno 50 virtualnih strežnikov, 50 virtualnih strežnikov pa še uporablja Windows.

Pri prenosu podatkov iz Oracle v PostgreSQL nismo imeli večjih problemov, saj sta dialekta SQL precej podobna. Še največ problemov je bilo pri obravnavi podatkovnih tipov, ki se med bazama razlikujejo. Razvili smo procedure, ki podatke avtomatsko prenesejo in samodejno kreirajo ustrezne sheme, tabele in indekse. Razlike med sintakso ukazov SQL smo rešili z razvojem posebnih funkcij, ki so ukaz SQL tvorile različno glede na izbrano bazo podatkov. Od približno 2000 baz podatkov smo jih že približno 80 % preselili na PostgreSQL.

Funkcionalno in performančno je baza PostgreSQL primerljiva z bazo Oracle. Bistveno pa smo pridobili pri nadzoru in optimizaciji podatkov, saj obstaja ogromno brezplačnih orodij, ki omogočajo nadzor nad delovanjem baze podatkov PostgreSQL in celo vračanje na poljubno točko v preteklosti v primeru aplikativne napake (Point-In-Time Recovery). Podobna orodja za bazo Oracle so zelo draga, poleg tega pa sta njihova namestitev in uporaba precej bolj zahtevni in okorni.

Slika 1: Groba skica arhitekture sistema COBISS

Na sliki 1 je groba skica arhitekture sistema COBISS, kjer so narisane le najpomembnejše komponente. Sistem COBISS sestavlja več mikrostoritev (microservices). Za vsako knjižnico teče storitev COBISS3 in obstaja ločena baza podatkov. COBISS+ za iskanje uporablja strežnik Apache Solr, kjer so indeksirani bibliografski podatki in polni dokumenti, shranjeni v dCOBISS. Do bibliografskih podatkov dostopamo prek storitve MarcService. COBISS+ dobi podatke o zalogi in izposoji s pomočjo storitve C3Gateway, ki pošlje zahtevo v storitev COBISS3 za izbrano knjižnico. Če aplikacija COBISS3 obvesti aplikacijo COBISS+ o nekem dogodku, pošlje sporočilo strežniku COBISS+ (vmesnik API). Aplikacija dCOBISS omogoča hranjenje digitalnih vsebin in vnos analitike člankov. Posebna storitev E‑MESS zagotavlja, da se obvestilo do uporabnika pošlje po e-pošti, sporočilu SMS ali kot potisno obvestilo v aplikaciji mCOBISS. Storitev Elastic-Gateway omogoča izvajanje poizvedb po transakcijah izposoje, ki so shranjene v skalabilni shrambi Elasticsearch. Storitev Codes omogoča dostop do šifrantov in prevajanje vseh sporočil v izbrani jezik. Storitev SPPATERN za izbrano serijsko publikacijo vrne vzorec izdajanja. Storitev Spell Checker preveri črkovanje za slovenski jezik (knjižnica podjetja Amebis). Storitev RPE omogoča preverjanje naslovov z bazo podatkov Registra poslovnih enot, ki jo zagotavlja GURS. Storitev AA se uporablja za avtentikacijo in avtorizacijo uporabnikov.

Načrtovanje programske opreme COBISS4

Začeli smo razvijati programsko opremo COBISS4, ki bo arhitekturo mikrostoritev dvignila na še višjo raven. Namesto virtualnih strežnikov nameravamo uporabiti tehnologijo kontejnerjev (containers). Odprti vmesniki bodo omogočali integracijo z drugimi sistemi in integracijo storitev COBISS v druge spletne aplikacije, tehnološke spremembe pa bomo uvajali v tesni odvisnosti od razvoja tehnologije v prihodnosti (Jakarta EE, MicroProfile, GraalVM, Quarkus).

Prispevek pripravil: mag. Bojan Štok

Reference:

Šoštarič D. (2019): O strateških ciljih Instituta informacijskih znanosti. Organizacija znanja. Letn. 24, št. 1–2. Dostopno na: https://www.cobiss.si/OZ/PDF/OZ_2019_1_2_final/1924004_Sostaric.pdf.