app design architecture

61
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

Upload: roman-pichlik

Post on 12-May-2015

224 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: App Design Architecture

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

Page 2: App Design Architecture

Architektura

Sunday 26 May 13

Page 3: App Design Architecture

Sunday 26 May 13

Sagrada Familia (Barcelona), Chrám Sv. Víta v Praze

Page 4: App Design Architecture

“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í

Page 5: App Design Architecture

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

Page 6: App Design Architecture

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

Page 7: App Design Architecture

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

Page 8: App Design Architecture

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

Page 9: App Design Architecture

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

Page 10: App Design Architecture

“Nefunkční” požadavky

Sunday 26 May 13

Page 11: App Design Architecture

Kvalita

Sunday 26 May 13

Zaměření na atributy nesouvisející přímo s funkčními požadavky

Page 12: App Design Architecture

škálovatelnost špatná výkonnost

Kvalita

Sunday 26 May 13

Zaměření na atributy nesouvisející přímo s funkčními požadavky

Page 13: App Design Architecture

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

Page 14: App Design Architecture

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

Page 15: App Design Architecture

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

Page 16: App Design Architecture

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

Page 17: App Design Architecture

Oddělení odpovědností

Sunday 26 May 13

Page 18: App Design Architecture

Motivace• Modulárnost

• Kompozice low-level částí do větších celků

• Snížení komplexity

• Jednodušší správa

• Refactoring

• RozšířitelnostSunday 26 May 13

Page 19: App Design Architecture

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

Page 20: App Design Architecture

Vzory (Patterns)

Sunday 26 May 13

Page 21: App Design Architecture

Sunday 26 May 13

Návrhové vzory- mnoho problémů a jejich řešení lze generalizovat- různá úroveň abstrakce (objekty, komponenty, systémy)

Page 22: App Design Architecture

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

Page 23: App Design Architecture

• 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

Page 24: App Design Architecture

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

Page 25: App Design Architecture

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

Page 26: App Design Architecture

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

Page 27: App Design Architecture

Datová vrstva

Sunday 26 May 13

Mnoho těchto vzorů znáte z tradičních frameworků.

Page 28: App Design Architecture

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

Page 29: App Design Architecture

Lazy load

• Objekt, který neobsahuje všechny data, ale ví jak je nahrát

• Výkonost

Sunday 26 May 13

Page 30: App Design Architecture

Identity map

• Zajišťuje nahrání objektu pouze jednou v rámci business transkace

• Výkonnost

Sunday 26 May 13

Page 31: App Design Architecture

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

Page 32: App Design Architecture

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

Page 33: App Design Architecture

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

Page 34: App Design Architecture

Concrete table inheritance

• Každá třída má vlastní tabulku

• Výhodné pokud se objekty liší

• Not null sloupce

Sunday 26 May 13

Page 35: App Design Architecture

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

Page 36: App Design Architecture

Aplikační vrstva

Sunday 26 May 13

Page 37: App Design Architecture

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

Page 38: App Design Architecture

Pessimistic offline lock

• Ochrana před konkurenčním přepisem dat

• Menší propustnost

• Jistota, že transakce bude dokončena

Sunday 26 May 13

Page 39: App Design Architecture

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

Page 40: App Design Architecture

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

Page 41: App Design Architecture

Gateway

• Objekt (rozhraní) zapouzdřující přístup do externího systému

• Změna technologie

Sunday 26 May 13

Page 42: App Design Architecture

Domain model

• Model, který zapouzdřuje data a jejich vazby pro danou doménu

Sunday 26 May 13

Page 43: App Design Architecture

Service layer

• Zapouzdřuje aplikační logiku pro vyšší vrstvy aplikace

• Usnadňuje interakci

• Koordinace transakcí

Sunday 26 May 13

Page 44: App Design Architecture

Prezentační vrstva

Sunday 26 May 13

Page 45: App Design Architecture

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

Page 46: App Design Architecture

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

Page 47: App Design Architecture

Application controller• Zapouzdřuje

navigaci pro složitější flow

• Wizards

Sunday 26 May 13

Page 48: App Design Architecture

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

Page 49: App Design Architecture

Data Transfer Objects

• Přepravka pro data

• Minimalizuje počet vzdálených volání

Sunday 26 May 13

Page 50: App Design Architecture

• 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

Page 51: App Design Architecture

Návrhové problémy

Sunday 26 May 13

Page 52: App Design Architecture

• 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.

Page 53: App Design Architecture

Škálovatelnost a výkonost

Sunday 26 May 13

Page 54: App Design Architecture

Š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

Page 55: App Design Architecture

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

Page 56: App Design Architecture

Vertikální škálovatelnost

• Přidání prostředků existujícímu systému

• CPU, RAM, Disk

• Hardwarové limity

• Cena

Sunday 26 May 13

Page 57: App Design Architecture

Load balancing

Sunday 26 May 13

Page 58: App Design Architecture

Rozložení zátěže

• Round robin

• Sticky session (Affinity)

Sunday 26 May 13

Page 59: App Design Architecture

Dva módy

• Centrální load balancer

• Klientský load balancer

Sunday 26 May 13

Page 60: App Design Architecture

Škálování databáze

• Slave reads

• Sharding

• CAP theorem

Sunday 26 May 13

Page 61: App Design Architecture

• 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