Ò»¡¢ÏµÍ³¸ÅÊö
1¡¢Amazonƽ̨¸ÅÊö
Amazonƽ̨ÊÇÒ»¸öÓÉÊý°Ù·þÎñ×é³ÉµÄÃæÏò·þÎñµÄ¼Ü¹¹£¬Æä±ü³Ð¸ß¶ÈÈ¥ÖÐÐÄ»¯¡¢ËÉÉ¢ñîºÏ¡¢ÍêÈ«·Ö²¼Ê½µÄÔÔò£¬¾ßÌå¼Ü¹¹²Î¿¼ÏÂͼ1¡£

ͼ1 Amazonϵͳ¼Ü¹¹
ÔÚÕâÖÖ»·¾³ÖУ¬ÓÈÆäÐèÒªÒ»¸öʼÖÕ¿ÉÓõĴ洢ϵͳ£¬ÓÉ´Ë£¬Dynamoµ®ÉúÁË¡£
2¡¢Dynamo¸ÅÊö
DynamoÊÇAmazonÌṩµÄÒ»¿î¸ß¿ÉÓõķֲ¼Ê½Key-Value´æ´¢ÏµÍ³£¬ÆäÂú×ã¿ÉÉìËõÐÔ¡¢¿ÉÓÃÐÔ¡¢¿É¿¿ÐÔ¡£
CAPÔÀíÂú×㣺ͨ¹ýÒ»ÖÂÐÔ¹þÏ£Âú×ãP£¬Óø´ÖÆÂú×ãA£¬ÓöÔÏó°æ±¾ÓëÏòÁ¿Ê±ÖÓÂú×ãC¡£ÓÃÎþÉüCÀ´Âú×ã¸ß¿ÉÓõÄA£¬µ«ÊÇ×îÖÕ»áÒ»Ö¡£µ«ÊÇ£¬ÊÇÎþÉüCÂú×ãA£¬»¹ÊÇÎþÉüAÂú×ãC£¬¿ÉÒÔ¸ù¾ÝNWRÄ£ÐÍÀ´µ÷Å䣬ÒÔ´ïµ½ÊÕÒæ³É±¾Æ½ºâ¡£
DynamoÄÚ²¿ÓÐ3¸ö²ãÃæµÄ¸ÅÄ
Key-Value£ºKeyΨһ±êʶһ¸öÊý¾Ý¶ÔÏó£¬Value±êʶÊý¾Ý¶ÔÏóʵÌ壬ͨ¹ý¶ÔKeyÀ´Íê³É¶ÔÊý¾Ý¶ÔÏóµÄ¶Áд²Ù×÷¡£
½Úµãnode£º½ÚµãÊÇÖ¸Ò»¸öÎïÀíÖ÷»ú¡£ÔÚÿ¸ö½ÚµãÉÏ£¬»áÓÐ3¸ö±Ø±¸×é¼þ£ºÇëÇóе÷Æ÷£¨request
coordination£©¡¢³ÉÔ±Óëʧ°Ü¼ì²â¡¢±¾µØ³Ö¾ÃÒýÇæ£¨local persistence engine£©£¬ÕâЩ×é¼þ¶¼ÓÉJavaʵÏÖ¡£±¾µØ³Ö¾ÃÒýÇæÖ§³Ö²»Í¬µÄ´æ´¢ÒýÇæ£¬×îÖ÷ÒªµÄÒýÇæÊÇBerkeley
Database Transactional Data Store£¨´æ´¢Êý°ÙKµÄ¶ÔÏó¸üºÏÊÊ£©£¬ÆäËü»¹ÓÐBDB
Java Edtion¡¢MySQLÒÔ¼°Ò»ÖÂÐÔÄÚ´æCache¡£±¾µØ³Ö¾Ã»¯ÒýÇæ×é¼þÊÇÒ»¸ö¿É²å°ÎµÄ³Ö¾Ã»¯×é¼þ£¬Ó¦ÓóÌÐò¿ÉÒÔ¸ù¾ÝÐèҪѡÔñ×îºÏÊʵĴ洢ÒýÇæ£¬±ÈÈ磺Èç¹û´æ´¢¶ÔÏóµÄͨ³£ÎªÊýǧ×Ö½ÚÔò¿ÉÒÔÑ¡ÔñBDB£¬Èç¹ûÊǸü¶à³ß´çÔò¿ÉÒÔÑ¡ÔñMySQL¡£Éú²úÖУ¬Dynamoͨ³£Ê¹ÓÃBDBÊÂÎïÊý¾Ý´æ´¢¡£
ʵÀýinstance£º´ÓÓ¦ÓõĽǶÈÀ´¿´¾ÍÊÇÒ»¸ö·þÎñ£¬ÌṩIO¹¦ÄÜ¡£Ã¿¸öʵÀýÓÉÒ»×é½Úµã×é³É£¬ÕâЩ½Úµã¿ÉÄÜλÓÚ²»Í¬µÄIDC£¬ÕâÑùIDC³öÏÖÎÊÌâÒ²²»»áµ¼ÖÂÊý¾Ý¶ªÊ§£¬ÕâÑù»áÓиüºÃµÄÈÝÔֺͿɿ¿ÐÔ¡£
¶þ¡¢±³¾°Ìõ¼þ
1¡¢ÏµÍ³¼ÙÉèÓëÒªÇó
£¨1£©²éѯģÐÍ
»ùÓÚKey-ValueÄ£ÐÍ£¬¶ø²»ÊÇSQL¼´¹ØÏµÄ£ÐÍ¡£´æ´¢¶ÔÏó±È½ÏС£¬Í¨³£Ð¡ÓÚ1MB¡£
£¨2£©ACIDÊôÐÔ
´«Í³µÄ¹ØÏµÊý¾Ý¿âÖУ¬ÓÃACID£¨AÔ×ÓÐÔ¡¢CÒ»ÖÂÐÔ¡¢I¸ôÀëÐÔ¡¢D³Ö¾ÃÐÔ£©À´±£Ö¤ÊÂÎñ£¬ÔÚ±£Ö¤ACIDµÄǰÌáÏÂÍùÍùÓкܲîµÄ¿ÉÓÃÐÔ¡£DynamoÓÃÈõÒ»ÖÂÐÔCÀ´´ïµ½¸ß¿ÉÓ㬲»ÌṩÊý¾Ý¸ôÀëI£¬Ö»ÔÊÐíµ¥Key¸üС£
£¨3£©Ð§ÂÊ
ÔÚÁ®¼ÛµÄ»úÆ÷ÉÏÂú×ãSLA£¬Í¨¹ýÅäÖÃÀ´Âú×ãÑÓʱºÍÍÌÍÂÁ¿µÄÒªÇó£¬Òò´Ë£¬±ØÐëÔÚÐÔÄÜ¡¢³É±¾¡¢¿ÉÓÃÐԺͳ־ÃÐÔ±£Ö¤Ö®¼ä×öȨºâ¡£
£¨4£©ÆäËü¼ÙÉè
Dynamo½öÔÚAmazonÄÚ²¿Ê¹Óã¬Òò´Ë£¬ÈÏΪÆäʹÓû·¾³ÊÇ¿ÉÐÅÀµµÄ¡£
2¡¢·þÎñˮƽÐÒ飨SLA£©
Ëùν·þÎñˮƽÐÒéÊÇÖ¸¿Í»§¶ËºÍ·þÎñ¶ËÔÚij¼¸¸öÖ¸±êÉÏ´ï³ÉÒ»ÖµÄÒ»¸öÐÒ飬ͨ³£°üÀ¨¿Í»§¶ËÇëÇóAPIµÄËÙÂÊ¡¢·þÎñ¶ËµÄÔ¤ÆÚÑÓʱ£¬±ÈÈ磺ÔÚ¿Í»§¶ËÿÃë500¸öÇëÇó¸ºÔصĸ߷åʱ£¬99.9%µÄÏìӦʱ¼äΪ300ºÁÃë¡£
Ò»°ãÒµ½ç£¬¶ÔÕâÖÖÃæÏòÐÔÄܵÄSLA²ÉÓÃÆ½¾ùÊý£¨average£©¡¢ÖÐÖµ£¨median£©ºÍÔ¤ÆÚ±ä»¯£¨expected
variance£©¡£µ«ÊÇÕâЩָ±êÖ»ÄܶԴó¶àÊý¿Í»§¶ËÓÐÁ¼ºÃÌåÑ飬¶ø²»ÊÇËùÓС£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬Dynamo²ÉÓÃ99.9%°Ù·ÖλÀ´´úÌæÕâЩָ±ê¡£
3¡¢Éè¼Æ¿¼ÂÇ£¨¸´ÖÆÊý¾Ý£©
´«Í³µÄÊý¾Ý¸´ÖÆËã·¨£¬ÔÚ³öÏÖ¹ÊÕÏʱ£¬ÎªÁ˱£Ö¤Êý¾ÝÒ»ÖÂÐÔ±»ÆÈÎþÉüµô¿ÉÓÃÐÔ£¬¼´£ºÓëÆä²»ÄÜÈ·¶¨Êý¾ÝÊÇ·ñÕýÈ·£¬²»ÈçÈÃÊý¾ÝÒ»Ö±²»¿ÉÓÃÖ±µ½Êý¾Ý¾ø¶ÔÕýȷʱ¡£
µ«ÊÇ£¬Ò»¸ö¸ß¶ÈÁé»îµÄϵͳӦ¸ÃÄܹ»ÈÃÓû§ÖªµÀÔÚºÎÖÖÇé¿öÏÂÄܵ½´ïÄÄЩÊôÐÔ£¬Dynamo¾ÍÊÇÈç´Ë¡£
¶ÔÓÚ¹ÊÕÏÊdz£Ì¬µÄϵͳÀ´Ëµ£¬²ÉÓÃÀÖ¹Û¸´ÖƼ¼Êõ¿ÉÒÔÌṩϵͳµÄ¿ÉÓÃÐÔ£¬µ«´øÀ´µÄÎÊÌâÊÇÐèÒª¼ì²â²¢Ðµ÷½â¾ö³åÍ»£¬Ðµ÷½â¾ö³åÍ»µÄ¹ý³ÌÓÖ°üº¬Á½¸öÎÊÌ⣬¼´£ººÎʱе÷ºÍÓÉËе÷¡£DynamoµÄÉè¼ÆÊÇÊý¾Ý´æ´¢×îÖÕÒ»Ö£¬¼´ËùÓиüвÙ×÷×îÖÕµ½´ïËùÓи±±¾¡£
£¨1£©ºÎʱе÷
ÎÞÍâºõÁ½ÖÖÇé¿ö£ºÐ´»òÕß¶Áʱе÷³åÍ»¡£
´«Í³Êý¾Ý´æ´¢ÔÚдʱе÷³åÍ»£¬¼´Èç¹û¸ø¶¨Ê±¼äÄÚÊý¾Ý²»ÄÜ´ïµ½ËùÒªÇóµÄËùÓлò´ó¶àÊý¸±±¾Êý£¬ÔòдÈë¿ÉÄܻᱻ¾Ü¾ø¡£
AmazonÈÏΪ¾Ü¾ø¿Í»§µÄ¸üвÙ×÷»áµ¼ÖÂÔã¸âµÄÓû§ÌåÑ飬µäÐÍÓ¦ÓÃÊǹºÎï³µ·þÎñ£¬¼´Ê¹³öÏÖ¹ÊÕÏ£¬¿Í»§ÈÔÈ»¿ÉÒÔÏò¹ºÎï³µÌí¼Ó»òÕßɾ³ýÎïÆ·£¬»ùÓÚ´Ë£¬DynamoµÄÄ¿±ê¶¨Î»Îª¡°ÓÀÔ¶¿Éд¡±£¨always
writable£©¼´Êý¾Ý´æ´¢µÄ¡°Ð´¡±ÊǸ߿ÉÓõġ£Ò²¾ÍÊÇ˵DynamoΪÁËÈ·±£¡°Ð´¡±ÓÀÔ¶²»»á±»¾Ü¾ø£¬ÄÇôÊý¾Ý´æ´¢ÔÚ¶Áʱе÷³åÍ»¡£
£¨2£©ÓÉËе÷
ÎÞÍâºõÁ½ÖÖÇé¿ö£ºÓÉÊý¾Ý´æ´¢±¾Éí»ò¿Í»§¶ËÓ¦ÓóÌÐòÀ´Ðµ÷¡£
Èç¹ûÊÇÊý¾Ý´æ´¢±¾Éíе÷£¬ÔòÖ»ÄÜʹÓüòµ¥²ßÂÔÀ´Ðµ÷³åÍ»µÄ¸üвÙ×÷£¬±ÈÈ磺¡°×îºóÒ»´ÎдÈë»ñʤ¡±£¨last
write wins£©¡£
Èç¹ûÊǿͻ§¶ËÓ¦ÓóÌÐòе÷£¬ÔòÓ¦ÓóÌÐò¿ÉÒÔ¸ù¾ÝÒµÎñÐèÇóÀ´Ñ¡Ôñ×îÊʺÏе÷³åÍ»µÄ·½·¨¡£
DynamoÑ¡ÔñÁ˺óÕߣ¬µäÐÍÓ¦Óû¹ÊǹºÎï³µ·þÎñ£¬·µ»ØËùÓÐÊý¾Ý¶ÔÏó°æ±¾£¬×îºóÑ¡ÔñºÏ²¢Íê³åÍ»µÄ°æ±¾¡£
Èý¡¢¹Ø¼ü¼¼Êõ
Dynamo×÷ΪһÀà·Ö²¼Ê½ÏµÍ³µÄµäÐÍ´ú±í£¬ÆäÖÚ¶à¹Ø¼ü¼¼Êõ¸øÆä´øÀ´Ò»ÏµÁеÄÓÅÊÆ£¬¾ßÌå²Î¿´ÏÂ±í£º

±í1 DynamoʹÓõļ¼ÊõºÍÓÅÊÆ
1¡¢Êý¾Ý·ÖÇø
HashËã·¨£ºÊ¹ÓÃMD5¶ÔKey½øÐÐHashÒÔ²úÉúÒ»¸ö128λµÄ±êʾ·û£¬ÒÔ´ËÀ´È·¶¨KeyµÄ´æ´¢½Úµã¡£
ΪÁË´ïµ½ÔöÁ¿¿ÉÉìËõÐÔµÄÄ¿µØ£¬Dynamo²ÉÓÃÒ»ÖÂÐÔ¹þÏ£À´Íê³ÉÊý¾Ý·ÖÇø¡£ÔÚÒ»ÖÂÐÔ¹þÏ£ÖУ¬¹þÏ£º¯ÊýµÄÊä³ö·¶Î§ÎªÒ»¸öÔ²»·£¬Èçͼ2Ëùʾ£¬ÏµÍ³ÖÐÿ¸ö½ÚµãÓ³Éäµ½»·ÖÐij¸öλÖ㬶øKeyÒ²±»Hashµ½»·ÖÐij¸öλÖã¬Key´ÓÆä±»Ó³ÉäµÄλÖÿªÊ¼ÑØË³Ê±Õë·½ÏòÕÒµ½µÚÒ»¸öλÖÃ±ÈÆä´óµÄ½Úµã×÷ΪÆä´æ´¢½Úµã£¬»»¸ö½Ç¶È˵£¬¾ÍÊÇÿ¸öϵͳ½Úµã¸ºÔð´ÓÆäÓ³ÉäµÄλÖÃÆðµ½ÄæÊ±Õë·½ÏòµÄµÚÒ»¸öϵͳ½Úµã¼äµÄÇøÓò¡£
Ò»ÖÂÐÔ¹þÏ£×î´óµÄÓŵãÔÚÓÚ½ÚµãµÄÀ©ÈÝÓëËõÈÝ£¬Ö»Ó°ÏìÆäÖ±½ÓµÄÁھӽڵ㣬¶ø¶ÔÆäËü½ÚµãûÓÐÓ°Ïì¡£ÕâÑù¿´ËƺÜÍêÃÀÁË£¬µ«ÊÇÑÇÂíѷûÓÐÒò´Ë¶øÍ£Ö¹½Å±¾£¬ÕâÊÇÆäΰ´óÖ®´¦£¬Æäʵ»¹´æÔÚÁ½¸öÎÊÌ⣺½ÚµãÊý¾Ý·Ö²¼²»¾ùÔȺÍÎÞÊÓ½ÚµãÐÔÄܵÄÒìÖÊÐÔ¡£ÎªÁ˽â¾öÕâÁ½¸öÎÊÌ⣬Dynamo¶ÔÒ»ÖÂÐÔ¹þÏ£½øÐÐÁ˸Ľø¶øÒýÈëÁËÐéÄâ½Úµã£¬¼´Ã¿¸ö½Úµã´ÓÂß¼ÉÏÇзÖΪ¶à¸öÐéÄâ½Úµã£¬Ã¿¸öÐéÄâ½Úµã´ÓÂß¼ÉÏ¿´ÏñÒ»¸öÕæÊµ½Úµã£¬ÕâÑùÿ¸ö½Úµã¾Í±»·ÖÅäµ½»·É϶à¸öµã¶ø²»ÊÇÒ»¸öµ¥µã¡£
2¡¢Êý¾Ý¸´ÖÆ
ΪÁËʵÏָ߿ÉÓã¬Dynamo½«Ã¿¸öÊý¾Ý¸´ÖƵ½N̨Ö÷»úÉÏ£¬ÆäÖÐNÊÇÿ¸öʵÀý£¨per-instance£©µÄÅäÖòÎÊý£¬½¨ÒéֵΪ3¡£Ã¿¸öKey±»·ÖÅäµ½Ò»¸öе÷Æ÷£¨coordinator£©½Úµã£¬Ðµ÷Æ÷½Úµã¹ÜÀíÆä¸ºÔð·¶Î§Äڵĸ´ÖÆÊý¾ÝÏÆä³ýÁËÔÚ±¾µØ´æ´¢ÆäÔðÈη¶Î§ÄÚµÄÿ¸öKeyÍ⣬»¹¸´ÖÆÕâЩKeyµ½»·ÉÏ˳ʱÕë·½ÏòµÄN-1¸öºó¼Ì½Úµã¡£ÕâÑù£¬ÏµÍ³ÖÐÿ¸ö½Úµã¸ºÔð»·ÉÏ´ÓÆä×Ô¼ºÎ»ÖÿªÊ¼µ½µÚN¸öǰÇý½Úµã¼äµÄÒ»¶ÎÇøÓò¡£¾ßÌåÂß¼¼ûͼ2£¬Í¼ÖнڵãB³ýÁËÔÚ±¾µØ´æ´¢¼üKÍ⣬»¹ÔÚ½ÚµãCºÍD´¦¸´ÖƼüK£¬ÕâÑù½ÚµãD½«´æ´¢ÂäÔÚ·¶Î§(A,
B]¡¢(B, C]ºÍ(C, D]ÉϵÄËùÓмü£º

ͼ2 ÔÚDynamo»·ÉϵķÖÇøÓëKey¸´ÖÆ
¶ÔÓÚÒ»¸öÌØ¶¨µÄ¼ü¶¼ÓÐÒ»¸öÊ×Ñ¡½ÚµãÁÐ±í£¬ÓÉÓÚÐéÄâ½ÚµãµÄ´æÔÚ£¬ÎªÁ˽â¾ö½Úµã¹ÊÕϵÄÎÊÌ⣬¹¹½¨Ê×ÏȽڵãÁбíʱ»áÌø¹ý»·ÉÏijЩλÖã¬ÈÃÕâЩ½Úµã·Ö±ðλÓÚ²»Í¬µÄÎïÀí½ÚµãÉÏ£¬ÒÔ±£Ö¤¸ß¿ÉÓá£
ΪÁ˱£Ö¤¸´ÖÆÊ±Êý¾Ý¸±±¾µÄÒ»ÖÂÐÔ£¬Dynamo²ÉÓÃÀàËÆÓÚQuorumϵͳµÄÒ»ÖÂÐÔÐÒéʵÏÖ¡£ÕâÀïÉæ¼°µ½Èý¸ö¹Ø¼ü²ÎÊý(N,
R, W)£¬ÆäÖУ¬NÊÇÖ¸Êý¾Ý¶ÔÏó¸´ÖƵ½N̨Ö÷»ú£¬Ðµ÷Æ÷¸ºÔð½«Êý¾Ý¸´ÖƵ½N-1¸ö½ÚµãÉÏ£¬ÑÇÂíÑ·½¨ÒéNÅäÖÃΪ3£¬R´ú±íÒ»´Î³É¹¦µÄ¶ÁÈ¡²Ù×÷ÖÐ×îС²ÎÓë½ÚµãÊýÁ¿£¬W´ú±íÒ»´Î³É¹¦µÄд²Ù×÷ÖÐ×îС²ÎÓë½ÚµãÊýÁ¿¡£R+W>N£¬Ôò»á²úÉúÀàËÆÓÚQuorumµÄЧ¹û¡£¸ÃÄ£ÐÍÖУ¬¶Á£¨Ð´£©ÑÓ³ÙÓÉ×îÂýµÄR(W)¸´ÖƸ±±¾¾ö¶¨£¬ÎªÁ˵õ½±È½ÏСµÄÑÓ³Ù£¬RºÍWͨ³£ÅäÖÃΪСÓÚN¡£ÑÇÂíÑ·½¨Òé(N,
R, W)ÉèÖÃΪ(3, 2, 2)ÒÔ¼æ¹ËÐÔÄÜÓë¿ÉÓÃÐÔ¡£RºÍWÖ±½ÓÓ°ÏìÐÔÄÜ¡¢À©Õ¹ÐÔºÍÒ»ÖÂÐÔ£¬Èç¹ûWÉèÖÃΪ1£¬ÔòÒ»¸öʵÀýÖÐÖ»ÒªÓÐÒ»¸ö½Úµã¿ÉÓã¬Ò²²»Ó°Ïìд²Ù×÷£¬Èç¹ûRÉèÖÃΪ1£¬Ö»ÒªÓÐÒ»¸ö½Úµã¿ÉÓã¬Ò²²»»áÓ°Ïì¶ÁÇëÇó£¬RºÍWÖµ¹ýСÔòÓ°ÏìÒ»ÖÂÐÔ£¬¹ý´óÔò¿ÉÓÃÐÔ£¬Òò´Ë£¬ÐèÒªÔÚRºÍWÁ½¸öÖµÖ®¼äƽºâ£¬ÕâÒ²ÊÇDynamoµÄÒ»¸öÁÁµãÖ®Ò»¡£
3¡¢°æ±¾ºÏ²¢
ÓÉǰÎÄ¿ÉÖª£¬DynamoΪÁ˱£Ö¤¸ß¿ÉÓ㬶Ôÿ·ÝÊý¾Ý¶¼¸´ÖÆÁ˶à·Ý£¨½¨Òé3·Ý£©£¬ÔÚÊý¾ÝûÓб»Òì²½¸´ÖƵ½ËùÓи±±¾Ç°£¬Èç¹ûÓÐget²Ù×÷»áÈ¡µ½²»Ò»ÖµÄÊý¾Ý£¬µ«ÊÇDynamoÌṩ×îÖÕÒ»ÖÂÐÔ¡£ÔÚÑÇÂíѷƽ̨ÖУ¬¹ºÎï³µ¾ÍÊÇÕâÖÖÇé¿öµÄµäÐÍÓ¦Óã¬ÎªÁ˱£Ö¤¹ºÎï³µÓÀÔ¶¿ÉÓ㬶ÔÈκÎÒ»¸ö¸±±¾µÄÈκÎÒ»´Î¸ü¸Ä²Ù×÷µÄ½á¹û¶¼»áµ±×öÒ»¸öÊý¾Ý°æ±¾´æ´¢ÆðÀ´£¬ÕâÑùµ±Óû§getʱ¾Í»áÈ¡µ½¶à¸ö°æ±¾£¬ÕâÑùÒ²¾ÍÐèÒª×öÊý¾Ý°æ±¾ºÏ²¢ÁË¡£Dynamo½«ºÏ²¢¹¤×÷ÍÆ¸øÓ¦ÓóÌÐò£¬ÔÚÕâÀï¾ÍÊǹºÎï³µgetʱ´¦Àí¡£
DynamoÓÃÏòÁ¿Ê±ÖÓÀ´±êʶͬһÊý¾ÝÔÚ²»Í¬½ÚµãÉ϶à¸ö¸±±¾Ö®¼äµÄÒò¹û¹ØÏµ¡£ÏòÁ¿Ê±ÖÓʵ¼ÊÉϾÍÊÇÒ»¸öÁÐ±í£¬ÁбíµÄÿ¸ö½ÚµãÊÇÒ»¸ö(node,
counter)¶Ô£¬¼´(½Úµã£¬¼ÆÊýÆ÷)ÁÐ±í¡£Êý¾Ý°æ±¾Ö®¼äµÄ¹ØÏµÒªÃ´ÊÇÒò¹û¹ØÏµ£¬ÒªÃ´ÊÇÆ½ÐйØÏµ£¬¹ØÏµÅжÏÒÀÀµÓÚ¼ÆÊýÆ÷Öµ´óС£¬Èç¹ûµÚÒ»¸öʱÖÓ¶ÔÏóµÄ¼ÆÊýÆ÷СÓÚ»òµÈÓÚËùÓÐÆäËüʱÖÓ¶ÔÏóµÄ¼ÆÊýÆ÷ʱÔòÊÇÒò¹û¹ØÏµ£¬ÄÇôÒòÊǹûµÄ׿ÏÈ¿ÉÒÔÈÏΪÊǾɰæÊý¾Ý¶øÖ±½ÓºöÂÔ£¬·ñÔòÊÇÆ½ÐйØÏµ£¬ÄÇô¾ÍÈÏΪÊý¾Ý°æ±¾²úÉúÁ˳åÍ»£¬ÐèҪе÷²¢ºÏ²¢¡£
ÔÚDynamoÖУ¬µ±¿Í»§¶Ë¸üÐÂÒ»¸ö¶ÔÏóʱ£¬±ØÐëÖ¸¶¨¸üÐÂÄĸö°æ±¾Êý¾Ý£¬¸üа汾ÒÀÀµÓÚÔçÆÚget²Ù×÷ʱ»ñµÃµÄÏòÁ¿Ê±ÖÓ¡£

ͼ3 ¶ÔÏó°æ±¾ËæÊ±¼äÑݱä
ÏòÁ¿Ê±ÖÓµÄʹÓùý³ÌͼÉÏͼ3Ëùʾ£¬¾ßÌåÁ÷³Ì½âÎöÈçÏ£º
¿Í»§¶ËдÈëÒ»¸öжÔÏó¡£½ÚµãSx´¦ÀíÁËÕâ¸öÇëÇ󣬴¦Àí¶ÔkeyµÄд£ºÐòÁкŵÝÔö£¬²¢´´½¨Êý¾ÝµÄÏòÁ¿Ê±ÖÓ£¬ÕâÑùÔڸýڵãÉÏÉú³É¶ÔÏóD1ºÍÏòÁ¿Ê±ÖÓ[(Sx,
1)]¡£
¿Í»§¶Ë¸üиöÔÏó¡£¼ÙÉèÓÉͬÑùµÄ½Úµã¼´Sx´¦ÀíÁËÕâ¸öÇëÇó£¬ÓÉÓڸýڵãÓÐÁËD1ºÍÏòÁ¿Ê±ÖÓ[(Sx,
1)]£¬Ôò¸üиöÔÏóºóÔڸýڵãÉÏÉú³É¶ÔÏóD2ºÍÏòÁ¿Ê±ÖÓ[(Sx, 2)]£¬D2¼Ì³Ð×ÔD1£¬¼´D2¸²Ð´D1£¬¼ÆÊýÆ÷Ôö1£¬µ«ÆäËü½Úµã´Ëʱ¿ÉÄÜÊÇD1£¬Ò²¿ÉÄÜÊÇD2£¬ÕâÈ¡¾öÓÚÍøÂçºÍ½Úµã״̬¡£
¼ÙÉèͬһ¿Í»§¶Ë¸üиöÔÏ󵫱»²»Í¬µÄ·þÎñÆ÷´¦ÀíÁË¡£½ÚµãSy´¦ÀíÁËÕâ¸öÇëÇó£¬Ôò¸üиöÔÏóºóÔڸýڵãÉÏÉú³É¶ÔÏóD3ºÍÏòÁ¿Ê±ÖÓ[(Sx,
2), (Sy, 1)]¡£
¼ÙÉèÁíÒ»¿Í»§¶Ë¶ÁÈ¡µ½ÁËD2²¢³¢ÊÔ¸üÐÂËüµ«±»ÁíÒ»¸ö²»Í¬µÄ·þÎñÆ÷´¦ÀíÁË¡£½ÚµãSz´¦ÀíÁËÕâ¸öÇëÇó£¬Ôò¸üиöÔÏóºóÔڸýڵãÉÏÉú³É¶ÔÏóD4ºÍÏòÁ¿Ê±ÖÓ[(Sx,
2), (Sz, 1)]¡£
½ÚµãÊý¾Ý°æ±¾»ØÊÕ¡£ÏÖÔÚÓÐ4¸ö°æ±¾µÄÊý¾Ý´æÔÚ²¢ÔÚ¸÷¸ö½ÚµãÖ®¼ä´«µÝÁË£¬µ±½ÚµãÊÕµ½D3»òD4ʱ£¬»á¸ù¾ÝÏòÁ¿Ê±ÖÓ½«D1ºÍD2»ØÊÕµô£¬ÒòΪÆäÊÇD3ºÍD4µÄ׿ÏÈ¡£µ«ÊÇÊÕµ½D3ºÍD4µÄ½Úµã£¬¸ù¾ÝÏòÁ¿Ê±ÖÓ·¢ÏÖËüÃÇÖ®¼äÊDz¢ÐйØÏµ£¬Ôò±£Áô¶þÕߣ¬²¢ÔÚ¿Í»§¶Ëgetʱ½«¶þÕß¶¼Ìá½»¸ø¿Í»§¶ËÓÉÆäÀ´Ðµ÷²¢ºÏ²¢°æ±¾¡£
¼ÙÉè¿Í»§¶Ë¶ÁÈ¡Êý¾Ý£¬Ôò»á»ñÈ¡µ½D3ºÍD4£¬¸ù¾ÝÁ½ÕßµÄÏòÁ¿Ê±ÖÓ£¬»áºÏ²¢ÎªD5ºÍÏòÁ¿Ê±ÖÓ[(Sx,
2), (Sy, 1), (Sz, 1)]£¬½ÚµãSxе÷д²Ù×÷£¬²¢¸üжÔÏóºÍÏòÁ¿Ê±ÖÓ¡£
´ÓÉÏÃæµÄ¹ý³ÌÖпÉÒÔ¿´³ö£¬ÔÚ½Úµã±È½Ï¶àÇÒÇé¿ö¼«¶Ëʱ£¬ÏòÁ¿Ê±ÖÓÁбí»áÔö³¤£¬Dynamo¶Ô´Ë²ÉÓÃʱÖӽضϷ½°¸À´½â¾ö´ËÎÊÌ⣬¼´(node,
counter)¶Ô´øÓÐʱ¼ä´Á£¬ÔÚÊýÄ¿´ïµ½ãÐÖµ£¨±ÈÈ磺10£©Ê±£¬½«×îÔçµÄÒ»¶Ô´ÓÏòÁ¿Ê±ÖÓÖÐɾ³ý¡£
4¡¢¹ÊÕϼì²â
£¨1£©Ring Membership
ÿ¸ö½ÚµãÆô¶¯Ê±´æ´¢×Ô¼ºÔÚ»·ÉϵÄÓ³ÉäÐÅÏ¢²¢³Ö¾Ã»¯µ½´ÅÅÌÉÏ£¬È»ºóÿ¸ö½Úµãÿ¸ôÒ»ÃëËæ»úÑ¡ÔñÒ»¸ö¶ÔµÈ½Úµã£¬Í¨¹ýGossipÐÒé´«²¥½ÚµãµÄÓ³ÉäiÐÅÏ¢£¬×îÖÕÿ¸ö½Úµã¶¼ÖªµÀ¶ÔµÈ½ÚµãËù´¦Àí·¶Î§£¬¼´Ã¿¸ö½Úµã¶¼¿ÉÒÔÖ±½Óת·¢Ò»¸ökeyµÄ¶Á/д²Ù×÷µ½ÕýÈ·µÄÊý¾Ý¼¯½Úµã£¬¶ø²»ÐèÒª¾¹ýÖмä·ÓÉ»òÕßÌø¡£
£¨2£©External Discovery
Èç¹ûÈ˹¤·Ö±ðÍùDynamo»·ÖмÓÈë½ÚµãAºÍB£¬ÔòRing Membership²»»áÁ¢¼´¼ì²âµ½ÕâÒ»±ä»¯£¬¶ø³öÏÖÔÝʱÂß¼·ÖÁѵÄDynamo»·£¨AºÍB¶¼ÈÏΪ×Ô¼ºÔÚ»·ÖУ¬µ«ÊÇ»¥Ï಻֪µÀ¶Ô·½´æÔÚ£©¡£DynamoÓÃExternal
DiscoveryÀ´½â¾öÕâ¸öÎÊÌ⣬¼´ÓÐЩDynamo½Úµã³äµ±ÖÖ×Ó½ÚµãµÄ½ÇÉ«£¬ÔÚ·ÇÖÖ×Ó½ÚµãÖÐÅäÖÃÖÖ×Ó½ÚµãµÄIP£¬ËùÓзÇÖÖ×ӽڵ㶼ÓëÖÖ×Ó½Úµãе÷³ÉÔ±¹ØÏµ
¡£
£¨3£©Failure Detection
Dynamo²ÉÓÃÀàGossipÐÒéÀ´ÊµÏÖÈ¥ÖÐÐÄ»¯µÄ¹ÊÕϼì²â£¬Ê¹ÏµÍ³ÖеÄÿ¸ö½Úµã¶¼¿ÉÒÔÁ˽âÆäËü½ÚµãµÄ¼ÓÈëºÍlikai
5¡¢¹ÊÕÏ´¦Àí
´«Í³µÄQuorum£¬ÔÚ½Úµã¹ÊÕÏ»òÕßÍøÂç¹ÊÕÏÇé¿öÏ£¬ÏµÍ³²»¿ÉÓá£ÎªÁËÌá¸ß¿ÉÓÃÐÔ£¬Dynamo²ÉÓÃSloppy
QuorumºÍHinted Handoff£¬¼´ËùÓжÁд²Ù×÷ÓÉÊ×Ñ¡ÁбíÖеÄǰN¸ö½¡¿µ½ÚµãÖ´ÐУ¬¶ø·¢Íù¹ÊÕϽڵãµÄÊý¾Ý×öºÃ±ê¼Çºó±»·¢Íù½¡¿µ½Úµã£¬¹ÊÕϽڵãÖØÐ¿ÉÓÃʱ»Ö¸´¸±±¾¡£
Èçͼ2ËùʾÖÐDynamoÅäÖÃNΪ3¡£Èç¹ûÔÚд¹ý³ÌÖнڵãAÔÝʱ²»¿ÉÓã¨Down»òÎÞ·¨Á¬½Ó£©£¬Ôò·¢ÍùAµÄ¸±±¾½«±»·¢Ë͵½½ÚµãD£¬·¢µ½DµÄ¸±±¾ÔÚÆäÔʼÊý¾ÝÖÐÓÐÒ»¸öhintÒÔ±íÃ÷½ÚµãA²ÅÊǸ±±¾µÄÔ¤ÆÚ½ÓÊÕÕߣ¬D½«¸±±¾Êý¾Ý±£´æÔÚÒ»¸öµ¥¶ÀµÄ±¾µØ´æ´¢ÖУ¬ÔÚ¼ì²âµ½A¿ÉÓÃʱ£¬D³¢ÊÔ½«¸±±¾·¢µ½A£¬Èç¹û·¢Ëͳɹ¦£¬D»á½«Êý¾Ý´Ó±¾µØ´æ´¢ÖÐɾ³ý¶ø²»»á½µµÍϵͳÖеĸ±±¾×ÜÊý¡£
Ò»¸ö¸ß¿ÉÓõĴ洢ϵͳ¾ß±¸´¦ÀíÕû¸öIDC¹ÊÕÏ£¨¶Ïµç¡¢×ÔÈ»ÔÖº¦¡¢ÍøÂç¹ÊÕϵƣ©µÄÄÜÁ¦ÊǷdz£ÖØÒªµÄ£¬Dynamo¾Í¾ß±¸´ËÄÜÁ¦¡£Dynamo¿ÉÒÔÅäÖóɿç¶à¸öIDC¸´ÖƶÔÏ󣬼´keyµÄÊ×Ñ¡ÁбíÓÉ¿ç¶à¸öIDCµÄ½Úµã×é³É£¬ÕâЩIDCÖ®¼äÓɸßËÙרÏßÁ¬½Ó£¬¿ç¶à¸öIDCµÄ¸´ÖÆ·½°¸Ê¹µÃDynamoÄܹ»´¦ÀíÕû¸öIDC¹ÊÕÏ¡£
´ËÍ⣬ΪÁË´¦ÀíÔÚhinted¸±±¾Òƽ»»áÔ¤ÆÚ½Úµã֮ǰ¸Ã¸±±¾²»¿ÉÓõÄÇé¿ö£¬DynamoʵÏÖÁËanti-entropyÐÒéÀ´±£³Ö¸±±¾Í¬²½£¬ÎªÁ˸ü¿ìµÝ¼ì²â¸±±¾Ö®¼äµÄ²»Ò»ÖÂÐÔ²¢¼õÉÙ´«ÊäÁ¿£¬Dynamo²ÉÓÃMerkleTree¡£
6¡¢À©ÈÝ/ËõÈÝ
£¨1£©À©ÈÝ
µ±Ò»¸öнڵãX¼ÓÈ뵽ϵͳÖÐʱ£¬ÆäµÃµ½Ò»Ð©Ëæ»ú·ÖÅäµ½»·ÉϵÄtoken£¬½ÚµãX»á¸ºÔð´¦ÀíÒ»¸ökey
range£¬¶øÕâЩkeyÔÚ½ÚµãX¼ÓÈëǰÓÉÏÖÓеÄһЩ½Úµã¸ºÔ𣬵±½ÚµãX¼ÓÈëºó£¬ÕâЩ½Úµã½«ÕâЩkey´«µÝ¸ø½ÚµãX¡£ÒÔͼ2ΪÀý£¬¼ÙÉè½ÚµãXÌí¼Óµ½»·ÖÐAºÍBÖ®¼äµÄλÖ㬵±X¼ÓÈ뵽ϵͳÖÐºó£¬Æä¸ºÔðµÄkey·¶Î§Îª(F,
G], (G, A], (A, X]£¬½ÚµãB¡¢CºÍD¶¼¸÷×ÔÓÐÒ»²¿·Ö²»ÔÙÐèÒª´æ´¢µÄkey·¶Î§£¬¼´ÔÚX¼ÓÈëǰ£¬B¸ºÔð(F,
G], (G, A], (A, B]£»C¸ºÔð(G, A], (A, B], (B, C]£»D¸ºÔð(A,
B], (B, C], (C, D]£¬¶øÔÚX¼ÓÈëºó£¬B¸ºÔð(G, A], (A, X], (X, B]£»C¸ºÔð(A,
X], (X, B], (B, C]£»D¸ºÔð(X, B], (B, C], (C, D]¡£½ÚµãB¡¢CºÍDÔÚÊÕµ½½ÚµãX¼ÓÈëµÄÈ·ÈÏÐźźó³ö·¢ÕâÒ»¹ý³Ì¡£
£¨2£©ËõÈÝ
µ±´ÓϵͳÖÐɾ³ýÒ»¸ö½Úµãʱ£¬keyµÄÖØÐ·ÖÅäÇé¿öÓë²½Ö裨1£©ÕýºÃÏà·´¡£
7¡¢¶Á/д²Ù×÷
¶ÁÈ¡ºÍдÈëÓÉÇëÇóе÷×é¼þÖ´ÐУ¬Ã¿¸ö¿Í»§¶ËÇëÇó¶¼½«µ¼ÖÂÔÚ´¦Àí¸ÃÇëÇóµÄ½ÚµãÉÏ´´½¨Ò»¸ö״̬»ú£¬Ã¿¸ö״̬»ú¶¼°üº¬ÒÔÏÂÂß¼£º
±êʶ¸ºÔðÒ»¸ökeyµÄ½Úµã£»
·¢ËÍÇëÇó£»
µÈ´ý»ØÓ¦£»
¿ÉÄܵÄÖØÊÔ´¦Àí£»
¼Ó¹¤ºÍ°ü×°·µ»Ø¿Í»§¶ËÏìÓ¦¡£
ÿ¸ö״̬»úʵÀýÖ»´¦ÀíÒ»¸ö¿Í»§¶ËÇëÇó£¬Èç¹ûÊÇÒ»¸ö¶ÁÇëÇó£¬Ôò״̬»úÈçÏ£º
·¢ËͶÁÇëÇóµ½ÏàÓ¦½áµã£»
µÈ´ýËùÐèµÄ×îµÍÊýÁ¿µÄÏìÓ¦£»
Èç¹ûÔÚ¸ø¶¨µÄʱ¼äÄÚÊÕµ½µÄÏìӦ̫ÉÙ£¬ÔòÇëÇóʧ°Ü£»
·ñÔòÊÕ¼¯ËùÓÐÊý¾ÝµÄ°æ±¾£¬²¢È·¶¨Òª·µ»ØµÄ°æ±¾£»
Èç¹ûÆôÓð汾ºÏ²¢£¬ÔòÖ´ÐÐÓ﷨е÷²¢Éú³ÉÒ»¸ö¶Ô¿Í»§¶Ë²»Í¸Ã÷µÄдÉÏÏÂÎÄ£¬ÆäÖаüº¬Ò»¸öÄÒÀ¨ËùÓа汾µÄÏòÁ¿Ê±ÖÓ¡£
·µ»Ø¶ÁÈ¡ÏìÓ¦¸ø¿Í»§¶Ëºó£¬×´Ì¬»úµÈ´ýÒ»¶Îʱ¼äÒÔ½ÓÊÜÈκÎÐü¶øÎ´¾öµÄÏìÓ¦£¬Èç¹ûÈκÎÏìÓ¦·µ»ØÁ˹ýʱµÄ°æ±¾£¬Ôòе÷Ô±ÓÃ×îа汾¸üÐÂÕâЩ½Úµã£¬ÒÔÍê³É¶ÁÐÞ¸´¡£
дÇëÇóͨ³£¸úËæÔÚ¶ÁÇëÇóÖ®ºó£¬Ôòе÷Ô±ÓɶÁ²Ù×÷´ð¸´×î¿ìµÄ½Úµã³äµ±£¬ÕâÖÖÓÅ»¯ÄÜÌá¸ß¶ÁдһÖÂÐÔ¡£
ËÄ¡¢½â¾öÎÊÌâ
1¡¢¿ÉÓÃÐÔ
ÍêȫȥÖÐÐÄ»¯£¬ÎÞµ¥µã£¬ÓÀÔ¶¿Éд¡£
2¡¢ÉìËõÐÔ
´øÐéÄâ»ú½ÚµãµÄÒ»ÖÂÐÔhash£ºÒ»ÖÂÐÔhash½â¾öÀ©ÈÝ/ËõÈÝÎÊÌ⣬ÐéÄâ½Úµã½â¾ö»úÆ÷ÒìÖÊÐÔÎÊÌâ¡£
3¡¢¿É¿¿ÐÔ
Êý¾Ý¸´Öƶà·Ý¸±±¾£¬ÓÃÏòÁ¿Ê±ÖÓ½â¾ö°æ±¾ºÏ²¢ÎÊÌâ¡£
4¡¢¿ÉÅäÖÃ
ƽºâÐԿɵ÷£¬¼´¸ù¾Ý£¨N,W,R£©Ä£ÐÍÆ½ºâ¿ÉÓÃÐÔºÍÒ»ÖÂÐÔ£¬½¨ÒéÄ£ÐͲÎÊýΪ£¨3,2,2£©¡£
|