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?
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.
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.
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.
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.
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
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)
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!