app design architecture
TRANSCRIPT
Architektura a její návrh
Spring framework training materials by Roman Pichlík is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Sunday 26 May 13
Architektura
Sunday 26 May 13
Sunday 26 May 13
Sagrada Familia (Barcelona), Chrám Sv. Víta v Praze
“Applications architecture is the science and art of ensuring the suite of applications being used by an organization to create the composite architecture is scalable, reliable, available and manageable”
http://en.wikipedia.org/wiki/Applications_architecture
Sunday 26 May 13
Věda a umění stejně jako v případě architektonických skvostů ve stavitelství
Architektura a její základní charakteristika
Sunday 26 May 13
zájmy = uživatelé, vlastníci, operationsco a jak= integrita, vize je oddělená od vlastní implementace => umožňuje další evoluci
Respektuje zájmy všech
Architektura a její základní charakteristika
Sunday 26 May 13
zájmy = uživatelé, vlastníci, operationsco a jak= integrita, vize je oddělená od vlastní implementace => umožňuje další evoluci
Respektuje zájmy všech
Oddělení odpovědností
Architektura a její základní charakteristika
Sunday 26 May 13
zájmy = uživatelé, vlastníci, operationsco a jak= integrita, vize je oddělená od vlastní implementace => umožňuje další evoluci
Respektuje zájmy všech
Oddělení odpovědností
Odděluje Co a Jak
Architektura a její základní charakteristika
Sunday 26 May 13
zájmy = uživatelé, vlastníci, operationsco a jak= integrita, vize je oddělená od vlastní implementace => umožňuje další evoluci
Respektuje zájmy všech
Oddělení odpovědností
Řízená kvalitouOdděluje Co a Jak
Architektura a její základní charakteristika
Sunday 26 May 13
zájmy = uživatelé, vlastníci, operationsco a jak= integrita, vize je oddělená od vlastní implementace => umožňuje další evoluci
“Nefunkční” požadavky
Sunday 26 May 13
Kvalita
Sunday 26 May 13
Zaměření na atributy nesouvisející přímo s funkčními požadavky
škálovatelnost špatná výkonnost
Kvalita
Sunday 26 May 13
Zaměření na atributy nesouvisející přímo s funkčními požadavky
rozšiřitelnost technologický dluhoverengineering
škálovatelnost špatná výkonnost
Kvalita
Sunday 26 May 13
Zaměření na atributy nesouvisející přímo s funkčními požadavky
rozšiřitelnost technologický dluhoverengineering
operovatelnost drahý provoz
škálovatelnost špatná výkonnost
Kvalita
Sunday 26 May 13
Zaměření na atributy nesouvisející přímo s funkčními požadavky
rozšiřitelnost technologický dluhoverengineering
operovatelnost drahý provoz
škálovatelnost špatná výkonnost
Kvalita
bezpečnost zranitelnost
Sunday 26 May 13
Zaměření na atributy nesouvisející přímo s funkčními požadavky
rozšiřitelnost technologický dluhoverengineering
operovatelnost drahý provoz
škálovatelnost špatná výkonnost
Kvalita
bezpečnost zranitelnost
testovatelnost nepředvidatelnost
Sunday 26 May 13
Zaměření na atributy nesouvisející přímo s funkčními požadavky
Oddělení odpovědností
Sunday 26 May 13
Motivace• Modulárnost
• Kompozice low-level částí do větších celků
• Snížení komplexity
• Jednodušší správa
• Refactoring
• RozšířitelnostSunday 26 May 13
Dva zásadní vzory
• Oddělení struktury dat od jejich prezentace
• Rozdělení aplikace na vrstvy s různou odpovědností
• Třívrstvá architektura
Sunday 26 May 13
Vzory (Patterns)
Sunday 26 May 13
Sunday 26 May 13
Návrhové vzory- mnoho problémů a jejich řešení lze generalizovat- různá úroveň abstrakce (objekty, komponenty, systémy)
GoF Design patterns
• Vzory řešící vznik objektů
• Vzory řešící strukturu objektů
• Vzory řešící chování objektů
Sunday 26 May 13
Řeší problémy na úrovni návrhu objektů a jejich interakce- Factory a Factory method, Builder, Lazy initialization, Object pool, Singleton- Bridge, Composite, Decorator, Facade, Proxy- Template method, Strategz, Null object, Iterator, Command
• Cvičení
• Vyjmenujte alespoň 4 GoF návrhové vzory, které používá vaše aplikace případně knihovny, které používáte
Sunday 26 May 13
J2EE patterns• Vzory řešící prezentační
vrstvu
• Vzory pro aplikační logiku
• Vzory integrační vrstvy
Sunday 26 May 13
Vznikly na základě složitosti Java EE- Composite view, View helper, Front controller, Application controller- Service facade, Transfer object, Business object, Service locator- Data Access Object, Web service broker
Architektonické vzory• Martin Fowler a kol.
• Rozdělení vzorů podle vrstev
• De facto standard pro popis částí aplikace
• Vliv
• Webové a ORM frameworky
Sunday 26 May 13
Vzory ovlivňovaly celou řadu oblastíORM - active record, lazy load, identity map, mapování dědičnostiWebové frameworky - front controller, application controller, MVC
Datová vrstva aplikace
Data Source Architectural Patterns
Object-Releation vrstvaObject-Relational
Behavioral PatternsObject-Relational Structural Patterns
Object-Relational Metadata Mapping
Prezentační vrstva aplikace
Aplikační vrstva aplikace
Distribution patterns
Web presentation patterns
Offline concrrency patterns
Session state patterns
Domain logic patterns Base patterns
Sunday 26 May 13
Datová vrstva
Sunday 26 May 13
Mnoho těchto vzorů znáte z tradičních frameworků.
Query object• Objekt zapouzdřující
databázový dotaz
• Interpretr z GoF
• Umožňuje různý způsob překladu v závislosti na persistentním úložišti
Sunday 26 May 13
Lazy load
• Objekt, který neobsahuje všechny data, ale ví jak je nahrát
• Výkonost
Sunday 26 May 13
Identity map
• Zajišťuje nahrání objektu pouze jednou v rámci business transkace
• Výkonnost
Sunday 26 May 13
Unit of Work
• Udržuje seznam všech objektů načtených a modifikovaných v rámci business transakce
• Zajišťuje správné pořadí DML příkazů
• DELETE, INSERT, UPDATE
Sunday 26 May 13
Active Record
• Objekt zapouzdřuje jeden řádek v databázi
• Databázová logika součástí doménového objektu
• Usnadňuje práci klientům
Sunday 26 May 13
Single table inheritance
• Objektová dědičnost mapovaná do jedné tabulky
• Není potřeba join přes více tabulek
• select * from Players
Sunday 26 May 13
Concrete table inheritance
• Každá třída má vlastní tabulku
• Výhodné pokud se objekty liší
• Not null sloupce
Sunday 26 May 13
Serialized LOB• Graf objektů (hierarchie)
je sezializován jako celek do (B)LOB struktury
• SELECT výkonost
• Přicházíme o výhody relační databáze
Sunday 26 May 13
Aplikační vrstva
Sunday 26 May 13
Optimistic offline lock
• Ochrana před konkurenčním přepisem dat
• Umožňuje více klientům pracovat s jednou verzí dat
• Kontrola zámku při zápisu
Sunday 26 May 13
Pessimistic offline lock
• Ochrana před konkurenčním přepisem dat
• Menší propustnost
• Jistota, že transakce bude dokončena
Sunday 26 May 13
Coarse-grained lock • Zámek asociovaný
se skupinou objektů
• Jednodušší zamykání
• Výkonnost
• Není potřeba nahrávat každý jednotlivý objekt
Sunday 26 May 13
Service stub
• Odstranění těsné vazby na problematické části systému během vývoje
• In-memory stub
• Cíl
• rychlost vývoje
Sunday 26 May 13
Gateway
• Objekt (rozhraní) zapouzdřující přístup do externího systému
• Změna technologie
Sunday 26 May 13
Domain model
• Model, který zapouzdřuje data a jejich vazby pro danou doménu
Sunday 26 May 13
Service layer
• Zapouzdřuje aplikační logiku pro vyšší vrstvy aplikace
• Usnadňuje interakci
• Koordinace transakcí
Sunday 26 May 13
Prezentační vrstva
Sunday 26 May 13
Model View Controller• Oddělení odpovědností při
obsluze uživatelského rozhraní
• Umožňuje zvolit různou prezentaci
• Testovatelnost
Sunday 26 May 13
Front controller
• Obsluha společných vlastností pro celou webovou aplikaci
• Internacionalizace
• Překlad výjimek
• Snižuje komplexitu aplikačních controlleru
Sunday 26 May 13
Application controller• Zapouzdřuje
navigaci pro složitější flow
• Wizards
Sunday 26 May 13
Remote facade
• Poskytuje coarse-grained interface pro vzdálené volání
• Větší efektivita
• Menší počet síťových volání
Sunday 26 May 13
Data Transfer Objects
• Přepravka pro data
• Minimalizuje počet vzdálených volání
Sunday 26 May 13
• Cvičení
• Vyjmenujte alespoň 4 architektonické vzory, které používá vaše aplikace
• Vyjmenujte 4 Architektonické vzory, které používají knihovny ve vaší aplikaci
Sunday 26 May 13
Návrhové problémy
Sunday 26 May 13
• Anémický doménový model
• Leaky abstraction
• Prosakující API z nižších vrstev
• Overenginering
Sunday 26 May 13
Proč zavádíme abstrakci? Zjednodušení.Komplexní abstrakce leakuje ve složitejších případech - jsme nuceni pochopit jak to funguje pod kapotou např. ORM, SQL atd.
Škálovatelnost a výkonost
Sunday 26 May 13
Škálovatelnost
Škálovatelnost je schopnost systému zvýšit výkonnost proporčně k přidaným zdrojům. Zvýšení výkonnosti znamená obsluhu více požadavků a nebo požadavků větší velikosti.
--Werner Vogels CTO - Amazon.com
http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html
Sunday 26 May 13
Horizontální škálovatelnost• Scale-out
• Přidání nových výpočetních uzlů
• Cluster
• Přináší sebou jinou rodinu problémů v distribuovaném prostředí
Sunday 26 May 13
Vertikální škálovatelnost
• Přidání prostředků existujícímu systému
• CPU, RAM, Disk
• Hardwarové limity
• Cena
Sunday 26 May 13
Load balancing
Sunday 26 May 13
Rozložení zátěže
• Round robin
• Sticky session (Affinity)
Sunday 26 May 13
Dva módy
• Centrální load balancer
• Klientský load balancer
Sunday 26 May 13
Škálování databáze
• Slave reads
• Sharding
• CAP theorem
Sunday 26 May 13
• Workshop návrh rezervačního systému ubytování (booking.com)
• Systém má tyto základní části
• Billing, User/Hotel management, Booking, Frontend
• Billing je zajišťován externím systémem
• Login do systému je možný i přes OpenId (Facebook)
• Aplikace je webová a musí umožnit přístup z mobilních zařízení
• Očekává se integrace s dalšími systémy
• Navrhněte základní architekturu systému
• Komponenty/Služby a jejich vrstvy
• Jakým způsobem zajistíte škálovatelnost
• Kde očekáváte bottleneck
• Jaké technologie a proč je použijete
Sunday 26 May 13