Figura 1.5.1 Conceptul de coadă 12 [605521]

Capitolul I – Concepte generale CAPITOLUL I Concepte generale În acest capitol vom discuta despre conceptele general valabile în cadrul dezvoltării de soluții software web. Vom trece în revistă de la aspectele ce apar în faza incipientă, cum ar fi arhitectura aplicației, până la funcționarea efectivă a ei în Internet prin intermediul protocolului HTTP. Mai mult decât doar simpla interacțiune a aplicației cu HTTP, veți putea observa exemplificat prin ciclul (client-server-client) unui request, ce este un server web împreună cu componentele acestuia și de ce este nevoie de un server web în contextul aplicaților web. Datorită evoluției continue a tehnologiilor prezente în industrie, în subcapitolele 1.5-1.7 se va analiza beneficiile tehnologiei cloud-computing și o modalitatea de integrare a ei: message queues. Iar pentru că soluțiile software web sunt de tipul client-server nu putem trece mai departea peste conceptele generale fără să facem o scurtă introducere a celor două limbaje ce predomină această sferă: PHP și JavaScript. 1.1 Arhitecturi stratificate În industria IT termenul arhitectură este unul pe care o mulțime de oameni încearcă să îl definească, dar cu prea puțin acord între definiți. Din multitudinea de definiți sunt doar două elemente comune: definește la nivel macro împărțirea unui sistem în mai multe bucăți și caracterizează decizi ce sunt greu de luat [1]. În continuare vom analiza primul element. În cadrul împărțiri unui sistem cu o complexitate mai mare se poate observa foarte ușor cum segmentele rezultate se pot defini la rândul lor ca și sisteme, unele fiind independente (funcționează fără a fi nevoite să cunoască tot contextul, microservices de exemplu) sau subsisteme. Procesul de dezvoltare software în industrie se caracterizează în majoritatea companiilor a fi agile, iar caracteristica principală a agile este adaptivitate echipelor de-al lungul dezvoltării soluțiilor software pe baza feedback-ului și a nevoilor continue ale utilizatorilor și clienților (în cazul outsourcing). Totuși există necesitatea stabiliri câtorva detalii atât tehnice, cât și non-

Capitolul I – Concepte generale tehnice, încă din faza incipientă a dezvoltări produsului software, mai exact faza de analiză a cerințelor. Noțiunea de arhitectură a unei aplicații este temelia soluțiilor software, deoarece prin intermediul ei se stabilesc majoritatea detaliilor tehnic. Definirea arhitecturi vine din necesitatea de a fi cât mai eficienți în timpul dezvoltări unei soluții software. Astfel, deciziile arhitecturale influențează într-o mare măsură evoluția etapelor de dezvoltare, alegerea membrilor echipei și pot aduce un aport negativ pe toată perioada de implementare dacă acestea sunt luate greșit Când vorbim despre arhitecturi stratificate se evidențiază trei mari straturi (layers): Layer Responsabilități Presentation Asigurarea serviciilor, afișarea informațiilor, manipularea interacțiuni utilizatorilor cu sistemul (click-uri, apăsarea tastelor), request-urile HTTP. Domain Logica și modelarea datelor sistemului. Data Source Comunicare cu baza de date, sisteme de mesaje, alte pachete. Tabel 1.1.1 Cele trei layere principale ale unei arhitecturi software [1] Presentation conține logica ce se ocupă de interacțiunea dintre utilizatori și aplicația în sine. Acest layer depinde de context și poate fi doar un simplu meniu în linia de comandă sau o interfață grafică complexă construită în HTML, CSS și JavaScript. Responsabilitatea principală a acestui layer este de a afișa informațiile utilizatorului, să interpreteze acțiunile acestuia și să le trimită mai departe către layer-ul corespunzător (în cazul de față domain). Domain denumit și business logic, reprezintă punctul de rezistență a unei aplicații. În cadrul acestui layer se realizează toate calculele pe baza inputului și a datelor stocate. Entitățile prezente în acest layer sunt modelate astfel încât să îndeplinească nevoile business-ului într-o manieră optimă din punct de vedere tehnic. Data source înglobează toate acțiunile necesare pentru comunicare cu datele efective ale aplicației. Mai ales în cadrul aplicaților de o complexitate medie/mare sursa principală pentru acest layer este o bază de date, astfel este necesară prezența logicii din spatele operațiilor CRUD (Create Read Update Delete) în cadrul acestuia. Totuși, putem observa mai ales în ultimul

Capitolul I – Concepte generale deceniu că unele soluții software au o parte sau chiar toate datele preluate din alte sisteme software, respectiv trimise. Când aducem în discuție partea de tranzacționare a datelor între unul sau mai multe sisteme intervine de cele mai multe ori o infrastructură ce implică messaging queue, infrastructură ce este detailată în secțiunea 1.5 a prezentului document. De-a lungul timpului în cadrul aplicaților web s-a dezvoltat un nou tip de arhitectură, care să se muleze pe baza cerințelor software-urilor de acest tip, și anume Model-View-Controller (MVC). Această arhitectură nu face altceva decât să introducă mult mai puternic conceptul de separare a responsabilităților între componentele unei arhitecturi. Layer Responsabilități Model Format dintr-un set de clase care modelează domeniul problemei și comunică cu sursa de date. Datorită responsabilități sale de a comunica direct cu datele, acesta este necesar să fie cât mai stabil și folosibil în cadrul întregii aplicații. Deși apare primul în definirea arhitecturi, acest layer este defapt ultimul și comunică direct cu Controller-ul. View Reprezintă interfața grafică prezentată utilizatorului. Are ca fluxuri principale: – preluare input utilizator à transmitere către Controller; – preluare output de la Controller à afișare într-un format human readable utilizatorului. Controller Este cel mai utilizat layer într-o aplicație datorită responsabilităților sale: comunicare între interfața grafică și datele (stocate într-un mod computer readable). Tabel 1.1.2 Descrierea arhitecturi de tip MVC Analizând tabelul 1.1.2. putem observa că cele trei layere nu fac altceva decât să înglobeze într-un alt mod separarea prezentată în tabelul 1.1.1, separare realizată de către Martin Flower.

Capitolul I – Concepte generale 1.2 Servere web Când vorbim despre aplicații web nu putem neglija resursa principală: serverul. Privind modul de funcționare ale unui astfel de aplicație la nivelul cel mai macro posibil se observă că este vorba despre o interacțiune client – server, clientul fiind chiar browser-ul ce rulează pe dispozitivele utilizatorilor. Acesta este fără doar și poate o componentă primordială, iar ușurința de a accesa multiple informații din multiple surse (servere) prin intermediul aceeași ”uși” (n.r. browser), a determinat utilizatori din întreaga lume să descopere utilitatea aplicațiilor web. Clientul web – browserul – și serverul comunică prin tranzacționare de mesaje, formatul, conținutul și sensul acestor mesaje trebuind să fie detailate. Folosind un mod mai riguros de definire, putem privi un web server prin intermediul a trei componente ce sunt descrise în formula web server = platformă + software + informații. [2] În continuare vom defini fiecare componentă în parte: – platforma reprezintă partea hardware, sistemul de operare (de obicei special creat pentru acest scop) și cadrul necesar conectării la internet; – software totalitatea de unelte software care permit servirea de informații către client; – informațiile totalitatea de documente care sunt servite către utilizator. Activitatea unui web server este foarte simplă: primește interogări de la un browser (client) pentru anumite documente prin intermediul rețelei Internet, descifrează fiecare interogare în parte pentru a determina ce fișier trebuie să servească, verifică dacă fișierul respectiv este disponibil, și dacă îl găsește îl trimite înapoi browser-ului tot prin intermediul rețelei Internet [2]. Comunicare se realizează folosindu-se de protocolul HTTP (Hypertext Transfer Protocol). HTTP este metoda cea mai des utilizată pentru accesarea informațiilor în Internet care sunt păstrate pe servere World Wide Web (WWW). Protocolul HTTP este un protocol de tip text, fiind protocol ”implicit” al WWW. [3] În figura de mai jos se poate observa interacțiunea web server – browser prin intermediul HTTP.

Capitolul I – Concepte generale
Figura 1.2.1 Comunicarea web server – browser [6] 1.3 Baze de date relaționale O bază de date relațională este locul unde sunt stocat datele și relațiile dintre acestea în cadrul unei soluții software (desktop, web, mobile, etc.). [4] O altă definiție ar putea fi: bazele de date sunt folosite pentru managementul și stocarea datelor din cadrul unei aplicații. Ideea din spatele unei baze de date este aceea ca nici măcar programatori ce sunt implicați direct în procesul de dezvoltare a unei aplicații să nu aibă acces la procesul de stocare fizic a datelor pe hard-disk. Datorită caracterului restrictiv pe partea de stocare este nevoie de aplicații software care să permită interacțiunea, numite Sisteme de Gestionare a Bazelor de Date (în engleză: ”Database System System”), abreviat SGBD. Sistemele de Gestiunea a Bazelor de Date reprezintă tot spectrul de programe utilizate în procesul de crearea, interogarea și întreținerea. Acestea includ două tipuri de module: – module care sunt comune cu cele ale sistemelor de operare ale calculatoarelor; – module cu funcții specifice bazei de date, acestea fiind programe de descriere a bazei de date și cereri de prelucrare. [5] Conform clasamentului bazelor de date relaționale realizat de către site-ul db-engines.com, în luna Aprilie 2018 primele cinci clasate sunt: Rang SGBD Scor 1. Oracle 1289.79

Capitolul I – Concepte generale 2. MySQL 1226.40 3. Microsoft SQL Server 1095.51 4. PostgresSQL 395.47 5. DB2 188.95 Tabel 1.3.1 Clasament top 5 SGBD relaționale, luna aprilie 2018 1.4 Cloud Computing Termenul de cloud computing este bivalent fiind perceput atât ca și o tehnologie cât și ca o paradigmă de programare relativ nouă ca și introducere a ei în industrie, dar care a fost prezentată într-o variantă rudimentară în anul 1960 de către John McCarthy. Pe lângă faptul că a generat un market hype, a generat și o multitudine de definiți. Pentru a avea un grad ridicat de corectitudine în cadrul acestei lucrări vom prelua definiția celor de la NIST (The National Institute of Standards and Technology): „Cloud computing este un model care permite o utilizare convenabilă și acces la rețea la cerere într-un pool comun de resurse computaționale (de exemplu: rețele, servere, spațiu de stocare, aplicații și servicii) care pot fi rapid furnizate și lansate cu efort minim de management sau interacțiune cu furnizorii de servicii.”. [17] Această tehnologie are la bază conceptul de virtualizare care permite punerea în comun a resurselor computaționale și asignare ori reasignarea lor către alte sarcini într-o maniera ușoară. [17] Virtualizarea este tehnologia care abstractizează detaliile resurselor hardware, de obicei prin împărțirea acestora în mai multe servere virtuale (numite și VM – virtual machines). Arhitectura cloud computing poate fi divizată într-o ierarhie cu 4 straturi: hardware, infrastructură, platformă și aplicație. – partea hardware este responsabil pentru managementul resurselor fizice (CPU, memorie, lungime de bandă, etc.) de obicei dintr-un centru de date care are mai multe server în componența sa; – partea de infrastructură face referire la virtualizarea resurselor într-un mod în care se poate cu ușurință efectua suplimentarea de resurse prin intermediul unor utilitare, ne mai fiind necesară intervenția fizică în centrul de date;

Capitolul I – Concepte generale – platforma este construită pe baza infrastructurii și este formată din sistemul de operare și aplicații care permit interacționarea cu el prin intermediul unor API-uri de sistem; – aplicația este stratul cel mai de sus al ierarhiei. [17] Prin intermediul cloud computing se elimină partea de gestiune a unui server dedicat pentru o aplicație web. Totodată, elimină și sarcinile care erau destul de anevoioase pentru echipele de proiect, mai ales cele ce țin de configurarea și mentenanță a unui server, acestea intrând în atribuția unor altor entități și ușurează procesul de modificare a resurselor alocate per proiect. 1.5 Message Queues Numărul mare de request-uri este un aspect important al aplicaților web, fie că vorbim despre aplicații monolit, împărțite în microservicii sau aplicații care au la bază conceptul REST API. În cadrul aplicațiilor cu foarte mulți utilizatori datorită numărului mare de request-uri simultane și a calculelor complexe din spatele fiecărui request pot apărea foarte rapid deficiențe legate de performanță și timpul de răspuns a aplicației. Ca și răspuns în fața acestei provocări vin sistemele numite message queues (cozii de mesaje) care au la bază FIFO (First In First Out), conceptul din spatele structurilor de date de tip coadă prezent în Figura 1.5.1.
Figura 1.5.1 Conceptul de coadă [12]

Capitolul I – Concepte generale Message queues sunt folosite pentru transmiterea de mesaje între unul sau mai multe componente/subsisteme ale aplicației. Mesajele sunt stocate în coadă până în momentul procesări lor, moment după care sunt șterse (se realizează acțiunea de dequeue). O proprietatea importantă este aceea că fiecare mesaj este procesat o singură data și de către un singur consumator. Pentru trimiterea de mesaje o componentă denumită producer adaugă un nou mesaj în queue, mesajul fiind păstrat acolo până în momentul în care componenta consumer este capabilă să revendice mesajul și să-l proceseze. [13] Figura 1.5.2 Conceptul de message queues [14] Prin definiție un astfel de sistem este capabil să suporte mai mulți producători de mesaje și consumatori ale acestora, dar care să respecte proprietatea că fiecare mesaj este procesat o singură dată de către un singur consumator. Dacă este cazul ca un mesaj să fie procesat de mai mulți consumatori intervine șablonul Publish/Subscribe (Pub/Sub). În cadrul acestuia se schimbă pe lângă modul de funcționare și terminologia. Producers devin publishers, iar consumers devin subscribers. Modelul de funcționare se bazează pe trimiterea imediată a mesajelor ce sunt publicate de către un publisher către toți subscribers, care în prealabil s-au abonat la un topic. Spre deosebire de clasica abordare în care relația producer-consumer era clar definită, în cazul pub/sub relația este definită doar prin intermediul topicului pentru că nici publisher-ul nu știe cine folosește informația trimisă de către el și nici subscriber-ul nu știe de la cine a primit informația. [15]

Capitolul I – Concepte generale
Figura 1.5.3 Conceptul de Pub/Sub [16] 1.6 Search engines Un search engine este un sistem software de găsire a informațiilor din colecții largi de date. Cel mai simplu exemplu este web search engine de la Google sau Yahoo ce este capabil de a găsi informații din colecții de date de o mărime considerabilă (sute de terabyres) în doar câteva milisecunde pentru milioane de interogări concurente, dar poate fii regăsit în diferite alte aplicații software. [24] Există mai multe sisteme de tipul search engine cele mai importante fiind Lemur, Galago și Lucene care este cel mai popular dintre ele. Search engine-urile suportă două funcții majore numite indexare (vezi figura 1.6.1) și proces de interogare(vezi figura 1.6.2), iar arhitectura acestora variază, dar au ca și obiective principale: – acuratețe: trebuie să returneze cel mai relevant set de documente posibile pentru o interogare; – eficiență (viteză): returnarea setului de date pentru utilizatori cât mai rapid posibil; – adaptabilitate: capabilitatea de a returna rezultate precise chiar dacă setul de date se schimbă. [25]

Capitolul I – Concepte generale
Figura 1.6.1 Procesul de indexare în cadrul unui search engine [26] Indexarea este procesul care stochează informațiile într-o manieră cât mai eficientă pentru a putea fi ulterior găsite în momentul procesului de interogarea.

Capitolul I – Concepte generale
Figura 1.6.1 Procesul de interogare în cadrul unui search engine [26] 1.7 Server-Side programming După cum am descris în secțiunea 1.2, prin intermediul web servere-lor se realizează comunicare între browser și resursele stocate pe acesta. Conținutul livrat către browser pot fi de două tipuri: static și dinamic. Cel de tip static reprezintă conținutul care poate fi livrat către utilizator fără a mai fi nevoie generarea, modificare sau procesare acestora. De asemenea, web server-ul transmite aceeași resursă pentru indiferent de utilizator în parte. [7] Resursele dinamice sunt generate, modificate sau procesate prin intermediul script-urilor prezente în cadrul web server-ului. În momentul în care un utilizator transmite un HTTP request, acesta este analizat și pe baza informațiilor prezente în el se decide ce resursă va fi livrată către utilizator. Cele mai mari site-uri web folosesc partea de server-side programming pentru beneficiul de a livra conținut dinamic când este nevoie, de obicei date stocate într-o bază de date care sunt trimise către client pentru a fi afișate utilizându-se cod sursă (e.x. HTML și JavaScript). [8] Unul dintre cel mai notabil avantaj al acestui tip de afișare a datelor este posibilitatea de a livra conținut diferit pentru fiecare utilizator în parte. În același timp face posibilă interacțiunea cu utilizatorul mult mai plăcută prin posibilitatea de a stoca preferințele și informațiile personale sau de a trimite notificări. Toate acestea determină utilizatori să fie mult mai angajați în cadrul interacțiuni cu aplicația.

Capitolul I – Concepte generale Figura de mai jos extinde Figura 1.2.1. și reprezintă o arhitectură simplă pentru un site web dinamic:
Figura 1.7.1 Arhitectura unui site web [9] În cazul request-urilor HTTP pentru resursele statice se observa cum request-ul merge direct către web server (pasul 7) fără a mai fi nevoie să treacă prin procesul de analiză al aplicației. În cazul request-urilor HTTP pentru resursele dinamice, request-ul are un parcurs mai lung fiind nevoit să treacă prin procesul de analiză al aplicației care implică: – analiza URL-ului, a datelor transmise și a cookies (dacă este cazul) (pasul 2); – procesarea datelor în cadrul Web Application și interacțiunea cu baza de date (pasul 3). 1.7.1 Scurtă introducere în PHP PHP (Hypertext Preprocessor) este un limbaj de programare interpretat care a fost creat de către Rasmus Lerdorf în anul 1994 pentru uz personal, mai exact pentru a-și întreține pagina personală web. A fost primit cu entuziasm de către comunitate, astfel de-al lungul timpului s-a dezvoltat foarte mult. În momentul de față responsabilitatea de mentenanță și asigurare de noi versiuni fiind a The PHP Group. [11] La ora actuală este cel mai popular limbaj care permite construirea de aplicații web dinamice. Milioanele de site-uri web care au la bază PHP sunt dovada vie a popularități și a faptului că este un limbaj rapid de asimilat și ușor de folosit. Vorbind în cifre mai exacte,

Capitolul I – Concepte generale potrivit unor statistici realizate în anul 2017 de către compania Rougue Wave Software, 82% dintre site-urile web existente folosesc PHP. Acest lucru cu se datorează îndeosebi modernizări continue a limbajului pentru a răspunde nevoilor industriei și dorințelor programatorilor. Este important de reținut că PHP este un limbaj interpretat, nu compilat, și poate fi folosit în trei moduri: – server-side scripting: încă de la începuturile sale ca și limbaj, a fost creat pentru afișare de conținut dinamic. Pentru rularea acestuia este nevoie de un web server care să aibă un PHP parser; – command-line scripting: se pot scrie script-uri cu care utilizatori să interacționeze doar din lini de comandă. Se folosește de obicei pentru task-uri care necesită interacțiunea cu sistemul UNIX, cum ar fi sarcinile de sistem de tipul CRON (rularea anumitor acțiuni la un moment dat în timp); – client-side GUI: în anul 2001 a fost implementată o extensie a limbajului, PHP-GTK, care permite dezvoltarea de aplicații cross-platform, cu interfață grafică. 1.8 Client-side programming Client-side programming este o componentă necesară a unei aplicați web și are de-a face cu interfața pusă la îndemână utilizatorilor. Această componentă implică scrierea de cod care este interpretat de către un web client (browser-ul în general). Cele mai comune limbaje și tehnologii folosite în cadrul client-side programming sunt HTML, JavaScript și CSS. [19] În continuare vom referi client side programming ca și client. Precum am discutat în secțiunea 1.4, serverul web este amplasat într-o locație la distanță oriunde în lume. Spre deosebire de server, clientul este oriunde utilizatori aplicației o vizualizează: dispozitive mobile, laptop sau PC și este rulat de către un browser. Totul codul pe partea de client este descărcat temporar și procesat chiar pe dispozitivul utilizatorului, interacțiunea cu serverul fiind doar în momentul când apare nevoia de informații adiționale. Un exemplu de informații adiționale sunt datele stocate în baza de date a aplicației. [20]

Capitolul I – Concepte generale 1.8.1 Scurtă introducere în JavaScript JavaScript este singurul limbaj de scripting suportat nativ de către toate browsere și este folosit pentru a face paginile scrie în limbajul de marcare HTML mai dinamice și interactive, ne mai fiind nevoie să se facă refresh la pagina după fiecare interacțiune cu serverul. Acesta a fost creat în anul 1995 de către un inginer din cadrul companiei Netscape, Bredan Eich. JavaScript și-a primit numele de la limbajul Java lucru ce a ajutat pe partea de promovare a acestuia, deși nu are alte lucruri în comun față de cele pe care le are și cu alte limbaje. [22] Client-side JavaScript combină abilităție de scripting ale limbajului cu Document Object Model (DOM) care este modul de definire, cross-platform, a interfeței și tratează documentele HTML, XHTML sau XML ca și o structură de tip arbore unde fiecare nod reprezintă o partea a documentului (a pagini). JavaScript este construit în așa fel încât să poată folosi nodurile din DOM pentru a defini dinamicitatea aplicaților. [23] Mai există și partea de server-side JavaScript relativ nou introdusă prin intermediul Node.JS, dar dat fiind faptul că nu face obiectul abordării noastre vom lăsa deoparte acest aspect în cadrul acestei lucrări.

Capitolul I – Concepte generale BIBLIOGRAFIE [1] Martin Fowler, Patterns of Enterprise Application Arhitecture, Pearson Education, Inc., 2003 [2] Nancy J. Yeager, Robert E. McGrath, Web Server Technology: The Advanced Guide for World Wide Web Information Providers, Morgan Kaufmann Publishers, Inc., 1996 [3] https://ro.wikipedia.org/wiki/Hypertext_Transfer_Protocol [4] Jan L. Harrington, Relational Database Design and Implementation, Elseiver Inc, 2016 [5] https://ro.wikipedia.org/wiki/Sistem_de_gestiune_a_bazelor_de_date [6] https://mdn.mozillademos.org/files/8659/web-server.svg [7] https://www.maxcdn.com/one/visual-glossary/static-content/ [8] https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Introduction [9]https://mdn.mozillademos.org/files/13839/Web%20Application%20with%20HTML%20and%20Steps.png [10]http://static.zend.com/cmsdata/2017/devpulse-state-of-php/rw_developerpulse2016_med.png [11] https://en.wikipedia.org/wiki/PHP#History [12] https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Data_Queue.svg/2000px-Data_Queue.svg.png [13] https://aws.amazon.com/message-queue/ [14] https://d1.awsstatic.com/product-marketing/Messaging/sqs_seo_queue.1dc710b63346bef869ee34b8a9a76abc014fbfc9.png [15] https://aws.amazon.com/pub-sub-messaging/ [16] https://d1.awsstatic.com/product-marketing/Messaging/sns_img_topic.e024462ec88e79ed63d690a2eed6e050e33fb36f.png [17] Qi Zhang, Lu Cheng, Raouf Boutba, Cloud computing: state-of-the art and research challenges, Journal of Internet Services and Applications, 2010

Capitolul I – Concepte generale [18] Peter Mell, Timothy Grance, The NIST Definition of Cloud Computing, NIST Special Publication 800-145, 2011 [19] https://www.webucator.com/tutorial/learn-ajax/a-quick-overview-of-web-development/client-side-programming-reading.cfm [20] https://www.upwork.com/hiring/development/how-scripting-languages-work/ [21] https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript [22] Dane Cameron, A Software Engineer Learns HTML 5, JavaScript and jQuery, CreateSpace Independent Publishing Platform, 2013 [23] David Flanagan, JavaScript: The Definitive Guide, O`Reilly, 2006 [24] https://en.wikipedia.org/wiki/Search_engine_(computing) [25] W. Bruce Croft, Donald Metzler, Trevor Strohman, Search Engines Information Retrieval in Practice, Pearson Education, Inc., 2010 [26] http://slideplayer.com/slide/4862137/

Similar Posts