:::: MENU ::::

Hai sa va zic cum e cu PHP-ul in cloud. Amazon AWS

Pentru ca de cateva luni bune dezvolt o aplicatie care va avea 54.546.565 vizitatori pe zi, vizitatori care trebuiesc procesati si ei pentru diferite chestii, a trebuit sa las balta gandul ca va fi hostat cu un pachet de 2E/luna.
Fara prea multe optiuni, am ajuns la Amazon AWS. Cealalta optiune era Windows Azure, dar mi s-a parut prea alambicat plus ca Amazonul are o cota de piata covarsitoare cat sa ma convinga.

Pe vremea cand a trebuit sa ma hotarasc, nu aveam mari cunostinte despre a-ti administra singur serverele (stiam cat sa configurez un linux chel cu tot ce aveam nevoie pentru a fi folosit ca un hosting clasic). Intr-un final s-a dovedit ca nici nu prea aveam nevoie.

Intr-un serviciu de tip PaaS (platform as service), ai acces la o interfata unde cu cateva click-uri pornesti un server virtual cu care poti face ce vrei).

Partea cu care trebuie sa te obisnuiesti in primul rand e faptul ca multe servicii care inainte veneau toate pe contul de hosting, aici sunt impartite: storage, procesare, baza de date, mailing.

Daca inainte aveai prin site/aplicatie un formular cu upload, il uploadai cu move_uploaded_file(). Acum trebuie sa-l uploadezi pe un server diferit si sa stochezi URL-ul. Uploadarea se face cu ajutorul unor clase PHP oferite de Amazon si destul de bine documentate.

Cu bazele de date e mai simplu, in mysql_connect() in loc sa pui localhost, pui adresa serverului respectiv (adresa pe baza de hostname nu IP). Aici nu vei avea PHPmyAdmin dar poti instala o aplicatie desktop de tipul HeidiSQL si ai scapat.

Pentru mailing trebuie sa folosesti un serviciu de-al lor (apelabil tot prin clasa PHP) numit SNS.

Pentru fiecare din serverele astea trebuie sa setezi cine are dreptul sa se conecteze la cine. De exemplul pentru mysql trebuie sa permiti acces serverului web + ip-ul tau (pentru acces cu HeidiSQL).
Deasemenea poti alege in ce zone de pe glob sa fie tinute fizic serverele (e recomandat ca toate sa fie din aceeasi zona pentru o conexiune rapida intre ele).

Pentru mysql de exemplu poti alege ca serverul sa fie replicat instant intr-o alta zona de pe glob in caz ca pica unul, celalalt sa intre rapid in functiune. Sunt generate si backup-uri, backup-uri care pot fi restaurate doar pe un server nou.

Costul tuturor serverelor este pe ora si poti alege cat de puternice sa fie (cu procesor mai mare, cu memorie mai mare).

Chestia care m-a scapat pe mine de prea multe bataie de cap si m-a convins sa-i folosesc se numeste ElasticBeanstalk. Serviciul asta al lor se ocupa de toata nebunia conectarii tuturor serverelor de mai sus. Adica contine un loadbalancer si X servere in spate (poti alege ce tip de servere cu ce sistem de operare). Vizitatorii ajung in load balancer care vede ce server e cel mai putin incarcat si trimite vizitatorul pe serverul respectiv. Serverele din spate pot avea un numar nelimitat (daca numarul de vizitatori creste, se vor adauga automat alte servere in asa fel incat sa nu se incarce greu). Fisierele se uploadeaza prin intermediul GIT (e nevoie de niste utilitare oferite de Amazon pentru conexiunea cu GIT – dar intr-un final vei urca un repository cu un simplu git aws.push).

Costul in cazul meu pentru zona de dezvoltare (adica cu ~0 vizitatori) e de ~45$/luna si am 5 servere (2 load balancere + 2 web) + un server mysql (nu mai mentionez storage si DNS)

Cam toate serviciile oferite de ei beneficiaza de “Free Tier”, adica ai X spatiu gratis, XXX ore de rulare gratis si tot asa. Destul cat sa te prinzi cum functioneaza treaba fara a da niciun ban din buzunar.

Am tinut sa scriu postul asta pentru ca daca vrei sa ramai un programator la zi cu noile moduri de dezvoltare, m-am gandit ca as putea sa-ti dau un impuls sa te documentezi.


4 Comments

  • Reply Cipy |

    am incercat sa fac un proiectel acolo imediat dupa lansare doar ca dadea erori peste erori, ba era interfata noua, ba ma ducea in cea veche si n-am reusit nimic

  • Reply George Jipa |

    Daca prin mailing ai vrut sa te referi la trimis emailuri, atunci corect este Amazon SES, ci nu Amazon SNS (serviciul asta e pt notificari). A… si ceva important: SES-ul e dezvoltat de romani, la Iasi. 🙂

  • Reply Cipy |

    am auzit ca-i Amazon la Iasi dar nu stiam ca AWS-ul
    suntem destepti ce sa mai..

So, what do you think ?