Această întrebare stă pe limba multor arhitecți software de mai mulți ani. Dacă cineva mă întreba în urmă cu 2-3 ani ce aș alege pe post de limbaj de programare pentru a dezvolta o a aplicație bancară, aș fi răspuns că Java sau orice altceva. Astăzi, răspunsurile ar fi inversate și voi exemplifica în rândurile care urmează de ce și cum anume s-au inversat aceste roluri.
Trebuie reținut totodată că 80% din paginile web cu conținut dinamic din întreaga lume folosește PHP. Este îndeajuns să numesc câteva companii, Facebook, Yahoo, Wikipedia, pentru a ne putea da seama că PHP poate reprezenta o soluție în dezvoltarea aplicațiilor enterprise.
O foarte scurtă istorie PHP
În anul 2010, programatorii care asigura suportul și dezvoltarea noilor versiuni au decis să oprească dezvoltarea versiunii PHP 6. Sunt multe motivele care s-au perindat la acea vreme însă, din punctul de vedere al programatorilor, un real motiv a fost lipsa de motivație. Versiunea la care se lucra urma să aducă o îmbunătățire minoră dacă ne comparăm cu versiunea 7 lansată la finalul anului trecut. Astfel se justifică și de ce de la versiunea 5.x s-a sărit direct la 7 fără să existe o versiune 6 intermediară. În fapt, ea a existat, însă nu ca varianta stabilă.
Astfel, dezvoltatorii s-au concentrat pe funcționalități noi, îmbunătățiri practice și viteză. Astfel, în anul 2014 au reușit să scoată primul „build”. Nu pot spune că a fost strălucit, însă dădea speranțe că în curând PHP va ridica ștacheta și va lupta din multe puncte de vedere cu ceilalți competitori. Totuși, în tot acest interval de timp (2010-2015), piața avea nevoie de mai multe îmbunătățiri. Firma cotată cel mai bine la bursă, Facebook, nu putea aștepta ca ceva să se întâmple și a decis că e vremea să-și facă propriul lor build pentru a rezolva problema sutelor de milioane de utilizatori și a miliardelor de accesări.
Astfel, din laboratoarele Facebook, a ieșit pe piață în 2011 HHVM ce aducea o îmbunătățire majoră legată de performanță folosind un sistem ce compilează codul sursă în funcție de specificațiile server-ului pe care rulează (JIT – Just In Time). Îmbunătățirile de performanță au fost substanțiale iar, în unele cazuri, au mers până la 300%. Facebook și ulterior Wikipedia ș.a. au reușit să reducă substanțial costurile cu hardware-ul.
Ce înseamnă aplicații enterprise?
Fie că vorbim de o aplicație web simplă, gen magazin virtual, sau de o aplicație bancară, ambele pot fi considerate aplicații enterprise. Însă, ceva le diferențiază totuși:
- Securitatea partajării datelor și a schimbului de fișiere
- Gestiunea operativă
- Integrarea proceselor de business
- Experiența utilizatorului
- Scalabilitatea
- Securitatea și capacitatea de recuperare a datelor în caz de dezastre
- Interoperabilitatea între sisteme concepute inclusiv în limbaje de programare diferite
- Portabilitatea fără restricții de sistem de operare sau hardware
PHP nu a fost luat în calcul de multe firme ca o soluție pentru dezvoltarea aplicațiilor enterprise dintr-un principal motiv și anume securitatea scăzută. În fapt, limbajul de programare a fost blamat pe nedrept pentru că tot controlul stătea în mâna programatorilor care, de cele mai multe ori, din dorința de a finaliza rapid o cerință, nu luau în calcul toate aspectele legate de securitate.
Totuși, și limbajul de programare era mult prea permisiv spre deosebire de Java. Un exemplu că totuși se putea este Facebook și o să îl tot dau exemplu pentru că a reușit să mențină interesul crescut pentru PHP și să-l ducă la un nivel foarte avansat. Nu vă închipuiți că PHP este singurul loc unde Facebook a investit. MySQL este un alt exemplu unde Facebook și-a adus o contribuție notabilă. Dar despre asta voi vorbi cu altă ocazie.
Cum se poate folosi PHP în dezvoltarea aplicațiilor enterprise
Voi lua pe rind toate cerintele de mai sus si le voi dezvolta:
1. Securitatea partajării datelor și a schimbului de fișiere
Trebuie să mulțumim lui Google care de 2 ani tot pune piciorul în prag și acordă un ranking mai bun site-urilor ce folosesc conexiuni securizate (HTTPS). Folosind HTTPS se rezolva o parte din problemă și sunt soluții gratuite pentru acest lucru.
Letsencrypt.org este una dintre ele și poate fi complet automatizat procesul.
Totuși, odată datele ajunse pe server, ele trebuie protejate astfel încât să nu se poată permite accesul neautorizat la ele.
Un exemplu de implementare poate fi considerat un script ce primește ca parametru o cheie hash, fiecărei chei îi corespunde un fișier și anumite drepturi de acces. Acel script va servi către client fișierul dorit doar dacă acesta are suficiente drepturi pentru a-l accesa.
Fișierele pot fi stocate în mai multe locații, inclusiv CDN-uri private astfel că accesul la date se va face extrem de rapid. Varnish este de asemenea o soluție în acest caz. De reținut că decizia de a servi conținutul clientului stă în scriptul amintit.
2. Gestiunea operativă
Stă în ușurința prin care pot fi satisfăcute anumite cerințe de business. De exemplu, considerăm că TVA-ul se modifică de la 20% la 19%. Modificarea trebuie să fie disponibilă printr-o interfață de administrare fără să fie necesară intervenția programatorului.
De asemenea, interfața trebuie să fie ușor de utilizat și să nu necesite extrem de multe click-uri pentru efectuarea acestei operațiuni.
3. Integrarea proceselor de business
Înainte de a dezvolta orice aplicație ce se dorește a fi enterprise, arhitectul sau o persoană ce poate înțelege atât partea de business a clientului, cât și partea tehnică, trebuie să meargă la acesta și să- i analizeze tot procesul. Dacă poate veni cu o îmbunătățire o va sugera clientului însă, toate procesele sau cât mai multe trebuie automatizate sau transpuse în aplicație.
Acest proces, în unele cazuri, poate dura câteva luni sau ani. Totul depinde de dimensiunea companiei și de soluția tehnică ce se dorește.
4. Experiența utilizatorului
Cu siguranță că ați folosit până acum Gmail sau Facebook. Dar o aplicație bancară gen mobile banking? Așa-i că toate au fost extrem de intuitive față de pagina web a unui mic comerciant de termopane? Cam asta este diferența între o aplicație enterprise și una normală.
5. Scalabilitatea
Când vorbim de scalabilitate vorbim de ușurința cu care putem adauga mai multe echipamente hardware pentru a fi capabili să procesăm un trafic mai mare.
PHP nu dispune de mecanisme gen Map Reduce sau Hadoop disponibile aproape nativ în Java. Totuși, există și alte posibilități pentru a avea aceste funcționalități, însă implică programatorii care trebuie să gândească soluția astfel încât să se poată folosi de aceste avantaje.
Un exemplu stă în granularea / divizarea unei probleme în subprobleme independente, unde fiecare subproblemă este rezolvată în paralel.
Microserviciile sunt o soluție pentru acest lucru împreună cu un load balancer gen nginx, Haproxy etc. Load Balancerul este necesar pentru a ne asigura că se vor putea folosi mai multe servere, iar fiecare subproblema poate ajunge spre rezolvare pe oricare din serverele de procesare.
PHP a dovedit că este capabil să facă acest lucru dacă este folosit corect și fără să se facă risipă de resurse.
Astfel, implementând o astfel de soluție, dacă în următoarele 5 secunde este nevoie să adăugăm încă 10 servere de procesare în cloud-ul nostru, tot ce trebuie să facem este să solicităm 10 instanțe ale serverului de procesare și să le adăugăm în configurația load balancerului.
Restul nu mai ține de noi și load balancerul va avea grijă să le utilizeze și pe acestea.
6. Securitatea și capacitatea de recuperare a datelor în caz de dezastre
Nu trebuie uitat faptul că o soluție enterprise se asigura că, aproape indiferent de scenariu, este capabilă să recupereze datele clienților. Timpul în care această recuperare este posibilă trebuie să fie cât mai mic cu putință.
Tocmai de acceea pentru stocarea fișierelor se folosesc sisteme de backup și datele sunt copiate din CDN-uri de exemplu în zone protejate unde aplicația nu are acces, se fac backup-uri incrementale, datele din bazele de date sunt stocate simultan în mai multe locații, iar locațiile de disaster recovery sunt foarte bine protejate.
Chiar și în cazul în care se pierd datele prin ștergere accidentală sau cu intenție, sistemele enterprise păstrează disponibile posibilități de recuperare rulând din nou de la ultimul backup toate SQL-urile ce alterează datele din baza de date până la punctul unde s-a produs distrugerea.
Cele de mai sus nu țin neapărat de limbajul de programare. Totuși, orice aplicație ar trebui să dispună de un User Access Control (UAC) pus la punct. Framework-uri gen Laravel, Zend etc dispun de module care ajută dezvoltarea unor astfel de module.
Modalitatea de interogare a bazei de date este un aspect extrem de important și, cu toate astea, personal cunosc câteva aplicații enterprise ce fac greșeli copilărești în modalitatea de interogare. Un exemplu foarte bun ar fi să se folosească întotdeauna statement prepare și nu sql query simplu. Prin statement prepare, toți parametrii furnizați acelui SQL sunt convertiți automat la tipul de date al câmpului folosit în interogare. De asemenea, aduce și o îmbunătățire majoră de viteză pentru că select * from table_x where y=1 este diferit de select * from table_x where y=2, iar query cache-ul în acest caz este inutil, pe când dacă se folosește statement prepare, query cache-ul își va face treaba extrem de bine.
7. Interoperabilitatea între sisteme concepute inclusiv în limbaje de programare diferite
PHP oferă suport nativ pentru XML, JSON, SOAP, Restfull etc. la fel că și alte limbaje de programare. Însă, ca și în alte limbaje de programare, implementarea este cea care dictează nivelul. Ați încercat să folosiți api-ul disponibil în Facebook din diverse limbaje de programare și ați observat că totul funcționează fără probleme? Ei bine, deci se poate și în PHP.
8. Portabilitatea fără restricții de sistem de operare sau hardware
Orice aplicație enterprise este capabilă să ruleze pe diferite sisteme. Are de asemenea câteva cerințe legate de arhitectură, însă sistemul de operare sau echipamentele hardware nu ar trebui să fie strict de un anumit tip.
Înainte de a vă decide ce limbaj de programare să folosiți pentru următorul proiect enterprise, nu uitați să aveți în vedere următoarele aspecte (desigur în cazul în care PHP este unul din limbajele unde aveți experiență):
Limbajul PHP oferă suport complet pentru dezvoltarea de aplicații enterprise. Consumul de memorie și viteză de procesare au fost substanțial îmbunătățite în versiunea 7, surclasând alte limbaje ce sunt avide după memorie.
- Viteza lui PHP 7 este substanțial îmbunătățită, iar testele de stres efectuate pe o aplicație enterprise au arătat o îmbunătățire cu 400% față de PHP 5.5 și cu 200% față de HHVM. Totul fără să se rescrie codul sursă, astfel încât să se folosească cu precădere funcționalitățile disponibile în PHP 7, funcționalități care aduc o creștere de performanță și de securitate în același timp.
- Oferă suport nativ pentru 14 tipuri de baze de date diferite și nu are nevoie de module de conectare furnizate de alte companii.
- PHP dispune de o multitudine de IDE-uri extrem de bine puse la punct. PHP-Storm este unul dintre ele și este disponibil pe toate sistemele de operare recente.
Orice aplicație cu interfață web poate deveni o aplicație enterprise. Nu va închipuiți că dacă fabrica de covrigi are nevoie de o aplicație web această nu poate fi una enterprise. Cu siguranță poate și totul ține de ce-și dorește acea fabrică și ce își dorește furnizorul.
În final, alegeți PHP 7 pentru dezvoltarea aplicațiilor enterprise. Un mare avantaj îl constituie numărul mare de programatori care cunosc PHP și multitudinea de site-uri dezvoltate.