A lecture delivered for "Web Application Development" discipline (MSc studies at Faculty of Computer Science, 'Alexandru Ioan Cuza' University of Iasi, Romania): https://profs.info.uaic.ro/~busaco/teach/courses/wade/web-film.html
5. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
start with needs
do less
design with data
do the hard work to make it simple
iterate. then iterate again
build for inclusion
understand context
build digital services, not Websites
be consistent, not uniform
make things open; it makes things better
arhitecturi: principii
exemplu pentru gov.uk – Paul Downey & David Heath (2013)
14. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi
Recurgerea la metodologii moderne – exemple:
The Twelve-Factor App – vizând aplicațiile aliniate
paradigmei SaaS (Software As A Service)
http://12factor.net/
aim42 – practici și șabloane privind evoluția, mentenanța,
migrarea și îmbunătățirea sistemelor software
http://aim42.github.io/
15. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi web: componente tipice
client(i)
firewall
proxy
middleware
server(e) Web
server(e) de aplicații
framework-uri, biblioteci, alte componente/module
server(e) de stocare persistentă – e.g., baze de date
server(e) de conținut multimedia
server(e) de management al conținutului (CMS)
aplicații/sisteme tradiționale
16. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Esențialmente, de considerat:
preluarea și dirijarea cererilor – dispatch
oferirea funcționalităților de bază – core services
asocierea dintre construcții/abstracțiuni software
(e.g., obiecte) și modele de date – mapping
managementul datelor – data
monitorizarea și evaluarea sistemului – metrics
adaptare după Matt Ranney, “What I Wish I Had Known
Before Scaling Uber to 1000 Services”, GOTO Chicago 2016
http://highscalability.com/blog/2016/10/12/lessons-learned-from-scaling-uber-to-2000-engineers-1000-ser.html
17. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi web
Stratificate (layered)
Conduse de evenimente (event-driven)
Extensibile (microkernel / plug-in)
Folosind microservicii (microservices)
„În nori” (space-based, cloud)
conform M. Richards, Software Architecture Patterns, O’Reilly, 2015
www.oreilly.com/programming/free/files/software-architecture-patterns.pdf
19. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi webStratificate (layered)
separation of concerns
fiecare strat are un rol bine-stabilit, componentele
unui strat vizând funcționalitățile acestuia
layers of isolation
modificările operate la un anumit strat nu au impact sau
nu afectează componentele din alt strat
architecture sinkhole anti-pattern
fluxul de cereri traversează fiecare strat, fără a se efectua
procesări semnificative în cadrul acestuia
30. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi web
„În nori” (space-based, cloud)
consideră și rezolvă problemele vizând scalabilitatea și
concurența unui volum impredictibil de mare de cereri
tuple space
datele aplicației sunt păstrate în memorie și replicate
de toate unitățile de procesare active
fără stocare centralizatădistributed shared memory
http://wiki.c2.com/?TupleSpace
42. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
implementare
Server de aplicații Web
poate încuraja sau impune o viziune arhitecturală
privind dezvoltarea de aplicații Web
situație tipică:
MVC ori variații (MVVM – Model View ViewModel,
MVP – Model View Presenter,
PAC – Presentation Abstraction Control)
43. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
implementare
Server de aplicații Web
simplifică maniera de invocare
de programe (script-uri) ale unei aplicații Web
generarea de conținut dinamic pe partea de server
(re)vezi prezentarea despre inginerie Web:
https://profs.info.uaic.ro/~busaco/teach/courses/web/web-film.html#week3
45. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
implementare
Framework (cadru de lucru)
facilitează dezvoltarea de aplicații Web complexe,
simplificând unele operații uzuale
(e.g., acces la baze de date, caching, generare de
cod, management de sesiuni, control al accesului)
și/sau încurajând reutilizarea codului-sursă
48. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
implementare
Bibliotecă Web (library)
colecție de resurse computaționale reutilizabile
– i.e., structuri de date + cod –
oferind funcționalități (comportamente) specifice
implementate într-un limbaj de programare
poate fi referită de alt cod-sursă (software):
server de aplicații, framework, bibliotecă,
serviciu, API ori componentă Web
70. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
71. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
72. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
73. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
74. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
75. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
76. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
77. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
small
each running in its own process
lightweight communication mechanisms (usual, HTTP)
built around business capabilities
independently deployable
minimum of centralized management
may be written in different programming languages
may use different data storage mechanisms
caracteristici ale microserviciilor conform
James Lewis & Martin Fowler, Microservices (2014)
http://martinfowler.com/articles/microservices.html
84. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
implementare
de la cereri efectuate de client la obținerea răspunsului
oferit de API via microservicii funcționale
bazate pe cele vizând infrastructura
M. Richards, Microservices vs. Service-Oriented Architecture,
O’Reilly, 2016
91. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitectură bazată
pe servicii Web
arhitectură recurgând
la microservicii
cazuri concrete: Amazon, Groupon, Netflix,…
de studiat prezentările lui Stefan Tilkov:
https://speakerdeck.com/stilkov
frontend
(FE)
ser-
vice
ser-
vice
ser-
vice
DB
client
ser-
vice
DB
FE FE FE
client
DB
ser-
vice
ser-
vice
DB
93. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
API „de succes” – adaptare după (Bloch, 2005)
ușor de învățat
facil de folosit, chiar și în lipsa documentației
previne utilizarea eronată
stabil și sigur
ușor de menținut
suficient de expresiv
facil de extins
implementare
vezi și S. Clarke, “Measuring API Usability”: http://drdobbs.com/windows/184405654
97. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
brow-
ser
control
proce-
sare
client „puternic”
și/sau „isteț”
arhitectura aplicațiilor Web:
serverless – aplicația depinde semnificativ de componente
externe, disponibile în „nori” – (micro-)servicii
BaaS
Mike Roberts (2016) – http://martinfowler.com/articles/serverless.html
func-
ționa-
litate1
☁
func-
ționa-
litate2
☁
☁
auten-
tificare
☁
BaaS = (Mobile) Backend As A Service FaaS = Functions As A Service
☁
FaaS
căutare
procesare
comenzi
BaaS
comenzi
produse
acces
la API
99. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Descrierea abstractă a unui API:
OpenAPI Specification (ex-Swagger) – https://openapis.org/
RAML (RESTful API Modeling Language) – http://raml.org/
API Blueprint – https://apiblueprint.org/
detalii în K. Sandoval, Top Specification Formats for REST APIs (2016)
http://nordicapis.com/top-specification-formats-for-rest-apis/
107. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
implementare
SDK (Software Development Kit)
încapsulează funcționalitățile API-ului într-o bibliotecă
(implementată într-un anumit limbaj de programare,
pentru o platformă software/hardware specifică)
API façade pattern
exemplu: Octokit (pentru .NET, Objective-C, Ruby)
oferit de Github – https://developer.github.com/libraries/
114. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
implementare: mash-ups
Surse de date
(data feeds)
Atom, RSS, geoRSS,
microdate HTML5, RDFa,…
Interfețe de programare
(API-uri)
specifice serviciilor publice
și de procesare JSON/XML/RDF
Biblioteci/framework-uri
pentru dezvoltare
framework-uri Web generice
sau oferite de organizații
Instrumente interactive
(Web tools)
eventual, disponibile în cloud
Platforme
(Platform As A Service)
Heroku, Google Cloud Platform,
Nodejitsu, Windows Azure,…
117. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
performanță: scalabilitatea și latența
limite ale API-urilor + existența versiunilor multiple
drepturi de autor asupra datelor & licențiere
securitate: abuz, confidențialitate, încredere etc.
monetizare
lipsa unei interoperabilități reale între platforme
implementare: mash-ups
127. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi: exemplu – wot
Web of Things Architecture
(în lucru la W3C, 14 septembrie 2017)
descriere independentă de implementare a unui sistem IoT
(Internet of Things) ce recurge la tehnologii Web
https://www.w3.org/TR/wot-architecture/
RDF
129. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Scop: partajare on-line a conținutului grafic (fotografii)
aplicație reprezentativă a Web-ului social
agregare de comunități – imaginea ca obiect social
suport pentru adnotări via termeni de conținut (tagging)
+ comentarii
arhitecturi: exemplu – flickr
130. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
PHP (procesare – application logic, acces la API,
prezentare de conținut via Smarty, modul de e-mail)
Perl (validarea datelor)
Java (managementul nodurilor de stocare)
MySQL (stocare în format InnoDB)
ImageMagick (bibliotecă C de prelucrare de imagini)
Ajax (interacțiune asincronă)
Linux (platformă de rulare)
alte detalii la http://highscalability.com/flickr-architecture
arhitecturi: exemplu – flickr
132. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
studiu de caz: flickrinterfețe de programare (API-uri)
oferite de Flickr
facilitează accesul la serviciile Web
în cadrul aplicațiilor rulând, eventual,
pe alte platforme
cereri via REST, XML-RPC, SOAP
răspunsuri REST, XML-RPC, SOAP, JSON
www.flickr.com/services/api/
133. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
aspecte generice vizând proiectarea:
categorii de resurse: user + picture
relații între instanțe de tip user (e.g., follow)
relații între instanțe de tip user și picture
(make, depicts, comment, like,…)
asigurarea performanței:
timp de răspuns, arhitectură software scalabilă,
stocare persistentă scalabilă, optimizarea imaginilor
recomandarea resurselor (user/picture) de interes
detalii în articolul Create a Photo Sharing App (2016)
http://blog.gainlo.co/index.php/2016/03/01/system-design-interview-
question-create-a-photo-sharing-app/
134. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Scop: descoperire și management online de evenimente
(e.g., conferințe cu caracter tehnologic)
agregare de comunități – evenimentul ca obiect social
suport pentru vorbitori și audiență, slide-uri,…
+ calendare și localități de desfășurare
concepte importante: conferences, user profiles,
e-mails, dashboard, coverage, topics, guides
arhitecturi: exemplu – lanyrd
135. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Creat aproape complet în Python (folosind Django)
și întreținut de 6 persoane
2½ backend developers
1¾ frontend developers
½ mobile developers
1½ designers
¾ system administrators
¾ business operations
A. Godwin, Inside Lanyrd’s Architecture, QCon London, 2013
http://www.infoq.com/presentations/lanyrd-architecture
arhitecturi: exemplu – lanyrd
137. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
Scop: recomandare în timp-real de știri de interes
(ziare, blog-uri,…), pe baza profilului utilizatorului
și a interacțiunii sale cu sistemul
recurge la tehnici de învățare automată, în funcție și
de sentimentul manifestat față de un articol dat
arhitecturi: exemplu – smartfetcher
138. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi: exemplu – smartfetcher
la nivel de server (backend): Node.js (framework-ul Sails)
API REST – eventual, folosit via WebSocket-uri
pentru comunicarea în timp-real cu clienții
pe partea client (frontend): Angular și Bootstrap
140. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
arhitecturi: exemplu – groupon
Scop: prezentarea de oferte privind bunuri de consum
de la o arhitectură monolitică
la una adoptând (micro-)servicii
engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/
148. Dr.SabinBuragaprofs.info.uaic.ro/~busaco
episodul viitor:
aspecte vizând modelarea cunoștințelor
model de
acces la dateservicii Web
model de calcul
ofertant
de servicii mobile
mash-up-uri la nivel
de dispozitiv mobil
model de implementare
model de interacțiune
model de comunicare
model
al fluxului
de date
⚙
⚙
⚙
⚙
GraphQL
YQL