Uloga PHPa u big data startapima

Rastko Vukašinović nam u ovom članku predstavlja razvojni put big data proizvoda Vasta i uloge PHP-a u njemu, koju je pre par nedelja podelio sa učesnicima prvog PHP+startapi okupljanja.

Rastko Vukašinović
04/05/2015

Big data startapi su nove tech kompanije koje su uglavnom mnogo više tech i mnogo više naučne od većine drugih novih IT kompanija. Zasnivati svoj biznis na kvalitetnoj obradi i analizi ogromne količine podataka, hrabar je potez i za takvu avanturu vam je potreban vrhunski skup tehnologija i efikasna grupa inženjera.

Sa druge strane ove priče je upotreba kako se vaš proizvod predstavlja ciljnoj publici… Postoje predivni cloud statistics, analytics, search, machine learning i sl. startapi koji danas definišu Big Data industriju i svi oni imaju svoju ciljnu grupu, podtržište kome je potreban njihov proizvod.

Vast, kao big data kompanija, ima slogan Big Data for Big Purchases™ i naša ciljna grupa su ljudi kojima treba pomoć oko velike kupovine (porodične kupovine) kupovine automobila ili nekretnine. Za ovakav biznis model potreban vam je kvalitetan i raznovrsan izlaz ka korisnicima.

U svojim startap danima Vast se odlučio za PHP u svom frontendu, što u kontekstu naše strukture predstavlja sloj servisnih aplikacija. Ovo je spoljni sloj koji se sastoji od značajnog broja aplikacija koje koriste podatke sa naših domenskih servisa, obrađuju ih i izlažu krajnjim korisnicima kroz različite interfejse (API/UI).

U toku daljeg razvoja sistema, kroz poslednju deceniju, skup tehnologija se proširivao i menjao te je dominantna tehnologija u Vast front endu
postao NodeJS, iako PHP i dalje igra značajnu ulogu.

Prizma kroz koju ću vam prikazati PHP su aplikacije u servisnoprezentacionom sloju velikih sistema servisno orijentisane arhitekture. Posle ovakve analize PHPa osvrnuću se i na NodeJS koji je sada dominantna platforma u Vastovom front end sloju i ušao je i u druge slojeve sistema.

Struktura Big Data sistema

Prirodna struktura Big Data sistema je arhitektura orijentisana ka servisima (SOA) razvijana kroz dizajn vođen domenom (DDD)… Suština ovakve strukture i procesa je da je kompletna arhitektura orijentisana ka izlaganju servisa (interfejsa) spoljnom svetu.

Centralizovana je oko jezgra (domena) koji je u ovom slučaju informacija. U ovakvim sistemima proces razvoja baziran je na razvoju i upotrebnoj vrednosti servisa za obradu podataka.

DDD

Dizajn vođen domenom u osnovi predstavlja pristup razvoju u kome je ceo proces posvećen centralnoj filozofiji domenu nad kojim se sve gradi. Ovakav model dizajna sistema, ilustracije radi, mora imati i opšte prihvaćenu, striktno sprovedenu terminologiju takozvani sveprisutni jezik (*)

Slobodno gledano ovakva arhitektura se može podeliti na nekoliko ključnih slojeva, najbolje prikazanih kroz domencentričnu
slojevitu ilustraciju:

– Infrastruktura

– Domenski sloj

  • Domen Model
  • Servisni sloj

– Servisnoprezentacioni sloj (applikacioni i user interface sloj)

  • View Model servis
  • Prezentacioni sloj

Razlog malo drugačijeg rasporeda slojeva (ne redosledom već pripadanjem) od teorijskog je primer na kome se bazira ova analiza primene PHPa
u razvoju servisnih aplikacija.

Gde je PHP?

Screen Shot 2015-04-30 at 5.09.33 PM

Vast se u svojim startap danima odlučio za PHP u svom servisnoprezentacionom sloju (levo) i ta odluka je omogućila i svestranost i lakoću implementacije novih specifikacija i novih potrebnih karakteristika sistema.

Ovaj sloj se sastoji od značajnog broja (nekoliko desetina) aplikacija koje se razlikuju po mnogim karakteristikama, od servisa koje koriste, opterećenosti, primarnog fokusa, načina na koji šalju podatke, količine biznis logike u svojim serverima, pa do dizajna i karakteristika grafičkog interfejsa/client side aplikacija.

Vremenom je jezgro sistema raslo, skup tehnologija i servisa u jezgru sistema se proširivao, aplikacije su postajale sve kompleksnije i potrebe korisnika su se menjale (proširivale), što je značilo da je i skup tehnologija u front endu rastao (desno) nove specifičnosti našeg sistema zahtevale su nove tehnologije.

Istorijski kontekst

Ilustracija prikazana sa leve strane predstavlja strukturu Vast sistema u vreme kada je ceo servisnoprezentacioni sloj bio razvijen isključivo u PHPu.

Prve aplikacije (koje se u toj formi, uz određena unapređenja, još uvek vrte na našim serverima) razvijene su 2006. godine na ZF1.0.0RC2.
U nastavku članka naići će se na nekoliko primena i analiza sposobnosti PHPa i u svakoj od njih, pokušaću da pristup prikažem u dva konteksta kontekstu PHPa kao jezika sa svojstvima i alatima kakve pruža kroz poslednju deceniju (i samim tim kroz kontekst Vastove platforme) i kontekstu novih pristupa i alata.

Izbor PHP-a

PHP predstavlja jedan od logičnih izbora za razvoj aplikacija u ovakvoj arhitekturi, verovatno još uvek prvi izbor za mnoge startape… Jer iako verovatno nije najbolji programski jezik na webu, PHP predstavlja najkompletniju web platformu.

Kontekst PHPa, dovoljno je širok da pokrije kompletan servisni sloj od komunikacije sa domen modelom preko implementacije zadataka nad domen modelom, praćenja stanja zadataka i implementacije malog dela biz logike (većina biz logike dešava se, logično, u domenskom delu) i na kraju delimičnog ili potpunog upravljanja reprezentacionim slojem (zavisno od strukture reprezentacionog interfejsa API/UI).

Front End server (server servisne aplikacije) – komunikacija sa domen modelom i kontrola podataka

U slučaju ovakvih aplikacija, serverska logika pisana u PHPu zadužena je da se poveže na servise jezgra (implementacija biznis logike nad domen modelom) preko različitih intefejsa/APIja (SOAP/REST/RPC koji šalju JSON/XML itd.). PHP server na osnovu potreba (specifikacije) korisničkog servisa koji gradimo izvršava određene upite (zadatke) nad datim interfejsima.

Osnovni PHP pristup

PHP server prati stanja zadataka (upita) poslatih domenskim servisima i nad dobijenim povratnim podacima izvršava operacije koje pripremaju podatke za dalju upotrebu u servisnom sloju okrenutom ka korisnicima.

Velika prednost PHPa u ovom slučaju je njegova osobina da izuzetno lako i brzo barata transformacijama i prenošenjem različitih tipova podataka. Operacije nad podacima koje ne uključuju proračune, veoma su brze i efikasne u PHPu, te je PHP logičan izbor u slučaju kada se u naš server uliva velika količina podataka u različitim oblicima koju treba konvertovati, kombinovati ili samo prenositi na relaciji jezgro sistema reprezentacioni sloj (korisnik) i obratno.

Nove PHP tendencije

U PHP serverima ovog tipa ključnu ulogu igra protok podataka i obrada zahteva. U tako jakom I/O režimu postoji potreba da se za svaki HTTP request veže određeni broj operacija (takozvani middlewarei). U starijim PHP frejmvorcima ovakva implementacija nije postojala i to je jedan od potencijalnih faktora koji je ljude okretao drugim platformama.

Novi PHP frejmvorci (Laravel, slim, predstojeća verzija ZF…) omogućavaju primenu midlvera, što nam dopušta da sa lakoćom za jedan http zahtev vežemo niz metoda koje ga obrađuju. Ovo je jedna od glavnih karakteristika koje poboljšavaju razvoj aplikacija kakve analiziramo

Middleware

Praktično gledano midlveri su slojevi za obradu kroz koje zahtev prolazi do kontrolera, ali se metode vezuju za sam zahtev, te slojevita struktura nema neke veze sa samim načinom dejstva, već je to više kao niz filtera koji se po nekoj logici dodeljuje svakom zahtevu i pomaže nam da obradimo zahtev upotrebimo keš, autentifikaciju, enkriptujemo podatke… ( * )

Prezentacioni sloj – interfejsi – UI/API

PHP sa lakoćom barata bilo kojim oblikom tekstualnog izlaza. Ovo povlači jednostavno slanje JSONa
ili XMLa ili renderovanje HTMLa u browseru. Takođe, velika prednost PHPa na webu je način na koji PHP servira ove podatke. PHP je sam po sebi templateing engine što znači da je u njemu izuzetno lako prikazati podatke kroz predefinisane šablone.

Kroz jednu implementaciju serverske logike, a kroz minimalno različite izlazne tačke (kontrolere) možemo postići serviranje istih podataka Web UIu kroz browser i raznim drugim aplikacijama koje konzumiraju REST interfejs (Android, iOS, web client side JS applikacije…), takođe svi propratni servisi za praćenje stanja i rezultata zadataka su prirodno prisutni (session, cookie, request…).

IRL – kroki razvoja svestrane FE aplikacije u PHP-u (labavo zasnovano na kombinaciji nekoliko slučajeva iz Vast-a)

Na početku (prva verzija):

Ovo je web aplikacija serviranje podataka ide kroz html koji generiše kontroler posle obrade podataka u FE PHP servisu koji generiše view model
U jednoj od sledećih iteracija partner razvija svoju aplikaciju za mobilne telefone i želi da podatke koje pruža svojim premijum korisnicima dopuni podacima sa našeg sistema, uz autentifikaciju korisnika tako da se dodatne premium karakteristike sistema prenose i na web aplikaciju.

Zahvaljujući tome što je aplikacija izgrađena na PHPu, naši inženjeri su u mogućnosti da logici aplikacije bez većih problema dodaju sledeće mogućnosti:

PHP nam u ovom slučaju omogućava da lako uradimo dve stvari proverimo HTTP header i na osnovu njega napravimo poziv ka servisu za jedinstvenu autentifikaciju i dodamo set kontrolera minimalne kompleksnosti (razlika između slanja podataka u HTML stranu i slanja JSONa
je bukvalno jedna instrukcija) koji umesto HTMLa šalju JSON i eventualno barataju HTTP hederima.

Zašto PHP za startape?

Pored toga što prethodna analiza ukazuje da je uz pravilan pristup lako razviti aplikaciju ovog tipa u PHPu, potrebno je pomenuti i 3 glavne pozitivne osobine PHPa zbog kojih je on pogodan za ovakve projekte:

Zašto smo se udaljili od PHP-a?

PHP, naročito u trenutnom stanju scene, platforma je sa veoma malim brojem mana iz perspektive ovakvih web aplikacija… Ključni razlozi koji su nas naveli da potražimo rešenje u drugim platformama se čak ne mogu ni smatrati manama (nedostacima) vać specifičnostima jezika.

Od PHPa nas je odvojila specifičnost našeg sistema i prednosti drugih platformi u rešavanju određenih problema. PHP kao platforma još uvek je prisutan i to na nekim od najbitnijih projekata Vasta gde predstavlja glavni oslonac.

Nedostaci PHP-a u kontekstu našeg slučaja

U sistemima koji obrađuju veliku količinu zahteva i paralelnih zadataka pri obradi svakog zahteva, optimizacija paralelnosti izvršenja je potrebna na svakom nivou, i to je nešto što u PHPu nije prirodno i jednostavno izvodljivo. Ovo u našem use caseu predstavlja veliku manu PHPa.

U određenim slučajevima postoji potreba za konstantno otvorenom HTTP konekcijom i to je druga stvar koja nije prirodno izvodljiva u PHPu, jer nema prirodnu podršku za Web Sokete. U vreme donošenja odluke o okretanju ka novim tehnologijama PHP je imao i izuzetno loš package management (nije bilo Composera).

Tehnike koje nedostaju

Moramo se osvrnuti na neka rešenja koja u PHPu omogućavaju implementaciju gore pomenutih tehnika koje nedostaju.

Elephant.io predstavlja rešenje za upotrebu web soketa u PHP aplikaciji. Ovo je, međutim samo implementacija klijenta jer je server za implementaciju web socketa neizvodljivo napisati u PHP tako da se dobiju optimalne performanse PHP jednostavno nije brz u takvim operacijama.

ReactPHP se idealno nastavlja na ovu priču, jer predstavlja event based, nonblocking I/O centric implementaciju PHPa koja rešava pomenuti problem konkurentnosti i na kojoj je napisan Ratchet Web Socket server u PHPu.

Prednosti NodeJS-a kao Vastove nove platforme po izboru

NodeJS je Apache za JavaScript

Ovo je u našem slučaju nosilo dve prednosti pokrivanje svih nedostataka PHPa i mogućnost pisanja JavaScripta u najširem kontekstu aplikacije.

NodeJS je serverska platforma čiji je JavaScript, ne samo prirodni skripting jezik (kao PHP za Apache), već i sistemski jezik. NodeJS nam omogućava da pišemo JS na serveru i klijentu i da u JS pišemo sistemski kod servera (upravljamo skaliranjem, kontrolom grešaka praćenjem metrike sistema itd). Naš tim je već imao iskusne i veoma sposobne JS inženjere, pa je za nas pun JS stek predstavljao svojevrsnu prednost jer smo imali ljude koji su mogli prihvatiti zadatak prebacivanja određenih FE servera na NodeJS i implementacija novih rešenja (uključujući
i neke implementacije u okviru domenskih servisa).

Izomorfizam

Svaki softver arhitekta i inženjer zna da je pisanje koda koji se u istom obliku može koristiti u apsolutno svakom delu sistema predstavlja moć i stabilnost a to je nešto što NodeJS kao platforma donosi u JavaScrip ekosistem. Izomorfizam koda našim proizvodima donosi ne samo strukturalnu konzistentnost već i visoku stabilnost jer se tim održava i polira jedno mikro rešenje (plagin) koje se koristi na mnogo različitih mesta u sistemu.

NodeJS

Ono što moram napomenuti u vezi analize NodeJSa kao platforme po izboru su tri stvari s obzirom da je perspektiva startap i da moramo znati šta ovakve odluke znače za ključne resurse:

1. Moramo znati da iako je NodeJS platforma koja omogućava pisanje JS na svim nivoima sistema, način programiranja je značajno različiit na svakom od njih (sistem/server/klijent). Dakle, iako nema promene konteksta u osnovnom smislu, postoji promena konteksta u okviru samog jezika te je za pisanje aplikacija u punom JS steku potreban ili veoma iskusan, prekaljen web programer koji može da iznese svaki deo sistema ili grupa programera.

2. Poređenje Apachea i NodeJSa nije baš pravedno poređenje, jer je Apache server, a NodeJS web framework/runtime, postoji još servera/runtime okruženja na kojima se vrti PHP, i to sa višim performansama od Apache servera, ali istini za volju u prizmi RPS performansi (requests per second) ni jedan ne pobežuje Node… Iz prostog razloga što je Node barebone, vrlo jednostavan i svu strukturu ostavlja onome ko kreira server i aplikaciju a PHP serveri i mašine (rantajmi) imaju ove stvari već implementirane. Pogledajte najnovije testove performansi koje pokazuju nadmoć Noda među FE frejmvorcima.

3. Production ready aplikacija je u PHPu daleko bliža nego u NodeJSu, jer Apache,Nginx itd. već imaju punu implementaciju serverske logike koja se u NodeJSu mora pisati od početka (naravno da postoje gotova rešenja, ali preporučujem da pazite da vam gotova implementacija ne preoptereti sistem i anulira prednost koju jednostavnost Nodea nosi).

Renesansa PHP-a – platforma sa novim moćnim alatima

PHP je sada veoma moćan i kvalitetan jezik koji je u poslednjih 10 godina napredovao i na svom osnovnom nivou, a i kroz nove alate koji su na PHPu razvijeni.

Već pomenuti frejmvorci koji omogućavaju brzu i stabilnu implementaciju mnogih programerskih pristupa koji nisu smatrani prirodnim za PHP obogatili su ekosistem do nivoa da za PHP skoro ništa nije nemoguće. Naravno, sa druge strane je pitanje da li je optimalno koristiti PHP za takve implementacije, te ovde ulogu više igraju resursi i brzina razvoja nego optimizovanost.

Evolucija alata

Finalni, trenutno aktuelni, korak evolucije PHP ekosistema su hibridni sistemi runtime/script koji prate neverovatno uspešnu formulu NodeJSa.
Prvo je to uradila ekipa iza Phalcon fw koja je napravila PHP frejmvork kao C ekstenziju koja kod izvršava kao MV frejmvork. Karakteristika ovog frejmvorka koja odskaču od većine su niska zahtevnost u implementaciji MVCa i generalno visoke performanse zbog C jezgra. Uz novi Phalcon 2.0 doneli su nami i Zaphyr programski jezik namenjen razvoju php ekstenzija.

Najnoviji korak bliže novim unapređenjima performansi PHPa je Facebookov HHVM koji koristi brzinu sistemskog jezika C++ i JIT način prevođenja (dinamičko prevođenje) PHPa da postigne superiorne performanse.

HHVM podržava veliki broj popularnih frejmvorka, na nekim podrškama se još uvek radi, ali više o tome možete videti iz liste podržanih frejmvorka i liste prijavljenih problema.

Preporučujem da svoju aplikaciju isprobate na ovom neverovatnom sistemu.

Novi alati nova pravila

Mnogi novi PHP alati, naročito HHVM i Phalcon, zahtevaju malo napredniji hosting, te se u slučaju ovih alata napomena o jeftinom hostingu za PHP i lakoj instalaciji sistema zanemaruje.

*

Vast traži nove članove tima: Android developera i Javascript developera.

Rastko Vukašinović

Objavio/la članak.

ponedeljak, 4. Maj, 2015.

IT Industrija

🔥 Najčitanije

Nemanja

ponedeljak, 21. Mart, 2016.

Mozda bi trebali da dodate na kraj teksta malo i o ubrzanju sa PHP 7-com.

Vukašin Stojkov

sreda, 6. Maj, 2015.

@Sid — hvala na sugestiji, razmišljamo o tome već neko vreme, tražimo balans između otvorenosti i demokratije, i kvaliteta diskusije i zajednice.

Sid

sreda, 6. Maj, 2015.

Hvala. Uvek je zadovoljstvo procitati objektivan clanak, koji je napisao strucnjak... Dopada mi se sto je tema obogacena i primenama drugih tehnologija i sto ima dosta korisnih resursa u samom tekstu. Bilo bi lepo da se komentari moderiraju do nekog nivoa, narocito jer mnogi ljudi koji ovo citaju traze tehnologiju za sebe pa ih neke stvari mogu navesti na pogresan zalkjucak Stivo koje je Peglica ostavio moze da se upotrebi, narocito da ubrza proces koji opisuje njegov avatar... Veoma prikladno za ovakav portal, svaka cast. Toga smo se tokom godina nacitali o mnogim programskim jezicima, i svi su jos uvek u upotrebi i ljudi su zadovoljni...

Peglica

utorak, 5. Maj, 2015.

Ostaviću ovo ovde: http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

Goran

ponedeljak, 4. Maj, 2015.

Fenomenalan tekst! Otkad sam otkrio Laravel - preporodio sam se... U suštini, neko ko ranije nije radio OOP i MVC imaće malih problema u početku da shvati šta je Model, View, Controller, Helper, post, get, delete metode itd, ali se brzo uđe u štos. Ja bih samo dodao par reči u vezi sa Angular JS-om. To je tek renesansa jer radi LIVE, kao da je uvek prisutan, ne spava. Laravel + Angular i zaboravite na sve druge programske jezike...