De ce a mers incet eMag de Black Friday?

tl;dr: din cauza ca incarcau tot ce inseamna js de pe emag.ro si nu cdn

Eram ca tot românu cu o saptamana inainte de black friday (black friday in romania se face cu o saptamana inainte de black friday) pe emag ca sa cumpar si eu niste chestii

Totul era picat, ifoanele s-au dus instant, tot ce era la un preț semi decent a fost cumparat in less than 1 minute. (Protip: pe mobil, aplicatia de mobil mergea atat de bine incat nici nu avea rost sa intri pe site)

Cat eu ma uitam la pagia de checkout care nu se incarca, nu se afisa nimic, am dat view source, tot html-ul era acolo, iar cu inspect element, network requests, vedeai frumos cum facea “hang” in fisierele js.

Don’t get me wrong, emag are CDN, ba chiar CDN serios (akamai) dar degeaba ai CDN daca incarci tot js-ul si css-ul de pe serverul ala micuț care nu e treaba lui.

/end rant.

PS: nu zic ca sunt mare scalability expert, dar pe bune, ai cdn si inca servesti js-uri si css-uri de pe serverul tau?

2 Likes

Uite de aia mi-am făcut blog(uri). Să pot arăta cu degetul. Fără să fie vorba (doar) de emag, am scris de-a lungul timpului:

  1. De ce au mers prost? De aia!

CDN-urile sunt doar o mică problemă ignorată de magazine. Nu poți servi pagini de 3-5MB (sau 8MB+ în cazul elefant…) cu câteva zeci (spre o sută) de assets la câteva zeci sau sute de mii de oameni simultan și să ai așteptări prea mari, indiferent cât de mari și tari sunt serverele tale.

3 Likes

Schimbarea incepe cu tine: http://www.necenzurat.com/wp-includes/js/jquery/jquery.js?ver=1.11.3 vs http://code.jquery.com/jquery-1.11.3.min.js

http://www.iamntz.com/4618/frontend-developer/cateva-cuvinte-despre-cdn-uri/#comment-43435
Doua comentarii carora le pot da dreptate in toata discutia, cel din linkul de mai sus si cel care a spus ca viteza din fibra optica este mai mica decat viteza luminii. Pentru rata de transfer poti sa accesezi http://www.speedtest.net/ si sa selectezi unul din serverele situate in Sydney (eu pe RDS am ~45 Mbps).
“Ce se întâmplă dacă JS-ul nu se încarcă?” - aici poti sa spui foarte multe, insa pana la urma totul se rezuma la cati clienti iti aduce functionalitatea oferita de js fata de cei pe care ii pierzi ca nu li se incarca toata pagina. Conteaza si ce js nu se incarca, de obicei sunt multe de tracking.
“Un CDN public (nu știu cum să evidențiez mai mult) este bun pentru optimizarea primei accesări. Dacă folosești același CDN ca alte site-uri vizitate de utilizator, îl scutești de descărcarea a câtorva sute de KB.” - teoretic da, totusi daca te uiti pe emag (sau poate stii deja), are headerele de Cache-Control si ETag setate, asta inseamna ca la refresh (F5 fara Ctrl) browserul iti incarca resursa locala; raspunsul fiind 304 Not Modified. Aici mai degraba as fi zis ca css-urile si js-urile sa fie unificate si minificate. Cred ca un procent foarte mare din cei care au intrat pe siteurile astea aveau deja resursele cacheuite in browser.

Acel site e un shop online sau are trafic care sa justifice necesitatea unui CDN?

2 Likes

Da boss la cei 200 pe luna, am pus infrastructura de ec2, autoscaling daca trece de 20% loadul, instante de redis pt cache, replicate in toate availability zones, s3 servit prin cloudfront si face din secunda in secunda cate un backup pe glacier, for the lulz.

2 Likes

Da-i pe goagal cloud ca te iese mai ieftin si merge si autoscale mai bine

1 Like

//fapt divers: deabia ieri am putut sa achit cu cardul comanda data la pcgarage de black friday … ca nu le mergea procesatorul de carduri (payu)

2 Likes

Ceva imi spune ca arhitectura din spatele aplicatiei sau infrastructura unde este hostata nu permite o scalare usoara pentru varfuri de trafic.

1 Like

Mă îndoiesc. Anul trecut sau acum doi ani, Emag se lăuda că a cumpărat nu știu câte servere extra, special pentru BF.

Edit: http://blog.emag.ro/2012/11/cum-a-fost-ziua-de-black-friday-la-emag-niste-repere/

Doar pentru acest eveniment ne-am pregătit cu 110 servere, 70 de programatori

Irelevant - daca nu este flexibila i.e. sa poti sa adaugi cate instante noi ai nevoie pt. a face fata. De fapt poate ca nici nu a fost vb. de instante ci de load balancing issues.

Chiar sunt curios ce au in spate si de ce au cazut.

2 Likes

nu stiu la voi dar la mine nu s-a simtit nimic ingreunat si am fost prezent in primele 1-2 minute

btw, eu n-am intalnit solutie de scalare instanta. ai nevoie de cel putin 30 secunde pentru a “hotari” daca e nevoie de instante noi + cel putin alte 30 pt lansarea lor

1 Like

Cand site-ul este jos de mai mult de cateva ore - 5 minute pentru a lansa 10-20 de instance nu cred ca sunt o problema.

Nu vreau sa fac reclama la Azure - dar daca nu vrei sa-ti bati capul cu script-uri poti face asta relativ usor din consola lor (si nu, nu ai nevoie de 70 de ingineri pt. a face asta)

1 Like

sunt la curent cu mai toate paas-urile. nici macar nu e nevoie de scripturi sau sa fii prezent in consola. setezi un trigger + o actiune si asta-i tot

oricum nu e de ajuns sa lansezi instante in nestire daca ele sunt de http iar la tine bottleneck-u e baza de date sau ceva sistem de cache.

3 Likes

this begs the question: wth guys? wth. what did those 70 engineers do?

2 Likes

avand in vedere ca sunt vreo 20 de aplicatii distincte in ecosistemul emag (fiecare cu environment propriu) mi se pare just

2 Likes

hmm, interesting, expand please? :smile:

1 Like

tot nu scuză problema
Emag are CDN, de ce dracu se mai intampla asta ?

1 Like

As spune ca-i birocratie romaneasca… si probabil as avea dreptate…

http://www.wall-street.ro/special/wall-street-360/191830/stanciu-emag-in-comert-nu-te-duce-unde-este-reflectorul-cauta-zonele-ascunse.html

E vorba de 60 dar sa zicem ca doar 20 au legatura directa cu siteul

2 Likes

Manilor, treaba e mai simpla decat credeam. Atat eMag cat si PayU angajeaza programatori, deci exista o sansa de a imbunatati treaba direct de la sursa! :smile:

3 Likes