²ÉÓ÷ֲ¼Ê½ÏµÍ³¼Ü¹¹ÊÇÓÉÓÚÒµÎñÐèÇó¾ö¶¨µÄ£¬ÈôϵͳҪÇó¾ß±¸ÈçÏÂÌØÐÔ£¬±ã¿É¿¼ÂDzÉÓ÷ֲ¼Ê½¼Ü¹¹À´ÊµÏÖ£º
1.Êý¾Ý´æ´¢µÄ·ÖÇøÈÝ´í£¬ÈßÓà
2.Ó¦ÓõĴó·ÃÎÊ¡¢¸ßÐÔÄÜÒªÇó
3.Ó¦Óõĸ߿ÉÓÃÒªÇ󣬹ÊÕÏ×ªÒÆ
·Ö²¼Ê½ÏµÍ³×ñѼ¸¸ö»ù±¾ÔÔò
1.CAPÔÀí
CAP Theorem£¬CAPÔÀíÖУ¬ÓÐÈý¸öÒªËØ£º
1.Ò»ÖÂÐÔ(Consistency)
2.¿ÉÓÃÐÔ(Availability)
3.·ÖÇøÈÝÈÌÐÔ(Partition tolerance)
CAPÔÀíÖ¸µÄÊÇ£¬ÔÚ·Ö²¼Ê½ÏµÍ³ÖÐÕâÈý¸öÒªËØ×î¶àÖ»ÄÜͬʱʵÏÖÁ½µã£¬²»¿ÉÄÜÈýÕß¼æ¹Ë¡£Òò´ËÔÚ½øÐзֲ¼Ê½¼Ü¹¹Éè¼ÆÊ±£¬±ØÐë×ö³öÈ¡Éá¡£¶ø¶ÔÓÚ·Ö²¼Ê½Êý¾Ýϵͳ£¬·ÖÇøÈÝÈÌÐÔÊÇ»ù±¾ÒªÇ󣬷ñÔò¾ÍʧȥÁ˼ÛÖµ¡£Òò´ËÉè¼Æ·Ö²¼Ê½Êý¾Ýϵͳ£¬¾ÍÊÇÔÚÒ»ÖÂÐԺͿÉÓÃÐÔÖ®¼äȡһ¸öƽºâ¡£¶ÔÓÚ´ó¶àÊýwebÓ¦Óã¬Æäʵ²¢²»ÐèҪǿһÖÂÐÔ£¬Òò´ËÎþÉüÒ»ÖÂÐÔ¶ø»»È¡¸ß¿ÉÓÃÐÔ£¬ÊÇĿǰ¶àÊý·Ö²¼Ê½Êý¾Ý¿â²úÆ·µÄ·½Ïò¡£
´Ó¿Í»§¶Ë½Ç¶È£¬¶à½ø³Ì²¢·¢·ÃÎÊʱ£¬¸üйýµÄÊý¾ÝÔÚ²»Í¬½ø³ÌÈçºÎ»ñÈ¡µÄ²»Í¬²ßÂÔ£¬¾ö¶¨Á˲»Í¬µÄÒ»ÖÂÐÔ¡£¶ÔÓÚ¹ØÏµÐÍÊý¾Ý¿â£¬ÒªÇó¸üйýµÄÊý¾ÝÄܱ»ºóÐøµÄ·ÃÎʶ¼ÄÜ¿´µ½£¬ÕâÊÇǿһÖÂÐÔ¡£Èç¹ûÄÜÈÝÈ̺óÐøµÄ²¿·Ö»òÕßÈ«²¿·ÃÎʲ»µ½£¬ÔòÊÇÈõÒ»ÖÂÐÔ¡£Èç¹û¾¹ýÒ»¶Îʱ¼äºóÒªÇóÄÜ·ÃÎʵ½¸üкóµÄÊý¾Ý£¬ÔòÊÇ×îÖÕÒ»ÖÂÐÔ¡£
µ«webÓ¦ÓÃÒ²ÓÐÀýÍ⣬±ÈÈçÖ§¸¶±¦ÏµÍ³£¬¾ÍÒªÇóÊý¾Ý£¨ÒøÐÐÕË»§£©µÄǿһÖÂÐÔ£¬¶øÇÒÃæ¶Ô´óÁ¿ÌÔ±¦Óû§£¬¿ÉÓÃÐÔÒªÇóºÜ¸ß£¬Òò´ËÖ»ÄÜÎþÉüÊý¾ÝµÄ·ÖÇøÈßÓà¡£ÕâÒ»µãÒ²ÔøÔÚºÍÖ§¸¶±¦¹¤³Ìʦ½»Á÷ʱ£¬µÃµ½ÑéÖ¤¡£
2.C10KÎÊÌâ
·Ö²¼Ê½ÏµÍ³ÁíÒ»¸öÀíÂÛÊÇC10KÎÊÌ⣬¼´ÏµÍ³µÄ²¢·¢Óû§Ôö¼Ó1Íò£¨customer
ten thousand£¬¹ýȥһ̨·þÎñÆ÷³ÐÔØ¼ÙÉèΪ1ÍòÓû§£¬ÏÖÔÚÆ½¾ù3¡«5Íò£©£¬ÊÇ·ñÒâζ×ÅÔö¼Óһ̨»úÆ÷¾ÍÄܽâ¾öÎÊÌ⣿´ð°¸Í¨³£ÊÇ·ñ¶¨£¬ÒòΪÕâÉæ¼°µ½ÏµÍ³µÄÓ¦Óüܹ¹ÎÊÌâ----´®ÐÐϵͳºÍ²¢ÐÐϵͳµÄ¼Ü¹¹ºÍÐÔÄÜÌáÉýµÄ¹ØÏµ£º
´®ÐÐϵͳһ°ãÉ豸Խ¶à£¬ÐÔÄܳÉÒ»ÌõÏòÏÂÍäÇúµÄÇúÏߣ¬×î²îÇé¿ö£¬¿ÉÄÜÐÔÄܲ»Ôö·´½µ£»¶ø²¢Ðзֲ¼Ê½ÏµÍ³É豸Խ¶à£¬ÐÔÄÜÊÇÕý±ÈÀýÏßÐÔÔö³¤µÄÖ±Ïß

3.´®ÐÐϵͳºÍ²¢ÐÐϵͳµÄ¿É¿¿ÐÔÎÊÌâ
Ò»¸ö´óϵͳһ°ã¶¼Óг¬¹ý 30 ¸ö»·½Ú£¨´®ÐУ©£ºÈç¹ûÿ¸ö»·½Ú¶¼×öµ½ 99%
µÄ׼ȷÂÊ£¬×îÖÕϵͳµÄ׼ȷÂÊÊÇ 74%; Èç¹ûÿ¸ö»·½Ú¶¼×öµ½98%µÄ׼ȷÂÊ£¬×îÖÕϵͳµÄ׼ȷÂÊ 54%¡£Ò»¸ö
74% µÄϵͳÊÇ¿ÉÓõģ¨ÓÐÉÌÒµ¼ÛÖµµÄ£©£¬Ò»¸ö 54% µÄϵͳ½ö±ÈËæ»úÉÔºÃÒ»µã£¬²»¿ÉÓá£Õâ¾ÍÊÇ×ö´óϵͳµÄ÷ÈÁ¦ºÍÌôÕ½£¡¶øÒÔÉÏÃèÊöÖ»ÊǸ÷Ä£¿é´®ÐÐϵͳËùÓöµ½µÄÎÊÌâ¡£
Èç¹ûÊDz¢ÐÐϵͳ£¬×¼È·ÂÊ=1-(1-A)^B £¬ÆäÖÐAÊǵ¥¸öÄ£¿é׼ȷÂÊ£¬BÊDz¢ÐÐÄ£¿é¸öÊý
ÈçϵͳÖÐÿ¸öÄ£¿éµÄ׼ȷÂÊÊÇ70%£¬ÄÇô3¸öÄ£¿é²¢ÐУ¬ÕûÌå׼ȷÂÊ=1-0.3^3=97.3%,Èç¹ûÊÇ4¸ö²¢ÐУ¬×¼È·ÂÊ=1-0.3^4=99.19%,ÎÒÔÚÏëÕâ¾ÍÊǸºÔؾùºâ¿¿Æ×µÄÊýѧÔÀí
5¸ö9»ò6¸ö9µÄQoSÒ»¶¨ÊÇÖ¸Êý˼άµÄ½á¹û£¬ÏßÐÔ˼άµÈÓÚËÍËÀ
¶ø¶Ôϵͳµ¥Ò»Ä£¿éÓÅ»¯£¬×¼È·ÐԺͿÉÓÃÐÔÌáÉýÒ»¸ö°Ù·Öµã£¬Ô½½Ó½ü100%£¬ÄѶÈÔ½´ó£¬Í¶Èë³É±¾Ô½²»¿É¿Ø£¨ÏµÍ³ìØÓÀ²»ÎªÁ㣩
Òò´Ë¿É¿¿ÐÔϵͳ±ØÈ»Ñ¡Ôñ²¢Ðзֲ¼Ê½×÷Ϊ¼Ü¹¹µÄ»ù±¾·½·¨¡£
´ÓÊý¾ÝµÄ´æ´¢½Ç¶È£¬¶à·ÝÈßÓàÒ²Êǿɿ¿ÐÔ±£ÕϵÄÒ»¸ö·½·¨¡£·Ö²¼Ê½´æ´¢µÄÈßÓ౸·Ý³£¹æÊÇ3·Ý£¨aws¾ÍÕâô¸ÉµÄ£©£¬¹Å°£¼°µÄÂÞÈûËþrosettaʯ±®ÓùŰ£¼°ÏóÐÎÎÄ×Ö¡¢°£¼°Æ´ÒôºÍ¹ÅÏ£À°ÎÄÈýÖÖÎÄ×ּǼһ¶ÎÀúÊ·£¬¾ÍËãÏóÐÎÎÄ×ÖȱÁËÒ»²¿·Ö£¬Ã»ÈËÄÜ¿´¶®£¬Ò²ÄÜÆÆÒ벹ȫ£¬Õâ´ó¸ÅÒ²ÊÇraid5µÄ˼ÏëÆðÔ´°É

·Ö²¼Ê½ÏµÍ³¼Ü¹¹µÄʵ¼ù
1.·Ö²¼Ê½´æ´¢¼Ü¹¹
·Ö²¼Ê½´æ´¢¼Ü¹¹ÏÖ½×¶ÎÓÐ3ÖÖģʽ
1.1Ò»ÖÖÊÇÎïÀí´æ´¢²ÉÓü¯ÖÐʽ£¬´æ´¢½Úµã²ÉÓöàʵÀýµÄ·½Ê½£¬ÈçNFS¹ÒÔØSAN¡¢NASµÈµÈ

1.2µÚ¶þÖÖÊÇ´øÓÐÖÐÑë¿ØÖÆÆ÷µÄ·Ö²¼Ê½´æ´¢£¬Èçluster¡¢moosefs¡¢googlefsµÈµÈ£¬Ò»°ãÌØÕ÷ÊǾ߱¸2¸ö½ÇÉ«metadata
serverºÍstorage node£¬½«ÎļþµÄÔªÊý¾Ý£¨ÃèÊöÊý¾ÝµÄÊý¾Ý£¬ÈçÎļþλÖᢴóСµÈµÈ£©ºÍÊý¾Ý¿éÎļþ·Ö¿ª´æ´¢£¬ÆäÖÐmetadata
server³ý±£´æÎļþµÄÔªÊý¾ÝÍ⣬»¹Î¬»¤´æ´¢½ÚµãµÄip¡¢×´Ì¬µÈÐÅÏ¢
lusterµÄµäÐͼܹ¹
MDS--meatadata server
MDT--metadata target
OSS--obj storage server
OST--obj starage target
ÆäÖÐMDTºÍOSTÊÇ¿ÉÒÔ¹ÒÔÚNASµÈÖÐÑë´æ´¢Éϵģ»¿É¼û£¬luster½è¼øÁËÉÏÃæÖÐÑë´æ´¢µÄģʽ£¬ÎÞÂÛÔªÊý¾Ý·þÎñ»¹Êǽڵã·þÎñ¶¼½«·þÎñʵÀýºÍ´æ´¢·ÖÀ룬µ«½ø»¯ÁËÒ»²½£¬½«ÔªÊý¾ÝºÍÊý¾Ý¿é·ÖÀë
lusterϵͳºÜºÃ½â¾öÁËÊý¾Ý·Ö²¼Ê½´æ´¢£¬ÔÚ³¬¼¶¼ÆËãÁìÓòLustreÓ¦Óù㷺£¬ÈçÃÀ¹úLLNL¹ú¼ÒʵÑéÊÒ¼ÆËã»úϵͳ¡¢ÎÒ¹úµÄÌìºÓ³¬¼¶¼ÆËã»úϵͳ¾ù²ÉÓÃLustre´î½¨·Ö²¼Ê½´æ´¢ÏµÍ³¡£LustreÔÚÈ«ÇòÅÅÃûǰ30¸ö³¬¼¶¼ÆËã»úϵͳÖÐÓÐ15¸öÔÚʹÓá£
µ«ÓÐÒ»¸öÎÊÌ⣬¾ÍÊÇmetadata serverµÄSPoF£¨single point of failure£©ÎÊÌ⣬¼´µ¥µã¹ÊÕÏ£»Ò»µ©metadata
server¹ÒÁË£¬Õû¸ö¼¯ÈºÒ²¾Í¹ÒÁË¡£Êµ¼ÊÓ¦ÓÃÖУ¬ÊÇÓнâ¾ö·½°¸µÄ£¬ÈçdellµÄ¹ÙÍøÓиöpdf£¬¾ÍÊDzÉÓÃheart
beatºÍdrbdÍøÂçraidµÄ·½Ê½£¬Æô¶¯2¸öʵÀý£¬ÔÙÈçºÍkeepalivedÒ»Æð×é³É¹ÊÕÏ×ªÒÆµÄ·½°¸µÈµÈ£¬¿ÉÒÔ×Ô¼ºÊÔÊÔ

ÔÙÀ´¿´moosefs¼Ü¹¹
moosefs¼Ü¹¹ºÍlusterºÜÏàËÆ£¬µ«½ø»¯ÁËÒ»²½£¬mater£¨Ò²¾ÍÊÇmetadata
server£©¿ÉÒÔÓдӻú±¸·ÝÁË£¬¶øÇÒ¿ÉÒÔ¶à¸ö
¶øÇÒ·þÎñʵÀýºÍ´æ´¢·ÅÔÚÒ»Æð£¬Ã»ÓÐÏñluster£¬×Ô´Ë·þÎñºÍÊý¾Ý²»Àë²»ÆúÁË£»ÆäʵlusterÒ²¿ÉÒÔ¼ò»¯³É²»Àë²»Æúģʽ£¬moosefsÒ²¿ÉÒÔѧËû¸ã¸öºó¶Ë´æ´¢£¬µ«Ëæ×ÅÔÆ¼ÆËã¡¢×·ÇóµÍ³É±¾µÄÇ÷ÊÆ£¬²ÉÓÃSANÕâÑù´æ´¢É豸¾ÍÌ«¹óÁË

1.3µÚÈýÖÖ·Ö²¼Ê½´æ´¢ÊÇÈ¥ÖÐÐÄ»¯¡¢È«¶Ô³ÆµÄ¼Ü¹¹£¨non-center or
symmetric£©
ÆäÉè¼ÆË¼ÏëÊDzÉÓÃÒ»ÖÂÐÔ¹þÏ£consistent hashËã·¨£¨DHTµÄÒ»ÖÖʵÏÖ£¬¹ØÓÚÒ»ÖÂÐÔhash¾ßÌå²Î¿¼ºóÃæµÄÁ´½Ó£©À´¶¨Î»ÎļþÔÚ´æ´¢½ÚµãÖеÄλÖ㬴ӶøÈ¡ÏûÁËmetadata
serverµÄ½ÇÉ«

Õû¸öϵͳֻÓÐstorage nodeÒ»¸ö½ÇÉ«£¬²»Çø·ÖÔªÊý¾ÝºÍÊý¾Ý¿é£»
µäÐÍϵͳÈçsheepdog£¬µ«sheepdogÊÇΪÂú×ãkvm¾µÏñºÍÀàEBS¿é´æ´¢¶øÉè¼ÆµÄ£¬²»Êdz£¹æµÄ·Ö²¼Ê½Îļþϵͳ£¬¼Ü¹¹ÈçÏÂ

ΪÁËά»¤´æ´¢½ÚµãµÄÐÅÏ¢£¬Ò»°ã²ÉÓÃP2P¼¼ÊõµÄtotem single ringËã·¨£¨corosyncÊÇÒ»ÖÖʵÏÖ£©À´Î¬»¤ºÍ¸üÐÂnode·ÓÉÐÅÏ¢
¶Ô³Æ¼Ü¹¹ÓÐÒ»¸öÎÊÌ⣬²ÉÓÃtotem single ringËã·¨µÄ´æ´¢½ÚµãÊýÁ¿ÓÐÏÞ£¬ÒòΪnodeÊýÁ¿³¬¹ý1000£¬¼¯ÈºÄÚµÄͨÐŷ籩¾Í»á²úÉú£¨´Ë´¦¸üÕý£¬Ó¦¸ÃÊÇ»·Ì«´ó£¬ÁîÅÆ´«µÝЧÂÊϽµ£¬²»»á²úÉúͨÐŷ籩£©£¬Ð§ÂÊϽµ£¬sheepdogÌá³öÁËÒ»¸ö½â¾ö·½°¸£¬¾ÍÊÇÔÚÒ»ÖÂÐÔhash»·ÉÏ×öǶÌ×´¦Àí£¬Èçͼ

1.4°ë¶Ô³Æ½á¹¹
Æäʵ½éÓÚ1.2metadata serverÖÐÑë¿ØÖÆºÍ1.3È«¶Ô³ÆµÄ¼Ü¹¹Ö®¼ä»¹ÓÐÒ»ÖÖ£¬¾ÍÊǰÑmetadataÒ²×ö³É¶Ô³Æ½á¹¹£¬ÎÒÃÇ¿ÉÒԳưë¶Ô³Æ½á¹¹£¬µäÐÍÓ¦ÓÃÈçfastdfs£¬ÌÔ±¦Ò»´óÅ£fishmanдµÄ£¬Ö÷ÒªÓÃ×÷ͼƬ´æ´¢£¬¿ÉÒÔʵÏÖÅÅÖØ´æ´¢
¿´Í¼£¬tracker cluster¾ÍÊÇmetadata serverµÄ½ÇÉ«£¬ÊµÏÖÁ˶ԳƼܹ¹Éè¼Æ
¹úÄÚ¼¸¸ö´óµÄÍøÕ¾¶¼Ê¹ÓÃÁËfastdfs£¬ÔÚʵ¼ÊʹÓÃÖУ¬·¢ÏÖstorage
serverÖ®¼äͬ²½Êý¾Ý½ÏÂý£¬Ò»Ö±Ã»×ÐϸÑо¿

2.·Ö²¼Ê½Êý¾Ý¿â
·Ö²¼Ê½Êý¾Ý¿âÒ»°ã¶¼»ùÓÚ·Ö²¼Ê½ÎļþϵͳʵÏÖÊý¾ÝµÄ·ÖƬsharding£¬Ã¿ÖÐÊý¾Ý¿â¶¼ÓÐ×Ô¼ºµÄÓ¦ÓÃÌØÐÔ£¬¾Í²»×ö½éÉÜ£¬Áгö¼¸¸öµäÐ͵ÄÓ¦Ó㬹©²Î¿¼
GoogleµÄbig table£¬ÊµÏÖÊý¾ÝµÄ×·¼Ó´æ´¢append£¬Ë³ÐòдÈë¿ìËÙ£¬²»ÊʺÏËæ»ú¶ÁµÄ³¡¾°
hadoopµÄHBase
mongodb
hypertable 2010ÄêÒÔǰ£¬°Ù¶ÈÔÚÓ㬽ñÄêinfoqµÄÖйúqcon£¬°Ù¶ÈµÄÑî¶°Ò²½²Á˰ٶÈÓÃhypertableµÄѪÀáÊ·
3.·Ö²¼Ê½Ó¦Óüܹ¹
·Ö²¼Ê½Ó¦Óüܹ¹Éæ¼°¾ßÌåÓ¦Óó¡¾°£¬Éè¼ÆÉϳý¿¼ÂÇÉÏÃæµÄCAPºÍC10KµÈµÈ¾µä·Ö²¼Ê½ÀíÂÛ£¬»¹Ó¦¸ù¾ÝÒµÎñ½øÐÐȨºâ¡£
3.1ÔÚ×öÍêÐèÇóºÍÄ£¿éÉè¼Æºó£¬Òª¶Ô¸÷Ä£¿é½øÐнâźDecoupling
´«Í³µÄÆóÒµÓ¦ÓÃÉè¼ÆÒ»°ãÊÇÒ»Ìõ²Ù×÷´ÓÍ·Åܵ½Î²£¨´®ÐÐϵͳ£©£¬ÄÃÊÓÆµÍøÕ¾µÄÁ÷³Ì¾àÀ룬´«Í³Ó¦ÓÃÉè¼ÆÊÇÏÈÉÏ´«ÊÇÊÓÆµ£¬È»ºó´æ´¢£¬±àÂ룬×îºó·¢²¼Ò»ÌõÁú
ÈçÏÂͼ

3.2ÔÚ½øÐзֲ¼Ê½Éè¼ÆÊ±£¬ÏȽ«¸÷Ä£¿é½âź£¬Í¨¹ýÒì²½ÏûϢ֪ͨµÄ·½Ê½½«¸÷Ä£¿éÁ´½Ó£¬ÈçÏÂͼ

3.3×îºó£¬Òª¿¼ÂÇÕâ¸öÓ¦ÓõÄѹÁ¦³ÐÔØµãÔÚÄÄ£¬¸ù¾ÝÓû§¹æÄ£¹ÀËã¸÷Ä£¿éµÄ²¢ÐÐÊýÁ¿£¨Èç±¾ÀýÖеÄencodeѹÁ¦´ó£¬¾ÍÔö¼ÓencodeÄ£¿éµÄ²¢ÐÐϵͳÊýÁ¿£©£¬ÈçÏÂͼ

ÒÔÉÏÊÇ·Ö²¼Ê½ÏµÍ³¹¹½¨µÄ»ù±¾ÔÔòºÍʵ¼ù²½Ö裬ÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÈÔÓкܶàϸ½ÚÒª¿¼ÂÇ¡£µ«ÓÐÒ»µãÒªÔÙÇ¿µ÷£¬¾ÍÊÇÒª¸ù¾ÝÒµÎñÀ´Ñ¡Ôñ¸÷²ã¡¢¸÷Ä£¿éµÄ¼¼Êõ£¬×öºÃÒµÎñÊÊÓᢳɱ¾ºÍÄѶÈÖ®¼äµÄȨºâ¡£ |