«Post sponsorizat: Gigaspaces, Nokia, Oracle, Percona Live, AiCache, ElasticHosts, Logic Monitor, Modeling Atribution, New Relic, AppDynamics, CloudSigma, ManageEngine, Site24x | Principala | Stuff Internetul spune despre scalabilitate pentru 23 martie 2012 »
luni
Mar262012
7 ani de lectii de scalabilitate YouTube in 30 de minute
Luni, 26 martie 2012 la 9:15
Daca ati inceput sa construiti un site de intalniri si, in schimb, ati finalizat construirea unui site de partajare video (YouTube) care gestioneaza 4 miliarde de vizualizari pe zi, atunci este posibil sa inveti ceva pe parcurs. Si intr-adevar, Mike Solomon, unul dintre inginerii originali de pe YouTube, a invatat multe si a dat o discutie despre asta la PyCon: Scalability on YouTube.
Nu este vorba despre o discutie bazata pe arhitectura, unde ne este condus printr-o descriere a modului in care multe casete se conecteaza intre ele. Mike ar putea sa spuna asta. El a lucrat la construirea infrastructurii de servlet YouTube, functia de indexare video, sistemul de transcodare video, cautarea textului complet, un CDN si multe altele. Dar, in schimb, a facut un pas inapoi, a aruncat o privire lunga in jurul orei in care s-a desfasurat si a impartasit cateva lectii profunde, evident castigate din experienta.
Preluarea cheie a discutiei pentru mine se descurca foarte mult cu instrumente foarte simple. In timp ce multe echipe se indreapta catre ecosisteme mai complexe, YouTube chiar il pastreaza simplu. Programeaza in principal in Python, folosesc MySQL ca baza de date, s-au blocat cu Apache si chiar functii noi pentru un site atat de masiv incepe ca un program Python foarte simplu.
Asta nu inseamna ca YouTube nu face chestii misto, ci ele, dar ceea ce face ca totul sa functioneze impreuna este mai mult o filozofie sau un mod de a face lucrurile decat hocus pocus tehnologic. Ce a facut YouTube pe unul dintre cele mai mari site-uri web din lume? Cititi mai departe si vedeti …
Statistici
- 4 miliarde de vizualizari pe zi
- 60 de ore de videoclip sunt incarcate in fiecare minut
- 350 de milioane de dispozitive sunt activate pe YouTube
- Veniturile se dubleaza in 2010
- Numarul videoclipurilor a crescut cu 9 ordine de marime, iar numarul dezvoltatorilor a urcat doar doua ordine de marime.
- 1 milion de linii de cod Python
Gramada
- Python – majoritatea liniilor de cod pentru YouTube sunt inca in Python. De fiecare data cand urmariti un videoclip YouTube, executati o gramada de cod Python.
- Apache – atunci cand crezi ca trebuie sa scapi de asta, nu o faci. Apache este o adevarata tehnologie rockstar la YouTube, deoarece o pastreaza simpla. Fiecare cerere trece prin Apache.
- Linux – beneficiul Linux este intotdeauna o modalitate de a intra si de a vedea cum se comporta sistemul tau. Oricat de rau se comporta aplicatia dvs., puteti arunca o privire asupra ei cu instrumente Linux, cum ar fi strace si tcpdump.
- MySQL – este folosit foarte mult. Cand vizionati un videoclip primiti date de la MySQL. Candva se foloseste o baza de date relationala sau un blob store. Este vorba despre reglarea si luarea de decizii cu privire la modul in care va organizati datele.
- Vitess – un nou proiect lansat de YouTube, scris in Go, este un frontend pentru MySQL. Face multa optimizare din mers, rescrie interogari si actioneaza ca un proxy. In prezent, serveste la fiecare solicitare de baza de date YouTube Este bazat pe RPC.
- Zookeeper – un server de blocare distribuit. Este folosit pentru configurare. O piesa tehnologica foarte interesanta. Greu de utilizat corect, asa ca cititi manualul
- Wiseguy – un container servlet CGI.
- Spitfire – un sistem de modelare. Are un arbore de sintaxa abstracta care sa le faca sa transforme pentru ca lucrurile sa mearga mai repede.
- Formate de serializare – indiferent de care le utilizati, toate sunt scumpe. Masura. Nu folositi muraturile. Nu este o alegere buna. Memorii tampon de protocol s-au gasit lent. Au scris propria lor implementare BSON, care este de 10-15 ori mai rapid decat cea pe care o puteti descarca.
Lectii generale
- Tao de YouTube: alege cea mai simpla solutie posibila cu cele mai slabe garantii practice. Motivul pentru care doriti toate aceste lucruri este ca aveti nevoie de flexibilitate pentru a rezolva problemele. In minutul in care specificati ceva ce va pictati intr-un colt. Nu veti face acele garantii. Problema dvs. devine automat mai complexa atunci cand incercati sa faceti toate aceste garantii. Nu va lasati nicio cale de iesire.
- Tot procesul este despre scalabilitate. Un sistem scalabil este unul care nu iti sta in cale. De care nu stiti. Nu este vorba de zvonuri. Este o solutie generala de solutionare a problemelor.
- Caracteristic al proiectarii mari a sistemului: fiecare sistem este adaptat la cerintele sale specifice. Totul depinde de specificul a ceea ce construiesti.
- YouTube nu este asincron, totul se blocheaza.
- Crede mai mult in filozofie decat in doctrina. Simplifica. Ce inseamna asta? O sa stii cand o vei vedea. Daca faceti recenzii de cod care schimba mii de linii de cod si multe fisiere, atunci a existat probabil un mod mai simplu. Prima dvs. demonstratie ar trebui sa fie simpla, apoi sa repete.
- Pentru a rezolva o problema: Un singur cuvant – simplu. Cautati cel mai simplu lucru care va aborda spatiul cu probleme. Exista o multime de probleme complexe, dar prima solutie nu trebuie sa fie complicata. Complexitatea va veni in mod natural in timp.
- Multe sisteme YouTube incep ca un singur fisier Python si devin ecosisteme mari dupa multi ani. Toate prototipurile lor au fost scrise in Python si au supravietuit o perioada surprinzatoare de timp.
- Intr-o recenzie de proiectare:
- Care este prima solutie?
- Cum te vei itera?
- Ce stim despre cum vor fi utilizate aceste date?
- Lucrurile se schimba in timp. Modul in care YouTube a inceput nu are nicio influenta asupra a ceea ce se intampla mai tarziu. YouTube a inceput ca un site de intalniri. Daca ar fi conceput pentru asta, vor avea o conversatie diferita. Ramai flexibil.
- CDN YouTube. Initial a contractat-o. A fost foarte scump, asa ca au facut-o singure. Puteti construi un CDN video destul de bun daca aveti un tip hardware bun. Construiti un rack foarte mare, lipiti masini, apoi luati lighttpd si apoi treceti pe handler 404 pentru a gasi videoclipul pe care nu l-ati gasit. Asta a durat doua saptamani si a fost prima zi care a servit 60 de gigabits. Puteti face multe cu instrumente foarte simple.
- Trebuie sa masori. Vitess a schimbat unul dintre protocoalele sale pentru o implementare HTTP. Chiar daca era in C, era lent. Asa ca au eliminat HTTP si au facut un apel direct la socket folosind python si asta a fost cu 8% mai ieftin pe CPU global. Invelisul pentru HTTP este intr-adevar scump.
Tehnici de scalabilitate
- Acestea nu sunt idei noi, dar este uimitor cum se pot aplica cateva idei de baza in dimensiuni mult diferite.
- Impartiti si cuceriti – Tehnica scalabilitatii
- Aceasta este tehnica scalabilitatii. Totul se refera la impartirea muncii. Deciderea modului de executare. Se aplica la multe lucruri, de la nivel web, aveti o multime de servere web care sunt mai mult sau mai putin identice si independente si le cresti pe orizontala. Asta inseamna impartiti si cuceriti.
- Aceasta este punctul cel mai important al accentuarii bazelor de date. Cum partiti lucrurile si comunicati intre partile pe care le-ati divizat. Acestea sunt lucruri pe care doriti sa le dati seama mai devreme, deoarece acestea influenteaza modul in care cresti.
- Conexiunile simple si libere sunt cu adevarat valoroase.
- Natura dinamica a Python este un castig aici. Oricat de rau este API-ul tau, poti sa te ciocnesti sau sa modifici sau sa iti decorezi drumul din mai multe probleme.
- Corectitudinea aproximativa – inselati putin
- O alta tehnica preferata. Starea sistemului este cea care este raportata. Daca un utilizator nu poate spune ca o parte a sistemului este skewing si inconsistent, atunci nu este.
- Un exemplu de lume reala. Daca scrieti un comentariu si cineva incarca pagina in acelasi timp, s-ar putea sa nu o primeasca pentru 300-400ms, utilizatorului care citeste nu ii va pasa. Scriitorul comentariului ii va pasa, asa ca va asigurati ca utilizatorul care a scris comentariul il va vedea. Asa ca inseli putin. Sistemul dvs. nu trebuie sa aiba tranzactii consistente la nivel global. Asta ar fi super scump si excesiv. Nu orice comentariu este o tranzactie financiara. Deci, stiti cand puteti insela.
- Expert Knob Twiddling
- Intreaba, ce stii despre modelul tau de consecventa? Pentru comentarii este in cele din urma suficient de bun? Inchirierea unui film este diferita. Cand inchiriem, exista bani, asa ca vom face tot posibilul sa nu pierdem asta. In functie de date este nevoie de modele de consistenta diferite.
- Jitter – Adaugati entropia inapoi in sistemul dvs.
- Cuvant fierbinte in grupul lor tot timpul. Daca sistemul tau nu scartaie, atunci vei primi turme. Aplicatiile distribuite sunt cu adevarat sisteme meteorologice. Debugarea acestora este la fel de determinanta ca prezicerea vremii. Jitter introduce mai multa aleatorie, deoarece, in mod surprinzator, lucrurile tind sa se stiveze.
- De exemplu, expirarea cache-ului. Pentru un videoclip popular, cache lucrurile cat mai bine. Cel mai popular videoclip pe care l-ar putea cache timp de 24 de ore. Daca totul expira la un moment dat, fiecare masina va calcula expirarea in acelasi timp. Acest lucru creeaza o turma tuneta.
- Prin gluma, spui ca expira la intamplare intre 18-30 de ore. Asta impiedica lucrurile sa se stiveze. Ei folosesc asta peste tot. Sistemele au tendinta de a se sincroniza pe masura ce operatiunile se aliniaza si incearca sa se distruga. Fascinant de urmarit. Aveti un sistem de disc lent pe o singura masina si toata lumea asteapta la o solicitare, astfel incat dintr-o data toate aceste alte solicitari de pe toate aceste alte masini sunt complet sincronizate. Acest lucru se intampla atunci cand aveti multe masini si aveti multe evenimente. Fiecare elimina de fapt entropia din sistem, asa ca trebuie sa adaugati unele din nou.
- Inselaciune – Stii sa falsifici date
- Tehnica minunata.
lucyskkrr porno http://www.hipguide.com/cgi-bin/linkout.cgi?url=https://adult69.ro/
porno mature mom http://fishingkuban.ru/forum/away.php?s=https://adult69.ro/
filme porno intre mama si fiu http://www.tiosunrise.com/__media__/js/netsoltrademark.php?d=adult69.ro/
porno cu soacra http://esynergy.com/__media__/js/netsoltrademark.php?d=adult69.ro/filme-porno/amatori
free porno teen http://www.sesvete-danas.hr/Ad/Redirect/Index?AdID=22&url=https://adult69.ro/filme-porno/anal
porno cu curu mare http://www.derotronic.net/redirect.php?action=url&goto=adult69.ro/filme-porno/asiatice
porno mama cu fiu http://www.fsbswanville.com/redirect/notice.asp?site_name=Minnesota+Bankers+Association&site_url=https://adult69.ro/filme-porno/beeg
filme porno ungaria http://www.netstart.ch/redirect.php?ID=2259&url=https://adult69.ro/filme-porno/blonde
caut filme porno gratis http://www.caapersonalappearances.com/__media__/js/netsoltrademark.php?d=adult69.ro/filme-porno/brazzers
porno cu scolarite http://colorednudes.com/cgi-bin/atc/out.cgi?id=24&u=https://adult69.ro/filme-porno/brunete
filme porno cu muschiulosi http://www.m-in-s.ch/stats-mins/stats-link.php?id=122&type=idproduct&url=https://adult69.ro/filme-porno/chaturbate
filme porno agent http://englandlux.ru/bitrix/redirect.php?event1=1&event2=&event3=&goto=https://adult69.ro/sora-se-relaxeaza-in-baie-cu-pula-fratelui
pamela anderson porno http://www.rowa.co.jp/acc/acc.cgi?REDIRECT=https://adult69.ro/brunetele-inghit-sperma-de-la-aceeasi-pula-mare
porno zoofilia http://www.jshmanagement.com/__media__/js/netsoltrademark.php?d=adult69.ro/bruneta-superba-geme-de-placerea-pulii-iubitului-ei
filme porno gratis incest https://grozdi.ru/rd.php?url=https://adult69.ro/femeie-matura-obtine-o-ejaculare-extrema-pe-fata
filme porno straine http://c005.pat00.de/r.php?u=296d4edfc773&g=6361&l=005&p=360514968302&url=https://adult69.ro/curva-cu-experienta-este-fututa-brututal-in-pizda-rasa
porno hair http://tcrc.org/mod.php?mod=weblink&op=visit_link&lid=9&url=https://adult69.ro/sex-salbatic-intre-adolescenti-amatori
filmulete porno cu virgine http://www.bruceclarkhomes.com/RELinkDir/XcDirRedirect.asp?ID=1251&url=https://adult69.ro/pizda-blondei-cu-tatele-mari-e-calarita-de-o-pula-groasa
filme porno fake taxi http://www.hirebio.com/home/redirect/?site=https://adult69.ro/asistenta-fierbinte-primeste-limbi-in-pizda
porno sado maso http://tqr.noradtrackssanta.net/__media__/js/netsoltrademark.php?d=adult69.ro/lezbienele-se-fut-cel-mai-bine-afaraCel mai rapid apel de functii este cel care nu se intampla. Cand aveti un contor in crestere monoton, cum ar fi numarul de vizionari de film sau numarul de vizualizari de profil, puteti efectua o tranzactie la fiecare actualizare. Sau puteti face o tranzactie de fiecare data in timp si sa o actualizati cu o cantitate aleatorie si atat timp cat se schimba de la ciudat la chiar oamenii, cred ca este real. Stii sa falsifici date.
- Tehnica minunata.
- Componente scalabile – Faceti-va norocul
- Poti sa te uiti la o API si sa ai o stare de bine. Sunt intrarile bine definite? Stiti ce iesiti? Multe dintre acestea ajung sa fie despre date. Aveti o specificatie stricta a datelor ce apar in fiecare functie si modul in care acestea curg efectiv va ajuta sa intelegeti aplicatia fara documentatie. Puteti spune ce se intampla inainte si dupa ce este apelata o functie.
- In Python lucrurile tind sa se indrepte spre RPC. Structura codului dvs. se bazeaza pe disciplina programatorilor. Asa ca stabiliti conventii bune, cand toate celelalte nu reusesc, exista un perete RPC, astfel incat sa stiti ce intra si ce iese.
- Componentele dvs. nu vor fi perfecte. O componenta poate dura o luna sau sase luni, cine stie. Desenand aceste randuri, iti faci o parte din noroc. Cand lucrurile merg spre sud, poti sa-l schimbi si sa faci ceva diferit. Uneori, rescrierea care scrie in piton si C, iar alteori inseamna sa scapi complet de ea. Nu stii pana nu poti observa.
- Cu atat de multi oameni dintr-o echipa nimeni nu poate cunoaste intregul sistem, asa ca trebuie sa definiti componente. Acesta este transcodul video, este distinct de cautarea video. Vrei subcomponente bine definite. Este un design software bun. Aceste lucruri ajung sa vorbeasca intre ele, astfel incat sa aveti o specificatie buna a datelor este util. Cel mai mare pacat pe care l-a facut a fost comunicarea intre stratul servlet si stratul de sabloane pentru a fi un dictionar. Foarte proasta idee. Ar fi trebuit sa adauge un WatchPage si sa spuna ca o pagina de vizionare are un videoclip si cateva comentarii si cateva videoclipuri inrudite. Acest lucru a cauzat multe probleme, deoarece dictionarul poate avea cateva sute de atribute. Nu fac intotdeauna alegerea corecta.
- Eficienta – tranzactionat oprit pentru scalabilitate
- Eficienta este tranzactionata pentru scalabilitate. Cel mai eficient lucru este sa-l scrieti in C si sa-l incorporati intr-un singur proces, dar nu este scalabil.
- Concentrati-va asupra nivelului macro, a componentelor dvs. si a modului in care acestea apar. Are sens sa faci asta un RPC sau sa il faci in linie? Impartiti-l intr-un sub pachet si doar intr-o zi acest lucru poate fi diferit.
- Concentrati-va pe algoritmi. In Python efortul de a implementa un algoritm bun este scazut. Exista, de exemplu, modulul bisect, unde puteti lua o lista, faceti ceva semnificativ si serializati-l pe disc si o puteti citi din nou. Exista o penalizare fata de C, dar este foarte usor.
- Masurare. In Python masurarea este ca si cum ai citi frunzele de ceai. In Python exista o multime de lucruri care sunt contra-intuitive, cum ar fi costul colectiei. Majoritatea bucatilor din aplicatiile lor isi petrec timpul serializand. Serializarea profilurilor depinde foarte mult de ceea ce introduceti. Serializarea int-urilor este foarte diferita de serializarea blob-urilor mari.
- Eficienta in Python – Stiind ce sa nu faci
- Mai multe despre a sti ce sa nu faci. Cat de dinamic faceti lucrurile corelate cu cat de scump este sa rulati aplicatia dvs. Python.
- Codul Dummer este mai usor de utilizat si mai usor de intretinut. Cu cat codul este mai magic, cu atat este mai greu sa iti dai seama cum functioneaza.
- Ei nu fac foarte multe OO. Ei folosesc o multime de spatii de nume. Folositi clase pentru organizarea datelor, dar mai rar pentru OO.
- Cum va arata arborele dvs. de coduri? El vrea ca aceste cuvinte sa o descrie: simpla, pragmatica, eleganta, ortogonala, compozibila. Acesta este un ideal, realitatea este putin diferita.
Articole similare
- Super-dimensionare YouTube cu Python
- Scalarea bazelor de date MySQL pentru Web
- Arhitectura YouTube
- Pe HackerNews








