±à¼ÍƼö: |
±¾ÎÄÀ´Ô´Ì·Ö¥À¼£¬FacebookÔ»îÈËÊý³¬¹ý20ÒÚ,Êý¾Ý´æ´¢ºÍ´«ÊäÊÇÓû§ÔʼÊý¾ÝµÄ¼¸ºÎ±¶Êý£¬FacebookÊÇÕâÑù×öÔËάµÄ¡£ |
|

ÐòÑÔ
ÔÚ¸Õ¸ÕÆð²½µÄС¹«Ë¾£¬ÖÐÐ͵ÄTwitterÒÔ¼°¹æÄ£ÅÓ´óµÄFacebook×öÔËάÓÐʲô²»Í¬£¿ÔÚ¹è¹ÈÊ®¼¸Äê×öÕâÒ»Ðж¼¾ÀúÁËÒ»±é¡£»¥ÁªÍøÊ±´úµÄС¹«Ë¾ÀïÃæ×öÔËάµÄÈ˶¼ÊÇÊ®ÏîÈ«ÄÜ£¬ÔÚÕâÑùµÄ»·¾³ÖÐÄãµÄÄ¿±êÖ»ÓÐÒ»¸öÄǾÍÊÇÖ§³Å²úÆ·µÄÔËÐУ¬ËùÓй¤¾ß¶¼¿ÉÒÔÓÃopen sourceµÄƽ̨£¬ÔÚÔÆÉÏ´î³öÖ§¼Ü£¬×î¿ìʵÏÖ²úÆ·µÄ¹¦ÄܾÍÊÇÓ®¼Ò¡£
µ±Óû§Ô»îÔÚÊ®ÒÚÒÔÉÏ»¹ÒªÒÔÿÄê50%ÒÔÉϵļÆËã¹æÄ£Ôö³¤£¬ÒªÖ§³ÅÕâÑùµÄ·¢Õ¹£¬ÎÒÃǰÑÓÐÏÞµÄ×ÊÔ´·ÅÔÚÄÄÀÈç¹û¹æÄ£»¹ÒªÔö³¤Ê®±¶°Ù±¶ÄØ£¬ÎÒÃÇÈçºÎÃæÕâÑùµÄÌôÕ½£¿
±¾ÎĵÄÁù¸ö²¿·Ö£º
1¡¢FacebookÔÚ¿ÉÀ©Õ¹ÖÐÃæÁÙµÄÌôÕ½;
2¡¢·Ö½âʽµÄ¸ÅÄî;
3¡¢·Ö½âʽµÄÍøÂç;
4¡¢·Ö½âʽµÄ´æ´¢;
5¡¢Ê¹ÓÃÎÂÊý¾Ý´æ´¢(Warm Storage)µÄspark;
6¡¢×ܽᡣ
Ò»¡¢FacebookÔÚ¿ÉÀ©Õ¹ÖÐÃæÁÙµÄÌôÕ½

ÔÚ¼¸¸öÐÇÆÚÒÔǰ£¬Ôú¿Ë²®¸ñ·¢²¼ÁËFacebookÔ»îÈËÊý³¬¹ý20ÒÚµÄÏûÏ¢¡£20ÒÚÈËÿÌìËù²úÉúµÄÊý¾Ý´Ó¼¸ÄêǰµÄÎı¾ÎªÖ÷µ½Í¼Æ¬ÔÙµ½½ñÌìµÄÊÓÆµ£¬Êý¾ÝÒÔÊýÊ®±¶µÄËÙ¶ÈÔö³¤£¬¶øÓû§Êý¾ÝÏà¶ÔÓÚÄÚ²¿µÄ»úÆ÷Óë»úÆ÷Ö®¼äµÄÊý¾Ý´«Ê䣬ʵ¼ÊÉÏ»¹Ö»ÊDZùɽһ½Ç£¬ÓÈÆäÊÇ´óÊý¾Ý¼ÆËãÆ½Ì¨£¬Êý¾Ý´æ´¢ºÍ´«ÊäÊÇÓû§ÔʼÊý¾ÝµÄ¼¸ºÎ±¶Êý¡£Êг¡ÉÏÏÖÓеļ¼Êõ¶¼²»ÄÜÖ§³ÅÎÒÃÇÃæÁٵĹæÄ£µÄÀ©Õ¹¡£ÎÒÃÇÔõÑùÀ´Ãæ¶ÔÕâÑùµÄÌôÕ½£¿
½ü¼¸ÄêÒÔÀ´¼ÆËã»úCPUËÙ¶ÈÒѾûÓÐÏóĦ¶û¶¨ÂÉËù˵µÄ³É±¶Ôö³¤£¬¼ÆËãµÄÀ©Õ¹À´×ÔÓÚºáÏòÀ©Õ¹·Ö²¼Ê½µÄ¼ÆËã¼Ü¹¹¡£ÔÚ·Ö²¼Ê½¼ÆËãϵͳÀïÃæ¼ÆËã»úµ¥»úµÄÉè¼ÆºÍÈÝÁ¿¶¼Íù¼òµ¥ºÍСÐ͵¥Ôª·¢Õ¹¡£ÎÒÃÇÀ©Õ¹´óÊý¾Ý¼ÆËãÈÝÁ¿¶ÔÓÚ´ÓÍøÂçµ½´æ´¢£¨storage£©µ½¼ÆË㣨compute£©¼¯ÈºµÄÉè¼Æ¶¼ÓÐÁËÒ»¸öȫеÄ˼·¡£
ÔÚÕâÀïÎÒÃǽéÉÜÒ»ÏÂFacebook·Ö½âʽ´óÊý¾Ý¼ÆËã¼Ü¹¹µÄ¶à¸ö²ãÃæ£¬Ò²¾ÍÊÇ·Ö½âÊ½ÍøÂçϵͳ£¨disaggregated network£©£¬·Ö½âʽ´æ´¢ÏµÍ³£¨disaggregated storage£©£¬ ÒÔ¼°ÒÔSparkΪÀýµÄ·Ö½âʽ¼ÆËãϵͳ£¨disaggregated compute£¬ Spark£©¡£
¶þ¡¢·Ö½âʽµÄ¸ÅÄî

·Ö½âʽ¼ÆËãµÄÀíÄ´óÖ¾ÍÊÇÓÃͨÓûúÌæ´ú¶¨ÖÆ»ú£» Ó²¼þºÍÈí¼þµ¥¶À¿ª·¢Ìæ´úÈíÓ²¼þͬ²½¿ª·¢£»¼ÆËãºÍ´æ´¢·ÖÀëÌæ´ø¼ÆËã´æ´¢¹²´æ¡£
ÔÚÕâÖÖÇé¿öÏ£¬·Ö½âʽµÄÓŵãÊÇ£ºÈí¼þºÍÓ²¼þ·Ö±ðÒÔ¸÷×ԵIJ½µ÷Éý¼¶¡£Æä´Î£¬¼ÆËãºÍ´æ´¢·ÖÀ룬Õâ¾ÍÔÊÐíÎÒÃǰÑcomputeºÍstorage·Ö¿ªÀ´À©Õ¹£¬ storage¿ÉÒÔÔÚ·Ö¼¶Îªcold storageºÍwarm storage£¬ ¼ÆËãclusterÔò¿ÉÒÔÓÃhigh memory£¬high CPU»úÐÍÀ´×é³É¡£
Èý¡¢·Ö½âʽµÄÍøÂç

FacebookµÄ·Ö½âÊ½ÍøÂç¼Ü¹¹ÃûΪFabric¡£ËüÊÇFacebookÊý¾ÝÖÐÐĺËÐÄÍø£¬Õâ¸öÇ¿´óµÄÄÚÍø¾ßÓи߿ɿ¿£¬ÎÞÆ¿¾±£¬´óÈÝÁ¿£¬Ò×¹ÜÀíµÈÓÅÁ¼ÐÔÄÜ¡£ÓÐÁËÕâ¸ö»ù´¡¿ÉÒÔÈüÆËã·ÖÀë³ÉΪÏÖʵ¡£
ÔÚÉÏÒ»´úµÄÍøÂç¼Ü¹¹ÀÈçÉÏͼÎÒÃǽ¨Á¢¼¯ÈºÀ´×÷ÎªÍøÂçµÄ×é³Éµ¥Î»¡£ÎªÁ˼ÓÇ¿¿É¿¿ÐÔ£¬Ò»¸ö¼¯ÈºÓÉ3+1 CSW£¨Cluster Switch£©×é³É£¬ ¶à¸öTOR£¨Top of Rack£©Á¬µ½Ò»×éCSW ³ÉΪһ¸ö¼¯Èº¡£
Æä¿É¿¿ÐÔÈ¡¾öÓÚCSWµÄÈßÓà±¶Êý¡£Ò»¸öCSW»µÁË£¬ÆäËûÈý¸öCSW¿ÉÒÔÖ§³Å¼¯Èº¼ÌÐø¹¤×÷¡£ËüµÄ¾ÖÏÞÐÔÔÚÓÚ£ºÎÒÃDz»ÄÜÎÞÏÞÖÆµÄÀ©´óCSWµÄÈÝÁ¿¡£¼¯Èº´óСÍêȫȡ¾öÓÚ½»»»Æ÷µÄÈÝÁ¿£¬Ò»¸ö¼¯Èº¿ÉÒÔ´ïµ½1000̨»òÕß¼¸Ç§Ì¨»úÆ÷¡£Èç¹ûÒ»¸ö½»»»»ú»µµôÁË£¬¶ÔÒ»¸ö¼¯ÈºÈÝÁ¿Ó°Ïì·Ç³£´ó£¬¶øÇÒ¶¨ÖƵĴó¹æÄ£½»»»»úά»¤ÆðÀ´À§ÄÑ¡£
µ±¼ÆË㼯Ⱥ£¨compute cluster£©ÈÝÁ¿³¬³öÍøÂ缯Ⱥ£¨network cluster£©·¶Î§Ê±£¬ÍøÂç¾Í³ÉΪÁËÆ¿¾±¡£ÏÖÔںܶàµÄÓ¦ÓÃÒѾ³¬¹ýÁËÍøÂ缯Ⱥ·¶Î§£¬±ÈÈçÒ»¸öSpark»òÕßHadoop clusterÒ»°ã³¬¹ý¼¸Ç§Ì¨¡¢ÉÏÍǫ̀»úÆ÷£¬computing clusterÔ¶Ô¶´óÓÚnetwork cluster¡£

ÏÖÔÚ£¬ÐÂÐ͵ÄThe Fabric¼Ü¹¹ÊÇÍø×´µÄ¼Ü¹¹¡£¶ø´«Í³µÄ½á¹¹Êǽð×ÖËþÐ͵쬯䶥¶Ë±ØÈ»ÊÇÒ»¸öÆ¿¾±¡£ÔÚÕâÑùÒ»¸öÍø×´µÄÍøÂçÀËüÊÇÔÚRack switch¡¢Fabric switchµÄÉÏÃæºÍÖ®¼äÈ«²¿¶¼ÊÇÍø×´½á¹¹¡£
ÎÒÃÇËùµÃµ½µÄ½á¹û´ÓÕâÒ»¶ËµÄServerµ½ÁíÒ»¶ËµÄServer£¬Á½ÕßÖ®¼äÈç¹ûÒª´«ÊäÊý¾Ý£¬ËüÓжàÌõͨµÀ¡£ÔÚ¶àÌõͨµÀÀµ±ÈκÎÒ»¸ö½Úµã»µµô»òÕß¶à¸ö½Úµã»µµô£¬¶ÔÓÚÕû¸öµÄ´«ÊäûÓÐÈκεÄÓ°Ï죻¶øÇÒ¿ÉÒÔ×öµ½ÔÚ¼¸Ê®Íǫ̀»úÆ÷Ö®¼äÏ໥µÄ´«Ê䣬ûÓÐÆ¿¾±¡£
ÉÏÊö;ÖÐËù˵µÄÒ»¸öÄ£¿é½Ð×öÒ»¸öPod¡£Fabric switchºÍspine switchËùÓõIJ¿¼þ¶¼ÊÇͨÓò¿¼þ¡£ÍøÂçµÄ²¿ÊðÊÇÒÔpodΪµ¥Î»£¬Èç¹ûÐèÒªÀ©½¨£¬ÎÒÃÇÖ»ÒªÖ±½Ó¼ÓÒ»¸öPod¾Í¿ÉÒÔÁË¡£Èç¹ûÐèÒªÔÚFabricÄÚ²¿Ôö¼Ó´ø¿í£¬¾ÍÔÙÔö¼Óuplink¡£ÉÏÊöµÄÍøÂç»ù´¡¾Í¸øÎÒÃǵļÆËãºÍ´æ´¢´øÀ´ÁËÒ»¸ö¿É¶ÀÁ¢Î¬»¤£¬¶ÀÁ¢À©½¨µÄ½á¹¹¡£
ËÄ¡¢·Ö½âʽµÄ´æ´¢

ÔÚ¹ýÈ¥µÄHadoop¼ÆËã½á¹¹ÖУ¬Ìá¸ßÐÔÄܵķ½·¨ÊÇdata locality¡£Èç¹ûÎÒµÄÊý¾ÝÔÚһ̨»úÆ÷ÉÏ£¬ÎÒ¾¡Á¿ÓÃËã·¨°ÑÎҵļÆË㵥λ·ÅÔÚÊý¾Ýµ¥Î»Í¬Ñùһ̨»úÆ÷ÉÏ£¬ÕâÑùÀ´¼õÉÙÍøÂç´«ÊäºÍÔö¼Óperformance¡£ÔÚ·Ö½âʽµÄ¼ÆËãÖУ¬ÓÉÓÚÍøÂçµÄ¾Þ´óµÄÈÝÁ¿£¬ÎÒÃÇ¿ÉÒÔ×öµ½ÔËËãÔÚÒ»¸ö¼¯Èº£¬¶ø´æ´¢ÔÚÁíÍâÒ»¸ö¼¯Èº¡£
ÁíÍâ±ÈÈç»úÆ÷ÉèÖõÄÎÊÌ⣬ÔÚHadoopµÄCluster ÀïÃæ£¬Èç¹ûһ̨»úÆ÷ÉèÖÃÊÇ40¸öcpu¡¢128GµÄmemory£¬ÕâÊÇÒ»¸ö¹Ì¶¨µÄ±ÈÀý¡£Èç¹ûÏëµ¥¶ÀÔö¼ÓÔËËãµÄÈÝÁ¿»òÕß´æ´¢µÄÈÝÁ¿¾Í·Ç³£À§ÄÑ¡£
´«Í³µÄ¼ÆËã´æ´¢¹²´æµÄ·½·¨¶ÔÓÚÓ²Å̵Ŀɿ¿ÐÔÒªÇó½Ï¸ß£¬Ó²ÅÌËð»µÂʶÔÓÚ¼ÆËã¿É¿¿ÐÔÓÐÖ±½ÓµÄ¹ØÏµ¡£¶ø·Ö½âʽ¼ÆËãÖÐÍøÂçµÄ´ø¿íºÍÑÓ³Ù¶¼ÍêÈ«³¬¹ýÁËlocal disk£»ËùÒÔÍøÂç²»ÔÙÊÇÒ»¸öÆ¿¾±£¬¶øÇÒ·ÖÀëʽ´æ´¢¿ÉÒÔ¶Ô¸öÌåÓ²ÅÌËð»µÓм«Ç¿µÄµÖ¿¹Á¦¡£
Î塢ʹÓÃÎÂÊý¾Ý´æ´¢(Warm Storage)µÄspark
FacebookÄÚ²¿ÓÃ×Ô¼º¿ª·¢µÄWarm storage¡£Warm Storage ÊÇÒ»¸ö·Ö²¼Ê½Êý¾Ý´æ´¢ÏµÍ³¡£ÎÒÃÇÔÚ²»ÐèÒª¿¼ÂǼÆËãÅäÖõÄÇé¿öÏ¿ÉÒÔרÃŶÔWarm Storage½øÐÐÒ»¸öÓ²¼þÅäÖá£ÔÚHive ºÍsparkÕâÑùµÄ¼ÆËãÆ½Ì¨ÀstorageµÄ×î´óÆ¿¾±ÊÇiops£¨IO per second£©¡£
ÔÚ¼ÆËãµÄʱºò£¬Èç¹ûÿһ¸öIOÊý¾ÝÌØ±ðСµÄ»°£¬Õâ¸öIOps¾Í»á³ÉΪһ¸ö´óÎÊÌâ¡£ÔÚlocal disk high io queue Çé¿öÏ£¬p99 µÄIOÑÓ³Ù¿ÉÒԸߴXÃëÖÓµÄʱ¼ä¡£Warm Storage¶Ô´Ë×öÁ˺ܶàµÄÓÅ»¯£¬Ëü¶ÔÓÚlarge io size£¬small io size×öÁËÕë¶ÔÐÔµÄÓÅ»¯£¬¶øÇÒÕûÌå¿É¿¿ÐÔ¶ÔÓÚ¸ö±ðÓ²ÅÌË𻵵ĵֿ¹Á¦¼«Ç¿¡£
Ç°Ãæ½²ÁË·Ö½âÊ½ÍøÂçºÍ´æ´¢ÎªÏÂÃæµÄÒª½²µÄ·Ö½âʽµÄSpark´òÁËÒ»¸ö»ù´¡

ÔÚÕâÀïÎÒÖ»¾ÙÒ»¸öSparkϵͳÖеÄÒ»¸öÀý×Ó¡£Spark¼ÆËãÖÐÔÚmapºÍreduceÖ®¼äÓÐÒ»¸ö ShuffleµÄ²½Öè¡£µ±map stageÍê³ÉµÄʱºò£¬Öм䲽ÖèÊý¾Ý´æ´¢ÔÚµ±µØ»úÆ÷µÄÓ²ÅÌÉϵȴýstage2µÄ»úÆ÷ǰÀ´¶ÁÈ¡£¬Èç¹ûÕâʱµ±µØÓ²ÅÌ»µµô£¬Õâ¸öµ¥ÔªµÄ¼ÆËã¾Í±ØÐë»Øµ½Stage1£¬½Ð×öretry¡£
Õâ¸ö²½ÖèÀïÒ»¸öÓ²ÅÌË𻵿ÉÒÔÖ±½ÓÓ°Ïìµ½SparkµÄÎȶ¨ÐÔºÍÖ´ÐÐËÙ¶È¡£¶øÇÒÔÚjobÔ½´óµÄʱºò£¨±ÈÈçÎÒÃǵÄjob¾³£ÊÇÒÔÄêCPUʱ¼ä¼ÆËãµÄ£©£¬Æäretry»úÂʾͻáÔ½´óµÄ£»ÄÄÅÂÊÇÓ²Å̵ÄËð»µÂÊÊÇ1%»òÕß0.5%£¬Õâ¸öretry»úÂʶ¼»á·Ç³£´ó£¬µ½mapper»òreducerÓм¸Íò¸öµÄʱºò»ù±¾ÉÏSpark¾Í²»ÄÜÓÃÁË¡£
SparkÒÔǰÊǺÍHDFS¹²´æÔÚÒ»¸ö¼ÆË㼯ȺÉϵġ£HDFSÅܵÄÊÇÊý¾ÝµÄ´æ´¢£¬SparkÅܵÄÊÇÔËËã¡£Õâ¸öÏë·¨ºÜºÃ£¬´æ´¢ÊÇÓÃËüµÄÓ²ÅÌ£¬ÔËËãÊÇÓÃËüµÄCPUºÍmemory¡£µ«ÊÇ£¬Êµ¼ÊÉϲ¢·ÇÈç´Ë£ºÔÚÎÒÃÇʹÓõĹý³Ìµ±Öз¢ÏÖSparkºÍHDFSÖ®¼äÏ໥¾ºÕùIOµÄ×ÊÔ´£¬¾³£SparkµÄperformanceÊܵ½HDFSµÄÓ°Ïì¡£
Ó²¼þÉèÖÃÒ²Êܵ½ÏÞÖÆ£¬±ÈÈ磺40¸öCPUºÍ128GµÄmemory£¬Ã¿Ò»¸ömapperµÄmemory size ·Ç³£Ð¡µÄ¡£Èç¹û˵ÔËËãÊäÈëµÄÊý¾Ý±Èmemory size¸ü´ó£¬¾Í»áspill£¬Ò²¾ÍÊDz¿·ÖÊý¾ÝÓÉÄÚ´æÔÝʱдµ½Ó²ÅÌÉÏ¡£spill¶ÔÓÚperformanceÓм«´óµÄÓ°Ïì¡£
×î½üÎÒÃDzÉÓÃÁËSpark with Warm StorageµÄ¼Ü¹¹ ÒòΪÓÐÁËÍøÂçµÄ»ù´¡ÎÒÃÇ¿ÉÒÔ·Ö¿ªÀ´scale¼ÆËãµ¥Ôª¡£¼ÆËãµ¥Ôª»úÆ÷ÓøßÅäÖõÄmemoryºÍCPU£¬µ«ÊÇÖ»ÓÐÒ»¸ölocaldisk¡£¼ÆË㵥Ԫͨ¹ýÍøÂç¶ÁдÊý¾Ýµ½warm storage ¼¯Èº¡£ÒªÀ©Õ¹¼ÆËãÈÝÁ¿Ò²»á±äµÃ·Ç³£ÈÝÒס£
ÒÔǰÈç¹ûÎÒÃÇÏëҪά»¤Ò»¸öSparkµÄ»úÆ÷£¬ÐèÒªµÈ´ýHDFSÅÅÁ÷¡£¾ÍÊÇ˵£¬ÄãÏëÒª°Ñһ̨»úÆ÷ÒÆ³öÀ´£¬±ØÐëÈÃËüµÄÊý¾ÝÒÆµ½ÁíÍâһ̨»úÆ÷ÉϲſÉÒÔ½«Ëüϼܡ£µ«ÊÇ£¬Í¨¹ýSpark with Warm Storage£¬ÎÒÃǾͲ»ÔÙÐèÒª¿¼ÂÇËüµÄÅÅÁ÷¡£
¸ÄÓÃSpark with Warm StorageÒÔºó£¬Æä»ù±¾ÔËËãËÙ¶ÈÓ봫ͳ·½·¨Ï൱»ò¸ü¿ì£¬µ«¿É¿¿ÐÔÏà¶ÔÓÚlocal diskÌá¸ßÁË4±¶¡£
·Ö½âʽµÄ·½·¨¶ÔÓÚ¼ÆËãµÄScalabilityÓоö¶¨ÐÔµÄ×÷Ó㬶øÇÒ²»½ö½öÊÇ˵¶ÔÒ»¸öfeature×öʲô¸Ä±ä£¬¶øÊǶÔÕû¸öϵͳ×ö·Ç³£¸ù±¾µÄ¸Ä±ä¡£
Áù¡¢×ܽá
ÔÚ¼«´ó¹æÄ£µÄ»·¾³Ï£¬·Ö½âʽÀíÄîÕæÕý°ïÎÒÃǽâ¾öÁËScalabilityµÄÎÊÌâ¡£µ«ÊDz¢²»ÊÇÿһ¸ö³¡¾°¶¼Êʺϡ£ÔÚÏà¶ÔСµÄScaleÀ´«Í³µÄ¼¯³Éʽ·½·¨»¹ÊÇÊÊÓõġ£ |