Supercharge Website Performance Cu AWS S3 și CloudFront

Trăim într-o lume în care oamenii așteaptă tot mai mult viteze mai mari și mai rapide. În fracțiuni de secundă, site-ul dvs. poate pierde vizitatori valoroși și, la rândul său, bani. Deși majoritatea oamenilor cred că CDN-urile sunt pentru "câinii mari", ei sunt, de fapt, foarte ieftini și incredibil de ușor de folosit în aceste zile.

În acest tutorial vă voi arăta cum să configurați și să utilizați serviciile Web Amazon S3 și CloudFront pentru a reduce timpul de încărcare a site-ului, precum și pentru a afișa diferențele de performanță.

Ce este un CDN?

Un CDN este o rețea de distribuire a conținutului (sau de distribuție). Este o rețea de calculatoare cu fiecare sistem plasat în diferite puncte cu aceleași date pe fiecare. Când cineva accesează rețeaua, aceștia pot accesa fișierul din cel mai apropiat sistem sau cel cu sarcină mai puțin curentă. Acest lucru are ca rezultat o mai bună latență mai mică și durata de descărcare a fișierelor. Pentru a afla mai multe despre CDN, consultați "Rețeaua de difuzare a conținutului" de pe Wikipedia.

În exemplul imaginii de mai sus, vizitatorii accesează serverul cel mai apropiat, care va oferi cea mai bună performanță posibilă. Rețeaua de servere ar fi CDN. O gazdă web obișnuită ar avea un server central în care toți vizitatorii vor avea acces. Acest server ar putea fi localizat numai în SUA sau poate în Europa și ar avea ca rezultat o perioadă mai lungă de timp și de încărcare pentru vizitatori mai departe.

Folosirea a mai mult de un server, chiar și pe un singur continent, va face o diferență în performanță.

De ce & dovada

Am avut destul de putini oameni sa ma intrebe de ce un CDN este important, chiar si pentru site-uri mai mici, si de ce ar trebui sa deranjeze plata pentru un alt serviciu web. Răspunsul simplu este, cu cât mai repede - cu atât mai bine. Și de ce nu oferiți clienților (vizitatorilor) cât mai bine?

Cu cât site-ul este mai mic, cu atât mai puțin impactul pe care îl va avea un CDN. Cu toate acestea, dacă vizitatorii dvs. traduc în bani pentru dvs., atunci fiecare bit ajută.

  • În 2006, testele Google au arătat că creșterea timpului de încărcare cu 0,5 secunde a dus la o scădere a traficului cu 20%.
  • În 2007, testele efectuate de Amazon au arătat că pentru fiecare creștere de 100ms a timpului de încărcare, vânzările ar scădea cu 1%.
  • În acest an (2009), Akamai (liderul CDN) a relevat într-un studiu că 2 secunde este noul prag pentru timpii de răspuns ai paginii web de eCommerce.

Este ieftin. Este ușor. Și se poate traduce în mai mulți bani din punct de vedere al clienților și de economisire a cheltuielilor dvs. regulate gazdă web.

Serviciile Web Amazon (AWS)

Amazon oferă o mulțime de servicii fantastice de web. Vom folosi serviciile Amazon Simple Storage (S3) și CloudFront. S3 este o soluție de stocare a datelor în nor care poate fi legată de CloudFront, CDN al Amazonului.

Dacă sunteți în căutarea unei soluții ușor mai simple, all-in-one, Rackspace Cloud Files este o altă opțiune excelentă. Au colaborat cu CDN-ul Limelight Network, care are performanțe puțin mai bune decât CDN-ul Amazon în prezent. Cu toate acestea, serviciul lor are câteva dezavantaje pe care nu le veți găsi cu Amazon. Nu voi intra în toate acestea, dar una dintre cele mai mari pentru mine a fost lipsa de sprijin personalizat CNAME care se presupune că va veni la un moment dat în viitor. Cu ajutorul asistenței CNAME, puteți configura un sub-domeniu personalizat pentru a accesa fișierele dvs., cum ar fi "cdn.yourdomain.com".

Pentru a vedea comparațiile recente de performanță, vizitați http://www.cloudclimate.com/cdns/

Prețuri

Iată prețurile S3 ale lui Amazon pentru SUA. Pentru alte zone, faceți clic pe imagine pentru a vedea prețurile complete.

Iată prețurile CloudFront ale companiei Amazon pentru SUA. Pentru alte zone, faceți clic pe imagine pentru a vedea prețurile complete.

Utilizați calculatorul lunar al Amazonului pentru a obține o idee mai bună despre factura de la sfârșit. În ultima lună, factura mea totală a fost mai mică de 5 USD, majoritatea fiind suportate din stocarea datelor de 20GB +. După cum puteți vedea, este foarte, foarte ieftin, mai ales atunci când țineți cont de avantajele de performanță și flexibilitate.

Setup S3 & CloudFront

Pentru a începe, trebuie să vă înscrieți pentru serviciile S3 și CloudFront de la Amazon. Dacă aveți deja un cont la Amazon, trebuie să vă conectați și să terminați înregistrarea. Dacă nu, va trebui să creați un cont, apoi să vă înscrieți pentru S3 și CloudFront. Înscrierea este pur și simplu adăugarea serviciului în contul dvs. Nu este nimic complicat implicat.

Faceți clic pe fiecare imagine pentru a accesa pagina de informații și înscriere a serviciului.

Odată ce v-ați înscris, veți primi un ID de cheie de acces și o cheie de acces secret, care poate fi găsită în secțiunea "Contul dvs."> "Certificatele de securitate". Acesta este, în principiu, numele de utilizator și parola pentru accesarea S3.

Setare Cupa S3 pentru fișiere

Mai întâi trebuie să creați o găleată pentru a stoca toate fișierele noastre. Pentru mai multe informații despre "găleți" citiți "Amazon S3 Buckets Described în engleză simplă".

Pentru a face acest lucru, vă vom conecta mai întâi la contul S3 utilizând ID-ul cheie de acces și cheia de acces secret cu o aplicație precum Transmit (OS X), ceea ce voi folosi. Pentru a vedea mai multe aplicații sau extensii de browser pentru a accesa S3, consultați "Amazon S3 Service Simple Storage - Tot ceea ce ați dori să știți".

După ce ne-am conectat, vom crea o găleată pentru a pune fișierele înăuntru. Am numit-o pe "files.jremick.com". Piesele trebuie să aibă nume unice, trebuie să aibă între 3 și 63 de caractere și pot conține litere, numere și liniuțe (dar nu pot fi terminate cu o linie).

Prin unicitate, ele inseamna unice in reteaua AWS. Deci este o idee bună să folosiți ceva asemănător unui URL sau ceva similar.

Fișierele pe care le-am pus în această cupă pot fi accesate acum la "files.jremick.com.s3.amazonaws.com". Cu toate acestea, această adresă URL este destul de lungă și putem configura rapid unul mai scurt. Vom configura o nouă înregistrare CNAME la gazda noastră web pentru a face acest lucru.

Configurați subdomeniu S3 personalizat

Pentru a scurta adresa URL prestabilită, vom crea o intrare CNAME așa cum am făcut mai jos (aceasta este la gazda web). Am ales "fișierele" ca subdomeniu, dar ați putea folosi orice doriți.

Acum putem accesa aceste fișiere la "files.jremick.com". Mult mai bine! Apoi, încărcați pur și simplu fișierele dorite în galeria "files.jremick.com".

Odată ce fișierele dvs. sunt încărcate, veți dori să setați ACL (Lista de control al accesului) pentru a permite tuturor să citească fișierele (dacă le doriți publice). În Transmiteți pur și simplu clic dreapta, selectați informații, sub permisiuni setați "Citiți" în "Lumea" și faceți clic pe "Aplicați la elementele închise ...". Acest lucru va da toate fișierele din această coșetă accesul în lume.

Implicit, fișierele încărcate în contul dvs. S3 vor permite accesul numai la citire și scriere proprietarului. Deci, dacă încărcați mai târziu fișiere noi, va trebui să parcurgeți din nou acești pași sau să aplicați permisiuni diferite doar pentru acele fișiere.

Creați distribuția CloudFiles

Acum, când am instalat S3, am creat o adresă URL mai scurtă și am încărcat fișierele noastre, vom dori să le facem accesibile prin CloudFront pentru a obține o latență super scăzută pentru a reduce timpul de încărcare. Pentru a face acest lucru, trebuie să creați o distribuție CloudFront.

Conectați-vă la contul dvs. AWS și navigați la consola dvs. de administrare Amazon CloudFront (din meniul derulant "Contul dvs."). Apoi faceți clic pe butonul "Creați distribuire".

Vom selecta galeria de origine (galeta pe care am creat-o mai devreme), vom activa logarea dacă doriți, vom specifica un CNAME și vom comenta și în final fie vom activa, fie vom dezactiva distribuția. Nu trebuie să introduceți un CNAME sau comentarii, dar vom dori să setăm o adresă URL mai scurtă mai târziu, ca și în cazul S3. Aș dori să folosesc "cdn.jremick.com", așa că aș fi aici.

După cum puteți vedea, adresa URL prestabilită este destul de urâtă. Nu e ceva ce vrei să încerci să-ți amintești. Deci, acum să setăm un CNAME pentru URL-ul destul de scurt, scurt.

Configurați subdomeniu CloudFiles personalizat

Pentru a configura subdomeniul particularizat CloudFiles, vom trece prin același proces ca și în cazul S3.

Acum putem accesa fișiere prin CloudFront folosind "cdn.jremick.com".

Cum funcționează toate

Când cineva accesează un fișier prin cupa dvs. S3, acesta se comportă exact ca un gazda obișnuită a fișierelor. Când cineva accesează un fișier prin CloudFiles, cere însă fișierul din galeria dvs. S3 (originea) și cache-ul la serverul CDN cel mai aproape de cererea inițială pentru toate solicitările ulterioare. Este ceva mai complicat decât asta, dar asta e ideea generală.

Gândiți-vă la un CDN ca la o rețea inteligentă care poate determina cel mai rapid traseu posibil de livrare a solicitărilor. Un alt exemplu ar fi dacă serverul cel mai apropiat este împotmolit cu trafic, ar putea fi mai rapid să obțineți fișierul dintr-un server puțin mai departe, dar cu mai puțin trafic. Astfel, CloudFront va livra fișierul solicitat din acea locație.

Probleme cache

Odată ce un fișier este stocat în memoria cache în serverele de rețea CloudFront, acesta nu se înlocuiește decât după expirarea acestuia și este eliminat automat (după 24 de ore de inactivitate în mod implicit). Aceasta poate fi o durere majoră dacă încercați imediat să împingeți actualizările. Pentru a face acest lucru va trebui să versiunea fișierelor. De exemplu, "my-stylesheet.css" ar putea fi "my-stylesheet-v1.0.css". Apoi, atunci când faceți o actualizare care trebuie să iasă imediat, ați schimba numele în "my-stylesheet-v1.1.css" sau ceva similar.

Test de performanta

Conținutul nostru este încărcat în galeria noastră S3, distribuția noastră CloudFront este implementată, iar subdomenii personalizate sunt configurate pentru un acces facil. Este timpul să facem testul pentru a vedea ce fel de beneficii de performanță ne putem aștepta.

Am setat 44 exemple de imagini care variază de la aproximativ 2KB până la 45KB. S-ar putea să vă gândiți că acest lucru reprezintă mai multe imagini decât majoritatea site-urilor web care se vor încărca pe o singură pagină. Asta ar putea fi adevărat, dar există multe site-uri web, cum ar fi portofolii, site-uri de comerț electronic, bloguri etc. care să încarce cât mai multe imagini și, eventual, mai multe imagini.

Deși folosesc numai imagini pentru acest exemplu, ceea ce este important este dimensiunea fișierului și cantitatea pentru comparație. Site-urile de astăzi se încarcă mai multe fișiere javascript, CSS, HTML și imagini pe fiecare pagină. Solicitările de fișiere de 44 sunt probabil mai puține decât majoritatea site-urilor web, astfel încât un CDN ar putea avea un impact și mai mare asupra site-ului dvs. decât vom vedea în această comparație.

Folosesc Inspectorul Web al Safari pentru a vizualiza rezultatele performantelor, am dezactivat cache-urile și schimbarea + reîmprospătarea de 10-15 ori (la fiecare 2-3 secunde) pentru fiecare test pentru a obține o medie decentă a timpului de încărcare total, latență și durată.

  • 45 Fișiere totale (inclusiv document HTML)
  • 561.13KB Dimensiunea totală a fișierului combinată

Web gazdă regulată

Iată rezultatele de performanță când sunt găzduite prin intermediul gazdei mele web regulate. Sortați după latență.

  • 1,82-1,95 secunde timpul de încărcare total
  • 90ms Cea mai rapidă latență (ultimul test)
  • 161ms Cea mai slabă latență (ultimul test)
  • ~ 65% dintre imagini au o latență mai mică de 110 ms

Sortare după durată.

  • 92ms Cea mai scurtă durată (ultimul test)
  • 396ms Durată cea mai lentă (ultimul test)

Amazon S3

Aceleași fișiere au fost folosite pentru testarea S3. Sortați după latență.

  • 1,3-1,6 secunde timpul de încărcare total
  • 55ms Cea mai rapidă latență (ultimul test)
  • Ultima întârziere de 135ms (ultimul test)
  • ~ 90% din imagini au o latență mai mică de 100 ms

Sortare după durată.

  • 56ms Cea mai scurtă durată (ultimul test)
  • 279ms Durată cea mai lentă (ultimul test)

S3 este mai rapid decât gazda web obișnuită, dar numai marginal. Dacă nu v-ați simțit cumva să faceți un CDN, S3 este încă o opțiune excelentă de a oferi site-ului dvs. un impuls de viteză decent. Totusi recomand sa folositi un CDN si vom vedea de ce in acest test urmator.

Amazon CloudFiles

Aceleași fișiere au fost utilizate pentru testarea cloud-ului.

  • 750-850ms Timp total de încărcare
  • 25ms Cea mai rapidă latență (ultimul test)
  • 112 ms Latența cea mai mică (ultimul test)
  • ~ 85% dintre imagini au o latență mai mică de 55 ms.
  • Numai un fișier a avut o latență de peste 100 ms.

Sortare după durată.

  • 38ms Cea mai scurtă durată (ultimul test)
  • 183ms Durata cea mai lentă (ultimul test)

Comparaţie

Iată o defalcare rapidă a comparării performanțelor dintre gazda web obișnuită și aceleași fișiere din serviciul CloudFront de la Amazon.

  • 1,82-1,95 secunde vs 0,75-0,85 secunde timpul de încărcare total (~ 1,1 secunde mai rapid)
  • 90ms vs 25ms cea mai rapidă latență (65ms mai rapidă)
  • 161ms vs 112ms cea mai mică latență (49ms mai rapidă)
  • CloudFront: Un singur fișier cu o latență mai mare de 100ms și 85% din fișierele cu o latență mai mică de 55ms
  • Web gazdă regulată: numai 65% din fișiere au o latență mai mică de 110ms

Compararea duratei

  • 92ms vs 38ms Cea mai scurtă durată (54ms mai rapidă)
  • 396ms vs 183ms Durata cea mai lentă (213ms mai rapidă)

50ms sau chiar 100ms nu sună ca un timp foarte lung de așteptare (0,1 secunde), dar când repetați că pentru 30, 40, 50 sau mai multe fișiere, atunci puteți vedea cum se adaugă rapid până la secunde.

Comparație vizuală

Iată un videoclip rapid care arată cât de vizibil este creșterea timpului de încărcare. Am dezactivat cache-urile și am efectuat o reîmprospătare forțată (shift + refresh) pentru a vă asigura că imaginile nu sunt stocate în cache.

Alte modalități de creștere a performanței

Există și alte câteva modalități de a crește performanța site-ului atunci când utilizați un CDN.

  • Creați subdomenii diferite pentru diferite tipuri de fișiere pentru a maximiza descărcările paralele. De exemplu, încărcați imagini din "images.jremick.com" și alte fișiere precum script-urile și CSS de la "cdn.jremick.com". Acest lucru va permite încărcarea mai multor fișiere în paralel, reducând timpul total de încărcare.
  • Fișiere Gzip precum JavaScript și CSS
  • Configurați ETags

Consultați cele mai bune practici pentru accelerarea site-ului Web pentru mai multe informații.

Servirea fișierelor Gzipped de la CloudFiles

Una dintre opțiunile de mai sus pentru creșterea performanței chiar mai mult a fost furnizarea de fișiere gzipped. Din păcate, CloudFront nu poate determina în mod automat dacă un vizitator poate accepta sau nu fișierele gzip și poate servi unul corect. Din fericire, toate browserele moderne acceptă fișiere gzipped în aceste zile.

Creați și încărcați fișierele Gzipped

Pentru a servi fișierele gzipped de la CloudFront, putem oferi site-ului nostru o anumită logică pentru a servi fișierele potrivite sau putem seta Content-Encoding și Content-Type pe câteva fișiere specifice pentru a menține lucrurile puțin mai simple. GZip fișierele pe care le doriți și le redenumiți astfel încât să nu se termine .gz. De exemplu, "filename.css.gz" ar deveni "filename.css" sau pentru a vă reaminti că este un fișier gzip, nume-l "filename.gz.css". Încărcați acum fișierul gzip în locația din galeta dvs. S3 dorită (nu uitați să setați ACL / Permisiuni).

Dacă nu sunteți sigur cum să gzip un fișier, consultați http://www.gzip.org (OS X poate face acest lucru în terminal)

Setați codificarea conținutului și tipul de conținut

Trebuie să setăm Content-Encoding și Content-Type (dacă nu este deja setat) pe fișierele noastre, astfel încât atunci când este solicitat prin browser, acesta să știe că conținutul este gzipped și îl va putea decomprima în mod corespunzător. În caz contrar, va arăta așa.

Putem face acest lucru cu ușurință cu Bucket Explorer. Odată ce ați descărcat-o, introduceți cheia AWS Access Key și Secret pentru a vă conecta la contul dvs. S3. Găsiți fișierul gzip pe care l-ați încărcat mai devreme, faceți clic dreapta și selectați "Update MetaData".

După cum puteți vedea, acesta are deja setul Content-Type setat la text / css, deci nu trebuie să setăm că (javascript ar fi text / javascript). Trebuie doar să adăugăm dreptul de codificare a conținutului. Faceți clic pe "Adăugați" și în dialogul popup introduceți "Content-Encoding" în câmpul Key și "gzip" în câmpul Value. Faceți clic pe OK, apoi pe Salvează și ați terminat! Acum browserul va vizualiza corect fișierul.

Gsipping un fișier poate reduce foarte mult dimensiunea fișierului. De exemplu, această foaie de stil a fost de aproximativ 22KB și a fost redusă la aproximativ 5KB. Pentru blogul meu mi-am combinat toate pluginurile jQuery cu jQuery UI Tabs. Dupa minificare a fost redus la 26,49KB, dupa ce a fost gzipit a fost redus la 8,17KB.

Concluzie

Există o mulțime de modalități de a crește performanța site-ului dvs. și, în opinia mea, merită încercat. Dacă vizitatorii sunt la doar 0,5 secunde sau chiar 1 secundă de la părăsirea site-ului dvs., un CDN ar putea păstra acest lucru din întâmplare. În plus, cei mai mulți dintre noi sunt viteji de viteză oricum, așa că de ce nu crank până performanța site-ul dvs. dacă puteți? Mai ales dacă ar putea economisi bani în acest proces.

Dacă aveți întrebări, vă rugăm să anunțați-mă în comentarii și voi încerca să răspund la ele. Mulțumiri!

  • Urmăriți-ne pe Twitter sau abonați-vă la RSS Nettuts + pentru mai multe tutori și articole de coaching zilnic.


Cod