You are on page 1of 17

Softverski inženjering

Dizajniranje sistema
Šta je to dizajn?
• Dizajn je kreativni proces pretvaranja problema u
rešenje. Opis rešenja se takođe zove dizajn.
• Konceptualni i tehnički dizajn
Šta je to dizajn?
• Konceptualni dizajn
– pisan jezikom klijenta
– ne sadrži tehnički žargon
– opisuje funkcije sistema
– ne zavisi od implementacije
– povezan sa dokumentom specifikacije sistema

• Tehnički dizajn
– opis glavnih hardverskih komponenti i njihove funkcije
– hijerarhija i funkcija softverskih komponenti
– strukture i tokovi podataka
Raščlanjivanje i modularnost
• Modularno raščlanjivanje
• Raščlanjivanje na osnovu podataka
• Raščlanjivanje na osnovu događaja
• Dizajn spolja ka unutra
• Objektno orijentisani dizajn
Arhitektonski stilovi i strategije
• Arhitektura
• Dizajn koda
• Izvršni dizajn

• Arhitektonski stilovi
– Cevi i filtri
– Objektno orijentisani
– Implicitno pozivanje
– Slojevi
– Skladišta
– Mikroservisi
Mikroservisi
Monolitni softver

• Monolitnost
– Jedan bild i jedna jedinica za isporuku
– Jedan kod
– Jedna tehnologija (Linux, JVM, Tomcat, Libraries,…)
• Prednosti
– Jednostavan mentalni model za developere: Jedna
jedinica kojoj se pristupa za kodiranje, bildovanje i
isporuku
– Jednostavno skaliranje: Pokretanje više kopija
Mikroservisi
Problemi sa monolitnim softverom
• Ogroman i zastrašujući kod
• Preopterećeni alati za razvoj
– Refaktorisanje traje više minuta
– Bildovanje traje satima
– Testiranje prilikom kontinuirane integracije traje
danima
• Skaliranje je ograničeno
– Pokretanje kopije čitavog sistema je zahtevno u
pogledu resursa
• Ograničena frekventnost isporuke
– Ponovna isporuka zahteva zaustavljanje čitavog
sistema
– Ponovne isporuke će imati probleme i povećati rizik
Mikroservisi
Presentation
Višeslojni sistemi
Višeslojni sistemi dekomponuju monolitni sistem u
slojeve
Logic • Najčešće: prezentacioni, logički, pristup podacima
• Najčešće jedna grupa tehnologija po sloju
– Prezentacioni: Linux, JVM, Tomcat, Libs, EJB client,
JavaScript
Data Access
– Logički: Linux, JVM, EJB container, Libs
– Pristup podacima: Linux, JVM, EJB JPA, EJB container, Libs
Prednosti
• Jednostavan mentalni model, jednostavne
DB zavisnosti
• Jednostavna isporuka i skaliranje
Mikroservisi
Presentation
Problemi višeslojnih sistema
• I dalje veliki kod (jedan po sloju)
• … sa istim uticajem na razvoj, bildovanje i isporuku
Logic • Bolje skaliranje, ali i dalje ograničeno
• Uvećanje timova ograničeno: jedan tim po sloju
funkcioniše dobro
Data Access • Developeri se specijalizuju za svoj sloj
• Komunikacija između timova je ograničena zbog
pristrasnosti

DB
Mikroservisi
Kako razvijati ogromne sistema?
• Aplikacije i timovi se moraju razvijati van limita koje im
nameće monolitna i višeslojna arhitektura. To se i dešava, ali
nekontrolisano.
• Velike kompanije završavaju sa morem višeslojnih sistema koji
često međusobno komuniciraju na nedokumentovan način.
• To često završava na neočekivani način.

Kako onda velike kompanije i dalje funkcionišu?


• Posmatranjem velikih kompanija kao što su Amazon i Netflix
dolazimo do principa mikroservisne arhitekture.
Mikroservisi
Service Oriented Architecture. Ništa novo!

Monolitna arhitektura
ModuleModuleModule Module
A B c D

PRESENTATION LAYER

BUSINESS LOGIC LAYER

DATABASE LAYER
Mikroservisi
Osnovni princip
Funkcionalna dekompozicija sistema u upravljive komponente
koje se mogu nezavisno isporučivati.

• Pojam “mikro” se odnosi na veličinu: mikroservis je takve


veličine da može da ga održava jedan tim (5-9 developera)
• Funkcionalna dekompozicija sistema podrazumeva vertikalno
sečenje (za razliku od horizontalnog kod slojeva)
• Nezavisna isporuka podrazumeva da nema deljenih stanja i
komunikaciju između procesa (često preko HTTP RESTful
interfejsa)
Mikroservisi

Monolitna Mikroservisi
Mikroservisi
• Svaki mikroservis je funkcionalno
samostalan sa:
– Reprezentacijom resursa
– Upravljanjem podacima
• Svaki mikroservis se bavi samo jednim
resursom:
– Klijentima
– Artiklima
– Korpom
– Kupovinom

• Mikroservisi su „zabavno dimenzionisani“.


I dalje su zabavni za razvoj i isporuku.
Mikroservisi
Nezavisna isporuka je ključna
• Omogućava podelu i nezavistan napredak
– koda
– Korišćenih tehnologija
– skaliranja
– … pa i funkcionalnosti
Nezavistan kod
• Svaki servis ima sopstveni repozitorijum
– Kod je lak za održavanje. „Staje u mozak“.
– Alati rade brže (bildovanje, testiranje,
refaktoring u sekundama)
– Podizanje servisa traje nekoliko sekundi
– Nema unakrsnih zavisnosti između koda
Pitanja u kreiranju dizajna
• Modularnost i nivoi apstrakcije
• Saradnja na dizajnu
• Dizajn korisničkog interfejsa
– Pitanja kulture
– Preferencije korisnika
• Konkurentnost
• Šabloni dizajna i višekratno korišćenje
Karakteristike dobrog dizajna
• Nezavisnost komponenti
• Prepoznavanje i obrada izuzetaka
• Sprečavanje grešaka i otpornost na greške

You might also like