1 00:00:00,000 --> 00:00:00,409 2 00:00:00,409 --> 00:00:01,950 THOMAS Carriero: Jag är Thomas Carriero. 3 00:00:01,950 --> 00:00:03,640 Jag är en programvara ingenjör på Dropbox. 4 00:00:03,640 --> 00:00:05,250 >> ALEX ALLAIN: Jag är Alex Allain. 5 00:00:05,250 --> 00:00:08,200 Jag är ingenjör här på Dropbox. 6 00:00:08,200 --> 00:00:11,320 >> THOMAS Carriero: Ja, jag var faktiskt den första huvud TF för CS50 7 00:00:11,320 --> 00:00:13,660 när David Malin tog över klassen. 8 00:00:13,660 --> 00:00:17,010 Jag hade redan undervisat CS50 för två terminer 9 00:00:17,010 --> 00:00:20,700 med Mike Smith, som var teknikens professor där. 10 00:00:20,700 --> 00:00:25,310 >> ALEX ALLAIN: Så jag gjorde faktiskt inte ta CS50, men jag gjorde TF den två gånger. 11 00:00:25,310 --> 00:00:29,050 En gång som en vanlig TF, och sedan mitt sista år 12 00:00:29,050 --> 00:00:32,520 Jag var faktiskt chef TF för CS50, vilket var mycket roligt. 13 00:00:32,520 --> 00:00:34,270 THOMAS Carriero: Så När David nått ut 14 00:00:34,270 --> 00:00:38,647 till mig om att ställa in Dropbox i CS50 apparaten, 15 00:00:38,647 --> 00:00:41,230 Jag var verkligen spännande, eftersom vi faktiskt har en Linux-klient, 16 00:00:41,230 --> 00:00:46,270 så de flesta av våra användare använder antingen Windows eller Macintosh-klienter, 17 00:00:46,270 --> 00:00:50,940 men Linux, Mac och Windows klienter är alla faktiskt mycket lika. 18 00:00:50,940 --> 00:00:55,590 >> Så vad vi gjorde är att vi förinstallerat Dropbox Linux-klienten i CS50 19 00:00:55,590 --> 00:00:59,990 apparat, och det går precis som alla våra andra Linux-användare. 20 00:00:59,990 --> 00:01:02,210 >> ALEX ALLAIN: Så hur Dropbox fungerar är det 21 00:01:02,210 --> 00:01:08,590 körs som en klient på många olika operativsystem och enheter. 22 00:01:08,590 --> 00:01:11,387 Den Dropbox-klienten är en av de mest välkända, 23 00:01:11,387 --> 00:01:12,720 och en av de mest intressanta. 24 00:01:12,720 --> 00:01:15,460 >> THOMAS Carriero: Så Dropbox princip tar alla filer 25 00:01:15,460 --> 00:01:19,500 att du lägger i mappen och det bitar dessa filer till fyra megabyte bitar. 26 00:01:19,500 --> 00:01:23,270 Så vi tar en 100-megabyte PDF-fil och vi kommer 27 00:01:23,270 --> 00:01:26,070 bit in den i 25 fyra megabyte bitar. 28 00:01:26,070 --> 00:01:30,670 Dessa bitar är sedan krypteras och sedan skickar vi dem till våra blockera servrar. 29 00:01:30,670 --> 00:01:35,980 >> ALEX ALLAIN: Block servrar lagring för blocken själva, 30 00:01:35,980 --> 00:01:39,570 och så att varje block lagras i blocket servern med data 31 00:01:39,570 --> 00:01:43,990 och en Shaw 356 hash av det blocket. 32 00:01:43,990 --> 00:01:48,280 Det är en mycket grundläggande kryptering primitiv som sammanfattar, i någon mening, 33 00:01:48,280 --> 00:01:53,140 data i ett mycket unikt sätt som är unik för dessa uppgifter. 34 00:01:53,140 --> 00:01:55,540 >> Du kan ladda upp hela filen på en gång, 35 00:01:55,540 --> 00:02:00,120 men det visar sig om du gör att, riktigt stora filer tar 36 00:02:00,120 --> 00:02:03,616 en riktigt lång tid att ladda upp, och om du har fel, du är ute på tur 37 00:02:03,616 --> 00:02:04,740 och du måste starta om den. 38 00:02:04,740 --> 00:02:07,620 >> Vad vi då gör är att vi berättar en annan server i vårt system, 39 00:02:07,620 --> 00:02:11,550 och det vi kallar metadata server, hej detta är att en fil, 40 00:02:11,550 --> 00:02:14,200 och det består av Följande förteckning över block. 41 00:02:14,200 --> 00:02:17,030 Och vi missa de hashar att identifiera de block 42 00:02:17,030 --> 00:02:18,770 snarare än re-uppladdning hela blocket. 43 00:02:18,770 --> 00:02:20,820 Den meta sedan kontrollerar blocket servrar 44 00:02:20,820 --> 00:02:22,153 ser till att blocken är där. 45 00:02:22,153 --> 00:02:23,140 Om de är, perfekt. 46 00:02:23,140 --> 00:02:24,040 Allt är bra. 47 00:02:24,040 --> 00:02:26,400 >> THOMAS Carriero: När vi vill i princip ladda ner 48 00:02:26,400 --> 00:02:30,050 filen från Internet, låt oss säg, vi ska säga till den sista meta 49 00:02:30,050 --> 00:02:33,090 första, hej kan du berätta för mig om var den här filen ligger? 50 00:02:33,090 --> 00:02:37,230 Och meta kommer att säga, åh denna fil faktiskt 25 fyra megabyte stor bit, 51 00:02:37,230 --> 00:02:38,210 och här är de. 52 00:02:38,210 --> 00:02:41,712 Och sedan går vi ett block server och faktiskt ladda ner var och en av dessa bitar. 53 00:02:41,712 --> 00:02:43,670 Och så kommer vi rekonstruera filen därifrån, 54 00:02:43,670 --> 00:02:45,086 och då kommer vi att påbörja nedladdningen. 55 00:02:45,086 --> 00:02:47,580 Ja, så Dropbox av erbjudanden med skala i princip 56 00:02:47,580 --> 00:02:50,460 med mycket, mycket aggressiv sharding. 57 00:02:50,460 --> 00:02:56,400 >> ALEX ALLAIN: Sharding är när du ta alla användare i din starta 58 00:02:56,400 --> 00:03:00,010 eller ditt företag och kanske de brukade vara i en databas, 59 00:03:00,010 --> 00:03:02,620 och som fungerar bra tills du slå ett visst antal användare. 60 00:03:02,620 --> 00:03:04,578 Och egentligen vad du vill göra är att hitta något sätt 61 00:03:04,578 --> 00:03:07,410 att dela upp dem över två databaser, eller kanske mer än två. 62 00:03:07,410 --> 00:03:10,830 Helst nog att du kan har varje användare i världen. 63 00:03:10,830 --> 00:03:13,080 >> Och så när du shard, vad du gör är att du 64 00:03:13,080 --> 00:03:16,830 hitta ett sätt att avgöra vilken databas för att gå 65 00:03:16,830 --> 00:03:20,240 att det inte kräver slå en central katalog. 66 00:03:20,240 --> 00:03:23,670 Eller kanske är det en mycket snabb, billig look-up central katalog. 67 00:03:23,670 --> 00:03:27,189 >> THOMAS Carriero: Vi har aldrig allt lagras i en databas, 68 00:03:27,189 --> 00:03:28,980 eftersom det är nästan aldrig att skala. 69 00:03:28,980 --> 00:03:33,970 Så istället, vad vi kommer att göra är att ta alla denna information, alla filer som 70 00:03:33,970 --> 00:03:36,610 lagras på metadata, shard över hundratals 71 00:03:36,610 --> 00:03:38,710 eller tusentals logiska databaser. 72 00:03:38,710 --> 00:03:42,900 Och det betyder att när vi har en begära en användares information, 73 00:03:42,900 --> 00:03:46,890 vi ska först säga hej vilken databas är denna användares information som lagras i? 74 00:03:46,890 --> 00:03:49,852 Sedan ska vi i grund och botten Använd beslutet att gå 75 00:03:49,852 --> 00:03:51,560 finna att databasen och det är där vi ska 76 00:03:51,560 --> 00:03:55,080 läsa in alla filer eller alla metadata om filerna. 77 00:03:55,080 --> 00:03:56,464 >> Så vi använder en hel del sharding. 78 00:03:56,464 --> 00:03:57,880 Men sharding är inte alltid tillräckligt. 79 00:03:57,880 --> 00:04:00,380 Du behöver faktiskt att cacha en hel del av de gemensamma ansökningar, 80 00:04:00,380 --> 00:04:04,010 eftersom även de databas frågor kan bli dyrt 81 00:04:04,010 --> 00:04:07,570 så vi gör också aggressiv fånga strategier för att se till att de mest 82 00:04:07,570 --> 00:04:10,310 gemensamma ansökningar är ganska lätt att beräkna. 83 00:04:10,310 --> 00:04:14,630 Och i grund och botten som gör en hel del snabbare och det gör det att fungera ex skala. 84 00:04:14,630 --> 00:04:17,320 Så det är på en mycket hög nivå hur Dropbox fungerar. 85 00:04:17,320 --> 00:04:19,149 >> ALEX ALLAIN: Jag är Alex Allain. 86 00:04:19,149 --> 00:04:20,857 >> THOMAS Carriero: Och Jag är Thomas Carriero. 87 00:04:20,857 --> 00:04:22,579 ALEX ALLAIN: Och detta är CS50. 88 00:04:22,579 --> 00:04:23,936