1 00:00:00,000 --> 00:00:00,409 2 00:00:00,409 --> 00:00:01,950 THOMAS CARRIERO: Sono Thomas Carriero. 3 00:00:01,950 --> 00:00:03,640 Sono un ingegnere software presso Dropbox. 4 00:00:03,640 --> 00:00:05,250 >> ALEX ALLAIN: Sono Alex Allain. 5 00:00:05,250 --> 00:00:08,200 Sono un ingegnere qui a Dropbox. 6 00:00:08,200 --> 00:00:11,320 >> THOMAS CARRIERO: Sì, ero in realtà il primo TF testa per CS50 7 00:00:11,320 --> 00:00:13,660 quando David Malin ha assunto la classe. 8 00:00:13,660 --> 00:00:17,010 Avevo già insegnato CS50 per due semestri 9 00:00:17,010 --> 00:00:20,700 con Mike Smith, che era il professore prima lì. 10 00:00:20,700 --> 00:00:25,310 >> ALEX ALLAIN: Quindi io in realtà non ha prendere CS50, ma l'ho fatto TF due volte. 11 00:00:25,310 --> 00:00:29,050 Una volta, da TF regolare, e poi il mio ultimo anno 12 00:00:29,050 --> 00:00:32,520 Mi è stato effettivamente capo TF di CS50, che è stato molto divertente. 13 00:00:32,520 --> 00:00:34,270 THOMAS CARRIERO: So quando David allungò 14 00:00:34,270 --> 00:00:38,647 a me sulla configurazione Dropbox nell'apparecchio CS50, 15 00:00:38,647 --> 00:00:41,230 Ero molto emozionato, perché in realtà abbiamo un client Linux, 16 00:00:41,230 --> 00:00:46,270 quindi la maggior parte dei nostri utenti utilizzare uno Di Windows o il client Macintosh, 17 00:00:46,270 --> 00:00:50,940 ma Linux, Macintosh e Windows i clienti sono tutti in realtà molto simili. 18 00:00:50,940 --> 00:00:55,590 >> Quindi quello che abbiamo fatto è che pre-installato il client Dropbox Linux in CS50 19 00:00:55,590 --> 00:00:59,990 apparecchio, e funziona proprio come tutti i nostri altri utenti Linux. 20 00:00:59,990 --> 00:01:02,210 >> ALEX ALLAIN: Così l' modo Dropbox funziona è che 21 00:01:02,210 --> 00:01:08,590 corre come un client su molti diversi sistemi operativi e dispositivi. 22 00:01:08,590 --> 00:01:11,387 Il client desktop di Dropbox è uno dei più noti, 23 00:01:11,387 --> 00:01:12,720 e uno dei più interessanti. 24 00:01:12,720 --> 00:01:15,460 >> THOMAS CARRIERO: Così Dropbox fondamentalmente prende tutti i file 25 00:01:15,460 --> 00:01:19,500 che si inserisce nella cartella e Chunks i file in blocchi di quattro megabyte. 26 00:01:19,500 --> 00:01:23,270 Così daremo uno da 100 megabyte File PDF e faremo 27 00:01:23,270 --> 00:01:26,070 chunk in 25 blocchi di quattro megabyte. 28 00:01:26,070 --> 00:01:30,670 Tali blocchi sono poi codificati e poi li mandiamo ai nostri server di blocco. 29 00:01:30,670 --> 00:01:35,980 >> ALEX ALLAIN: I server di blocco sono l'archiviazione per i blocchi stessi, 30 00:01:35,980 --> 00:01:39,570 e così ogni blocco viene memorizzato in il server blocco con i dati 31 00:01:39,570 --> 00:01:43,990 e Shaw 356 hash di quel blocco. 32 00:01:43,990 --> 00:01:48,280 Questa è una crittografia di base primitivo che riassume, in un certo senso, 33 00:01:48,280 --> 00:01:53,140 i dati in un modo molto singolare che è unico per i dati. 34 00:01:53,140 --> 00:01:55,540 >> Si può caricare il intero file tutto in una volta, 35 00:01:55,540 --> 00:02:00,120 ma si scopre se si fa che i file, veramente grandi hanno 36 00:02:00,120 --> 00:02:03,616 un tempo molto lungo per caricare, e se si verifica un errore, sei fuori di fortuna 37 00:02:03,616 --> 00:02:04,740 e bisogna riavviarlo. 38 00:02:04,740 --> 00:02:07,620 >> Quello che noi facciamo è allora diciamo un altro server nel nostro sistema, 39 00:02:07,620 --> 00:02:11,550 e ciò che noi chiamiamo i metadati Server, che hey questo è un file, 40 00:02:11,550 --> 00:02:14,200 ed è composto dal seguente elenco di blocchi. 41 00:02:14,200 --> 00:02:17,030 E passiamo le hash identificare quei blocchi 42 00:02:17,030 --> 00:02:18,770 piuttosto che ri-caricato l'intero blocco. 43 00:02:18,770 --> 00:02:20,820 Il metaserver poi controlla i server di blocco, 44 00:02:20,820 --> 00:02:22,153 fa che i blocchi sono lì. 45 00:02:22,153 --> 00:02:23,140 Se lo sono, perfetto. 46 00:02:23,140 --> 00:02:24,040 Tutto è buono. 47 00:02:24,040 --> 00:02:26,400 >> THOMAS CARRIERO: Quando abbiamo desidera scaricare in fondo 48 00:02:26,400 --> 00:02:30,050 il file da internet, cerchiamo di per esempio, diremo all'ultimo metaserver 49 00:02:30,050 --> 00:02:33,090 in primo luogo, hey mi puoi dire su dove si trova di questo file? 50 00:02:33,090 --> 00:02:37,230 E metaserver dirà, oh, questo file di in realtà 25 blocchi di quattro megabyte, 51 00:02:37,230 --> 00:02:38,210 ed eccoli qui. 52 00:02:38,210 --> 00:02:41,712 E poi andremo un server di blocco e effettivamente scaricare ciascuno di questi pezzi. 53 00:02:41,712 --> 00:02:43,670 E poi ci ricostruiamo il file da lì, 54 00:02:43,670 --> 00:02:45,086 e poi inizieremo il download. 55 00:02:45,086 --> 00:02:47,580 Sì, così Dropbox di offerte con scala in fondo 56 00:02:47,580 --> 00:02:50,460 da molto, sharding molto aggressivo. 57 00:02:50,460 --> 00:02:56,400 >> ALEX ALLAIN: Sharding è quando si prendere tutti gli utenti nel vostro start up 58 00:02:56,400 --> 00:03:00,010 o la vostra azienda e forse utilizzato per essere in un database, 59 00:03:00,010 --> 00:03:02,620 e che funziona alla grande fino a quando non colpire un certo numero di utenti. 60 00:03:02,620 --> 00:03:04,578 E davvero quello che vuoi da fare è trovare un modo 61 00:03:04,578 --> 00:03:07,410 per dividere quelli attraverso due database, o forse più di due. 62 00:03:07,410 --> 00:03:10,830 Idealmente, tanto che si può avere ogni utente nel mondo. 63 00:03:10,830 --> 00:03:13,080 >> E così quando si Shard, quello che fate voi è 64 00:03:13,080 --> 00:03:16,830 trovare il modo di decidere quale database andare 65 00:03:16,830 --> 00:03:20,240 a che non richiede colpendo una directory centrale. 66 00:03:20,240 --> 00:03:23,670 O forse è un molto veloce, directory centrale look-up a basso costo. 67 00:03:23,670 --> 00:03:27,189 >> THOMAS CARRIERO: Non abbiamo mai tutto memorizzato in un database, 68 00:03:27,189 --> 00:03:28,980 perché è quasi mai andare a scalare. 69 00:03:28,980 --> 00:03:33,970 Così, invece, quello che faremo è prendere tutto che le informazioni, tutti i file che 70 00:03:33,970 --> 00:03:36,610 memorizzate sulla metadati, coccio in centinaia 71 00:03:36,610 --> 00:03:38,710 o migliaia di database logici. 72 00:03:38,710 --> 00:03:42,900 E questo significa che quando abbiamo un richiesta di informazioni di un utente, 73 00:03:42,900 --> 00:03:46,890 faremo in primo luogo dire, hey quale database sono le informazioni di questo utente memorizzato in? 74 00:03:46,890 --> 00:03:49,852 Poi faremo fondamentalmente utilizzare tale decisione di andare 75 00:03:49,852 --> 00:03:51,560 trovare quel database ed è lì che faremo 76 00:03:51,560 --> 00:03:55,080 caricare tutti i file o tutti i metadati sui file. 77 00:03:55,080 --> 00:03:56,464 >> Quindi usiamo un sacco di sharding. 78 00:03:56,464 --> 00:03:57,880 Ma sharding non è sempre sufficiente. 79 00:03:57,880 --> 00:04:00,380 Hai veramente bisogno di memorizzare nella cache un sacco di richieste comuni, 80 00:04:00,380 --> 00:04:04,010 perché anche quelli del database query possono essere costosi 81 00:04:04,010 --> 00:04:07,570 così anche noi facciamo la cattura aggressivo strategie per assicurarsi che il più 82 00:04:07,570 --> 00:04:10,310 richieste comuni sono abbastanza facile da calcolare. 83 00:04:10,310 --> 00:04:14,630 E in fondo che fa un sacco veloce e fa funzionare ex scala. 84 00:04:14,630 --> 00:04:17,320 Così che è a un prezzo molto alto livello come funziona Dropbox. 85 00:04:17,320 --> 00:04:19,149 >> ALEX ALLAIN: Sono Alex Allain. 86 00:04:19,149 --> 00:04:20,857 >> THOMAS CARRIERO: E Sono Thomas Carriero. 87 00:04:20,857 --> 00:04:22,579 ALEX ALLAIN: E questo è CS50. 88 00:04:22,579 --> 00:04:23,936