Thursday, Dec 30, 2021
Mono praksa: Izrada sustava za nadgledanje poslužitelja
Tema stručne prakse održane tijekom jeseni 2017. bila je izrada softverskog sustava koji prati i prikuplja informacije o stanju poslužitelja te ih prikazuje putem web aplikacije.
Softverski sustav, originalnog imena Wintus („Windows status“), sastoji se od dva glavna dijela: Windows servis aplikacije koja prati i prikuplja podatke, te web aplikacije koja u stvarnom vremenu prikazuje podatke razvrstane u pet kategorija.
Prvi dio, Windows servis aplikacija, izrađena je prateći koncept višeslojne arhitekture softvera (u ovom slučaju „onion“ tipa), a sama arhitektura je ostvarena koristeći moderne principe u dizajnu softvera kao što su Dependency Injection i Inversion of Control. Kao backend ovog projekta korišten je Baasic backend as a service sustav kojeg često koristimo. Između raznih funkcionalnosti tog servisa, odabran je modul koji služi za pohranu i manipulaciju podacima te modul za upravljanje korisničkim profilima.
Web aplikacija je izrađena po uzoru na dobro poznati upravitelj zadataka u Windows operacijskom sustavu, a kategorije koje prikazuje odnose se na procesor, memoriju, te mrežni i diskovni sustav.
Arhitektura sustava
Prvi izazov koji je trebalo savladati je izrada višeslojne arhitekture - tip arhitekture koji koristi slojeve za dodjelu različite odgovornosti softverskog sustava. Takve arhitekture povećavaju fleksibilnost, održivost i skalabilnost, a glavno svojstvo je neovisnost komponenti, pa tako one mogu biti paralelno i neovisno razvijane, mijenjane i održavane.
Poveznica između dva glavna dijela arhitekture - Windows servis i web aplikacije - je Baasic servis, koji u ovom sustavu služi kao svojevrsna baza podataka. Windows servis aplikacija pohranjuje podatke na Baasic, a Web aplikacija te podatke dohvaća s Baasica, no njihov rad je međusobno neovisan. Kako bi se ostvario princip višeslojne arhitekture, pokretanje Windows servisa je odvojeno od logike prikupljanja, pohrane i zapisa podataka.
Windows servis aplikacija je tako podijeljena na četiri dijela:
- Windows servis – inicijalizira jedinstvenu shemu poslužitelja pri prvom pokretanju te poziva uslužni sloj odgovoran za logiku prikupljanja podataka,
- Uslužni sloj (Service layer) – u njemu je smještena sva poslovna logika, tj. on poziva alate za prikupljanje i alate za spremanje ovisno o korisničkim zahtjevima,
- Sloj repozitorija (Repository layer) – odgovoran je za direktnu komunikaciju s Baasicom, tj. pohranjuje sheme resursa i poslužitelja i
- Sloj modela (Models layer) – u njemu se definira izgled shema koje se pohranjuju na Baasic.
Načela dizajna (Design principles)
Za ostvarivanje potpune funkcionalnosti onion arhitekture primijenjena su sljedeća načela u dizajnu arhitekture:
U Wintus sustavu to znači da su svi slojevi arhitekture međusobno neovisni, a svaki sloj poziva usluge samo sloja nižeg od sebe. Pozivanje usluga je ostvareno putem Constructor Injection principa, najčešćom implementacijom dependency injectiona. Svaki sloj sadržava Common
projekt, u kojemu su smještena sva sučelja nekog sloja. Sučelja sadržavaju deklaracije funkcija pripadnog sloja, a sam sloj implementira ta sučelja. Kada viši slojevi trebaju usluge nižeg sloja, u konstruktor ubacuju sučelje nižeg sloja, a prilikom pokretanja sustava, to sučelje se zamjenjuje prikladnom implementacijom.
Ako je ispravno konfiguriran, o tome brine DI kontejner. U svakom sloju se definiraju mapiranja sučelja i pripadnih implementacija, a DI kontejner prilikom pokretanja sustava registrira sva mapiranja i brine o pravovremenom zamjenjivanju sučelja i implementacije. Na taj se način izbjegava nagomilavanje više instanci jer viši sloj uvijek koristi istu instancu nižeg sloja. U Wintus sustavu je korišten Autofac DI kontejner, a za određena mapiranja sučelja i implementacija korišten je AutoMapper.
Dohvaćanje stanja Windows poslužitelja
Kako bi se dohvatila stanja Windows poslužitelja korišteni su performance counteri. Oni pružaju informacije o tome koliko dobro rade operacijski sustav, aplikacija, servis ili driver, te pomažu pri detekciji „uskih grla“ u aplikaciji. Svaki performance counter kao parametre ima categoryName
, counterName
i instanceName
.
CategoryName
predstavlja ime kategorije s kojom je performance counter povezan (memorija, procesor, mrežni i diskovni sustav).
CounterName
je ime countera koji opisuje koja se veličina dohvaća. Za memoriju se dohvaća iskorištenost RAM memorije, paging file (dodatak RAM memoriji za spremanje podataka koji se jako malo koriste), te pool paged i nonpaged bytes koji predstavljaju dio sistemske memorije za objekte koji se ne mogu spremiti na disk, ali moraju ostati u fizičkoj memoriji dok se koriste i obrnuto. Kod procesora se dohvaća samo postotak vremena u kojem je procesor bio zauzet u nekom intervalu, a za diskovni sustav se dohvaća postotak slobodnog prostora na logičkim diskovima te broj byte-ova koji su poslani/primljeni s diska u vremenskom intervalu od jedne sekunde. Za mrežni sustav se dohvaća brzina slanja/primanja byte-ova putem mrežnih adaptera.
InstanceName
predstavlja ime instance kategorije performance countera.
Budući da postoji mogućnost korištenja više diskova i procesora, kreirane su liste performance countera za te dvije kategorije.
Svi podaci prikupljeni pomoću performance countera spremaju se u modele koji sadrže ime, ID poslužitelja, prikupljene vrijednosti te vrijeme. Modeli se koriste u sloju repozitorija, a zatim i na Baasic-u.
Baasic servis za rad s podacima
Baasic je Backend-as-a-Service usluga koja pruža konzistentan način upravljanja backend podacima, a za korištenje je potrebno instalirati odgovarajući SDK. Kod Wintus sustava korišten je .NET SDK za Windows servis i Angular SDK za web aplikaciju. Osim toga, aplikaciju je potrebno registrirati putem Baasic web sučelja.
U ovom sustavu, korišten je modul Dynamic Resources. Pomoću njega podaci se pohranjuju i dohvaćaju u obliku JSON shema, koristeći RESTful API, što znači da su resursi neovisni o platformi i dostupni preko HTTP zahtjeva bez potrebe za pisanjem dodatnog koda.
Web aplikacija
Web aplikacija izrađena je pomoću Angular2 razvojnog okvira te integrira Angular SDK za pristup Baasic servisu. Kao autentifikacijski sustav web aplikacije korišten je Baasic-ov Membership modul. Korisnik aplikacije ima mogućnost praćenja stanja poslužitelja (ili više njih) kroz pet kategorija: iskorištenost procesora, memorija i diska te brzina IO operacija diska i mreže.
Aplikaciju možete isprobati ovdje, koristeći sljedeće podatke za prijavu:
- Email: demo@wintus.com
- Password: wintus.123
Daljnji rad
Daljnji rad na Wintus sustavu bio bi usmjeren na izradu servisa koji je više user-friendly ili bi se mogao izraditi još jedan servis koji analizira rad i putem notifikacija obavještava korisnika o mogućim problemima ili jednostavno podnosi izvještaj rada. Primjerice, dodatni servis može raditi predikciju iskorištenosti baze podataka i pravovremeno obavještavati korisnika o skoroj popunjenosti.
Što se tiče Web aplikacije, ona bi se mogla proširiti u smislu prikaza više podataka u različitim formatima. Također, mogla bi nuditi više opcija kao što su prikaz stanja poslužitelja u točno određenom trenutku te prikaz statistike stanja određene komponente kroz duži vremenski period.