ÕªÒª
̸¼°Ò»Ð©·Ö²¼Ê½ÏµÍ³µÄÀíÂÛºÍ˼Ï룬°üÀ¨CAP¡¢BASE¡¢NWRµÈ¡£²¢¼òµ¥·ÖÎöһЩÖ÷Á÷Êý¾Ý¿â·Ö²¼Ê½·½°¸µÄÀû±×£¬ÒÔ±ãÎÒÃÇÔÚ¿ª·¢Ê±¸üÉîÈëÈ«ÃæµØ½øÐÐ˼¿¼¡¢Ñ¡ÔñºÍÉè¼Æ¡£
ÕýÎÄ
ÔÚÌÖÂÛ³£¼û¼Ü¹¹Ç°£¬Ïȼòµ¥Á˽âÏÂCAPÀíÂÛ£º
CAP ÊÇ Consistency¡¢Availablity ºÍ Partition-tolerance
µÄËõд¡£·Ö±ðÊÇÖ¸£º
Ò»ÖÂÐÔ£¨Consistency£©£ºÃ¿´Î¶Á²Ù×÷¶¼Äܱ£Ö¤·µ»ØµÄÊÇ×îÐÂÊý¾Ý£»
¿ÉÓÃÐÔ£¨Availablity£©£ºÈκÎÒ»¸öûÓз¢Éú¹ÊÕϵĽڵ㣬»áÔÚºÏÀíµÄʱ¼äÄÚ·µ»ØÒ»¸öÕý³£µÄ½á¹û£»
·ÖÇøÈÝÈÌÐÔ£¨Partition-tolerance£©£ºµ±½Úµã¼ä³öÏÖÍøÂç·ÖÇø£¬ÕÕÑù¿ÉÒÔÌṩ·þÎñ¡£
CAPÀíÂÛÖ¸³ö£ºCAPÈýÕßÖ»ÄÜÈ¡Æä¶þ£¬²»¿É¼æµÃ¡£ÆäʵÕâÒ»µãºÜºÃÀí½â£º
Ê×ÏÈ£¬µ¥»úϵͳ¶¼Ö»Äܱ£Ö¤CP¡£
ÓÐÁ½¸ö»òÒÔÉϽڵãʱ£¬µ±ÍøÂç·ÖÇø·¢Éúʱ£¬¼¯ÈºÖÐÁ½¸ö½Úµã²»ÄÜ»¥ÏàͨÐÅ¡£´ËʱÈç¹û±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔC£¬ÄÇô±ØÈ»»áÓÐÒ»¸ö½Úµã±»±ê¼ÇΪ²»¿ÉÓõÄ״̬£¬Î¥·´ÁË¿ÉÓÃÐÔAµÄÒªÇó£¬Ö»Äܱ£Ö¤CP¡£
·´Ö®£¬Èç¹û±£Ö¤¿ÉÓÃÐÔA£¬¼´Á½¸ö½Úµã¿ÉÒÔ¼ÌÐø¸÷×Ô´¦ÀíÇëÇó£¬ÄÇôÓÉÓÚÍøÂ粻ͨ²»ÄÜͬ²½Êý¾Ý£¬±ØÈ»ÓֻᵼÖÂÊý¾ÝµÄ²»Ò»Ö£¬Ö»Äܱ£Ö¤AP¡£
Ò»¡¢µ¥ÊµÀý
µ¥»úϵͳºÜÏÔÈ»£¬Ö»Äܱ£Ö¤CP£¬ÎþÉüÁË¿ÉÓÃÐÔA¡£µ¥»ú°æµÄMySQL£¬Redis£¬MongoDBµÈÊý¾Ý¿â¶¼ÊÇÕâÖÖģʽ¡£
ʵ¼ÊÖУ¬ÎÒÃÇÐèÒªÒ»Ì׿ÉÓÃÐԸߵÄϵͳ£¬¼´Ê¹²¿·Ö»úÆ÷¹ÒµôÖ®ºóÈÔÈ»¿ÉÒÔ¼ÌÐøÌṩ·þÎñ¡£
¶þ¡¢¶à¸±±¾
Ïà±ÈÓÚµ¥ÊµÀý£¬ÕâÀï¶àÁËÒ»¸ö½ÚµãÈ¥±¸·ÝÊý¾Ý¡£
¶ÔÓÚ¶Á²Ù×÷À´Ëµ£¬ÒòΪ¿ÉÒÔ·ÃÎÊÁ½¸ö½ÚµãÖеÄÈÎÒâÒ»¸ö£¬ËùÒÔ¿ÉÓÃÐÔÌáÉý¡£
¶ÔÓÚд²Ù×÷À´Ëµ£¬¸ù¾Ý¸üвßÂÔ·ÖΪÈýÖÖÇé¿ö£º
ͬ²½¸üУº¼´Ð´²Ù×÷ÐèÒªµÈ´ýÁ½¸ö½Úµã¶¼¸üгɹ¦²Å·µ»Ø¡£ÕâÑùµÄ»°Èç¹ûÒ»µ©·¢ÉúÍøÂç·ÖÇø¹ÊÕÏ£¬Ð´²Ù×÷±ã²»¿ÉÓã¬ÎþÉüÁËA¡£
Òì²½¸üУº¼´Ð´²Ù×÷Ö±½Ó·µ»Ø£¬²»ÐèÒªµÈ´ý½Úµã¸üгɹ¦£¬½ÚµãÒì²½µØÈ¥¸üÐÂÊý¾Ý¡£ ÕâÖÖ·½Ê½£¬ÎþÉüÁËCÀ´±£Ö¤A¡£¼´ÎÞ·¨±£Ö¤Êý¾ÝÊÇ·ñ¸üгɹ¦£¬»¹ÓпÉÄÜ»áÓÉÓÚÍøÂç¹ÊÕϵÈÔÒò£¬µ¼ÖÂÊý¾Ý²»Ò»Ö¡£
ÕÛÖÔ£º¸üв¿·Ö½Úµã³É¹¦ºó±ã·µ»Ø¡£
ÕâÀÏȽéÉÜÏÂÀàDynamoϵͳÓÃÓÚ¿ØÖÆ·Ö²¼Ê½´æ´¢ÏµÍ³ÖеÄÒ»ÖÂÐÔ¼¶±ðµÄ²ßÂÔ¡ª¡ªNWR£º
N£ºÍ¬Ò»·ÝÊý¾ÝµÄ¸±±¾¸öÊý
W£ºÐ´²Ù×÷ÐèҪȷ±£³É¹¦µÄ¸±±¾¸öÊý
R£º¶Á²Ù×÷ÐèÒª¶ÁÈ¡µÄ¸±±¾¸öÊý
µ±W+R>Nʱ£¬ÓÉÓÚ¶Áд²Ù×÷¸²¸Çµ½µÄ¸±±¾¼¯¿Ï¶¨»áÓн»¼¯£¬¶Á²Ù×÷Ö»Òª±È½Ï¸±±¾¼¯Êý¾ÝµÄÐÞ¸Äʱ¼ä»òÕß°æ±¾ºÅ¼´¿ÉÑ¡³ö×îеģ¬ËùÒÔϵͳÊÇǿһÖÂÐԵģ»·´Ö®£¬µ±W+R<=NʱÊÇÈõÒ»ÖÂÐԵġ£
È磺(N,W,R)=(1,1,1)Ϊµ¥»úϵͳ£¬ÊÇǿһÖÂÐԵģ»(N,W,R)=(2,1,1)Ϊ³£¼ûµÄmaster-slaveģʽ£¬ÊÇÈõÒ»ÖÂÐԵġ£
¾ÙÀý£º
ÈçÏñCassandraÖеÄÕÛÖÔÐÍ·½°¸QUORUM£¬Ö»Òª³¬¹ý°ëÊýµÄ½Úµã¸üгɹ¦±ã·µ»Ø£¬¶Áȡʱ·µ»Ø¶àÊý¸±±¾µÄÒ»ÖµÄÖµ¡£È»ºó£¬¶ÔÓÚ²»Ò»Öµĸ±±¾£¬¿ÉÒÔͨ¹ýread
repairµÄ·½Ê½½â¾ö¡£
read repair£º¶ÁȡijÌõÊý¾Ýʱ£¬²éѯËùÓи±±¾ÖеÄÕâÌõÊý¾Ý£¬±È½ÏÊý¾ÝÓë´ó¶àÊý¸±±¾µÄ×îÐÂÊý¾ÝÊÇ·ñÒ»Ö£¬Èô·ñ£¬Ôò½øÐÐÒ»ÖÂÐÔÐÞ¸´¡£ÆäÖУ¬W+R>N£¬¹Ê¶øÊÇǿһÖÂÐԵġ£
ÓÖÈçRedisµÄmaster-slaveģʽ£¬¸üгɹ¦Ò»¸ö½Úµã¼´·µ»Ø£¬ÆäËû½ÚµãÒì²½µØÈ¥±¸·ÝÊý¾Ý¡£ÕâÖÖ·½Ê½Ö»±£Ö¤ÁË×îÖÕÒ»ÖÂÐÔ¡£
×îÖÕÒ»ÖÂÐÔ£ºÏà±ÈÓÚÊý¾Ýʱ¿Ì±£³ÖÒ»ÖµÄǿһÖÂÐÔ£¬×îÖÕÒ»ÖÂÐÔÔÊÐíij¶Îʱ¼äÄÚÊý¾Ý²»Ò»Ö¡£µ«ÊÇËæ×Åʱ¼äµÄÔö³¤£¬Êý¾Ý×îÖջᵽ´ïÒ»ÖµÄ״̬¡£ÆäÖУ¬W+R<N£¬ËùÒÔÖ»Äܱ£Ö¤×îÖÕÒ»ÖÂÐÔ¡£
´ËÍ⣬NÔ½´ó£¬Êý¾Ý¿É¿¿ÐÔÔ½ºÃ¡£µ«ÊÇÓÉÓÚW»òRÔ½´ó£¬Ð´»ò¶Á¿ªÏúÔ½´ó£¬ÐÔÄÜÔ½²î£¬ËùÒÔÒ»°ãÐèÒª×ۺϿ¼ÂÇÒ»ÖÂÐÔ¡¢¿ÉÓÃÐԺͶÁдÐÔÄÜ£¬ÉèÖÃ
W¡¢R ¶¼Îª N/2 + 1¡£
Æäʵ£¬ÕÛÖÔ·½°¸ºÍÒì²½¸üеķ½Ê½´Ó±¾ÖÊÉÏÀ´ËµÊÇÒ»ÑùµÄ£¬¶¼ÊÇËðʧһ¶¨µÄCÀ´»»È¡AµÄÌá¸ß¡£¶øÇÒ£¬»á²úÉú¡®ÄÔÁÑ¡¯µÄÎÊÌ⡪¡ª¼´ÍøÂç·ÖÇøÊ±½Úµã¸÷×Ô´¦ÀíÇëÇó£¬ÎÞ·¨Í¬²½Êý¾Ý£¬µ±ÍøÂç»Ö¸´Ê±£¬µ¼Ö²»Ò»Ö¡£
Ò»°ãµÄ£¬Êý¾Ý¿â¶¼»áÌṩ·ÖÇø»Ö¸´µÄ½â¾ö·½°¸£º
´ÓÔ´Í·½â¾ö£ºÈçÉ趨½ÚµãͨÐŵij¬Ê±Ê±¼ä£¬³¬Ê±ºó¡®ÉÙÊýÅÉ¡¯½Úµã²»Ìṩ·þÎñ¡£ÕâÑù±ã²»»á³öÏÖÊý¾Ý²»Ò»ÖµÄÇé¿ö£¬²»¹ý¿ÉÓÃÐÔ½µµÍ¡£
´Ó»Ö¸´½â¾ö£ºÈçÔÚͨÐŻָ´Ê±£¬¶Ô²»Í¬½ÚµãµÄÊý¾Ý½øÐбȽϡ¢ºÏ²¢£¬ÕâÑù¿ÉÓÃÐԵõ½Á˱£Ö¤¡£µ«ÊÇÔÚ»Ö¸´Íê³É֮ǰ£¬Êý¾ÝÊDz»Ò»Öµģ¬¶øÇÒ¿ÉÄܳöÏÖÊý¾Ý³åÍ»¡£
¹âÕâÑù»¹²»¹»£¬µ±Êý¾ÝÁ¿½Ï´óʱ£¬ÓÉÓÚһ̨»úÆ÷µÄ×ÊÔ´ÓÐÏÞ²¢²»ÄÜÈÝÄÉËùÓеÄÊý¾Ý£¬ÎÒÃÇ»áÏë°ÑÊý¾Ý·Öµ½ºÃ¼¸Ì¨»úÆ÷ÉÏ´æ´¢¡£
Èý¡¢·ÖƬ
Ïà±ÈÓÚµ¥ÊµÀý£¬ÕâÀï¶àÁËÒ»¸ö½ÚµãÈ¥·Ö¸îÊý¾Ý¡£
ÓÉÓÚËùÓÐÊý¾Ý¶¼Ö»ÓÐÒ»·Ý£¬Ò»ÖÂÐÔµÃÒÔ±£Ö¤£»½Úµã¼ä²»ÐèҪͨÐÅ£¬·ÖÇøÈÝÈÌÐÔÒ²ÓС£
È»¶ø£¬µ±ÈÎÒâÒ»¸ö½Úµã¹Òµô£¬¶ªÊ§ÁËÒ»²¿·ÖµÄÊý¾Ý£¬ÏµÍ³¿ÉÓÃÐԵò»µ½±£Ö¤¡£
×ÛÉÏ£¬ÕâºÍµ¥»ú°æµÄ·½°¸Ò»Ñù£¬¶¼Ö»Äܱ£Ö¤CP¡£
ÄÇô£¬ÓÐÄÇЩºÃ´¦ÄØ£¿
ij¸ö½Úµã¹ÒµôÖ»»áÓ°Ï첿·Ö·þÎñ£¬¼´·þÎñ½µ¼¶£»
ÓÉÓÚ·ÖÆ¬ÁËÊý¾Ý£¬¿ÉÒÔ¾ùºâ¸ºÔØ£»
Êý¾ÝÁ¿Ôö´ó£¯¼õСºó¿ÉÒÔÏàÓ¦µØÀ©ÈÝ£¯ËõÈÝ¡£
´ó¶àÊýµÄÊý¾Ý¿â·þÎñ¶¼ÌṩÁË·ÖÆ¬µÄ¹¦ÄÜ¡£ÈçRedisµÄslots£¬CassandraµÄpartitions£¬MongoDBµÄshardsµÈ¡£
»ùÓÚ·ÖÆ¬½â¾öÁËÊý¾ÝÁ¿´óµÄÎÊÌ⣬¿ÉÊÇÎÒÃÇ»¹ÊÇÏ£ÍûÎÒÃǵÄϵͳÊǸ߿ÉÓõģ¬ÄÇô£¬ÈçºÎÎþÉüÒ»¶¨µÄÒ»ÖÂÐÔÈ¥±£Ö¤¿ÉÓÃÐÔÄØ£¿
ËÄ¡¢¼¯Èº
¿ÉÒÔ¿´µ½£¬ÉÏÃæÕâÖÖ·½Ê½×ÛºÏÁËǰÁ½ÖÖ·½Ê½¡£Í¬ÉÏ·ÖÎö£¬²ÉÓò»Í¬µÄÊý¾Ýͬ²½²ßÂÔ£¬ÏµÍ³µÄCAP±£Ö¤¸÷Óв»Í¬¡£²»¹ý£¬Ò»°ãÊý¾Ý¿âϵͳ¶¼»áÌṩ¿ÉÑ¡µÄÅäÖã¬ÎÒÃǸù¾Ý²»Í¬µÄ³¡¾°Ñ¡Ôñ²»Í¬µÄ²ßÂÔÒÔʵÏÖ²»Í¬µÄÌØÐÔ¡£
Æäʵ£¬¶ÔÓÚ´ó¶àÊýµÄ·Ç½ðÈÚÀ໥ÁªÍø¹«Ë¾£¬ÒªÇó²¢·ÇǿһÖÂÐÔ£¬¶øÊÇ¿ÉÓÃÐÔºÍ×îÖÕÒ»ÖÂÐԵı£Ö¤¡£ÕâÒ²ÊÇNoSQLÁ÷ÐÐÓÚ»¥ÁªÍøÓ¦ÓõÄÒ»´óÔÒò£¬Ïà±ÈÓÚǿһÖÂÐÔϵͳµÄACIDÔÔò£¬Ëü¸ü¼ÓÇãÏòÓÚBASE£º
Basically Available: »ù±¾¿ÉÓ㬼´ÔÊÐí·ÖÇøÊ§°Ü£¬³öÁËÎÊÌâ½ö·þÎñ½µ¼¶£»
Soft-state: Èí״̬£¬¼´ÔÊÐíÒì²½£»
Eventual Consistency: ×îÖÕÒ»ÖÂÐÔ£¬ÔÊÐíÊý¾Ý×îÖÕÒ»Ö£¬¶ø²»ÊÇʱ¿ÌÒ»Ö¡£
Îå¡¢×ܽá
»ù±¾ÉÏ£¬ÉÏÃæÌÖÂ۵ļ¸ÖÖ·½Ê½ÒѾº¸ÇÁË´ó¶àÊýµÄ·Ö²¼Ê½´æ´¢ÏµÍ³ÁË¡£ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÕâЩ¸ö·½°¸×ÜÊÇÐèҪͨ¹ýÎþÉüÒ»²¿·ÖÈ¥»»È¡ÁíÒ»²¿·Ö£¬×Üû·¨´ïµ½100%µÄCAP¡£
Ñ¡ÔñÄÄÖÖ·½°¸£¬ÒÀ¾Ý¾ÍÊÇÔÚÌØ¶¨³¡¾°Ï£¬¾¿¾¹ÄÄÐ©ÌØÐÔÊǸü¼ÓÖØÒªµÄÁË¡£ |