±à¼ÍƼö: |
ÔÚÈç½ñµÄ·Ö²¼Ê½Ê¢ÐеÄʱ´ú£¬·Ö²¼Ê½ÊÂÎñÓÀÔ¶¶¼ÊÇÈÆ²»¿ªµÄÒ»¸ö»°Ì⣬±¾ÎÄÖ÷Òª¾Í̸̸·Ö²¼Ê½ÊÂÎñÏà¹ØµÄÒ»ÖÂÐÔÓëʵս½â¾ö·½°¸¡£
À´×ÔÓÚcsdn£¬,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
01 ΪʲôÐèÒª·Ö²¼Ê½ÊÂÎñ
ÓÉÓÚ½üÊ®Ä껥ÁªÍøµÄ·¢Õ¹·Ç³£Ñ¸ËÙ£¬ºÜ¶àÍøÕ¾µÄ·ÃÎÊÔ½À´Ô½´ó£¬¼¯ÖÐʽ»·¾³ÒѾ²»ÄÜÂú×ãÒµÎñµÄÐèÒªÁË£¬Ö»Äܰ´ÕÕÒµÎñΪµ¥Î»½øÐÐÊý¾Ý²ð·Ö£¨°üº¬£º´¹Ö±²ð·ÖÓëˮƽ²ð·Ö£©£¬ÒÔ¼°°´ÕÕÒµÎñΪµ¥Î»Ìṩ·þÎñ£¬´ÓÔçÆÚµÄ¼¯ÖÐʽת±äÎªÃæÏò·þÎñ¼Ü¹¹µÄ·Ö²¼Ê½Ó¦Óû·¾³¡£
¾ÙÒ»¸öµäÐ͵ÄÀý×Ó£¬°¢ÀïµÄÌÔ±¦ÍøÕ¾Ëæ×Å·ÃÎÊÁ¿Ô½À´Ô½´ó£¬Ö»Äܰ´ÕÕÉÌÆ·¡¢¶©µ¥¡¢Óû§¡¢µêÆÌµÈÒµÎñΪµ¥Î»½øÐÐÊý¾Ý¿â²ð·Ö£¬ÒÔ¼°°´ÕÕÒµÎñΪµ¥Î»Ìṩ·þÎñ½Ó¿Ú¡£

Õâ¸öʱºò ΪÁËÍê³ÉÒ»¸ö¼òµ¥µÄÒµÎñ¹¦ÄÜ£¬±ÈÈ磺¹ºÂòÉÌÆ·ºó¿Û¿î£¬ÓпÉÄÜÐèÒªºá¿ç¶à¸ö·þÎñ£¬Éæ¼°Óû§¶©µ¥¡¢ÉÌÆ·¿â´æ¡¢Ö§¸¶µÈ¶à¸öÊý¾Ý¿â£¬¶øÕâЩ²Ù×÷ÓÖÐèÒªÔÚͬһ¸öÊÂÎñÖÐÍ꣬Õâ¾ÍÉæ¼°µ½µ½ÁË·Ö²¼Ê½ÊÂÎñ¡£
±¾ÖÊÉÏÀ´Ëµ£¬·Ö²¼Ê½ÊÂÎñ¾ÍÊÇΪÁ˱£Ö¤²»Í¬×ÊÔ´·þÎñÆ÷µÄÊý¾ÝÒ»ÖÂÐÔ¡£
02 ·Ö²¼Ê½µÄÒ»ÖÂÐÔÀíÂÛ
×îÔç¼ÓÖÝ´óѧ²®¿ËÀû·ÖУ Eric Brewer½ÌÊÚÌá³öÒ»¸ö·Ö²¼Ê½ÏµÍ³ÌØÐÔµÄCAPÀíÂÛ¡£
1.CAP ÀíÂ۵IJ»¿ÉÄÜÈý½Ç

Ò»ÖÂÐÔ£¨Consistency£©
¿ÉÓÃÐÔ£¨Availability£©
·ÖÇøÈÝ´íÐÔ£¨Partition tolerance£©
ÔÚ·Ö²¼Ê½ÏµÍ³ÖУ¬ÊDz»´æÔÚͬʱÂú×ãÒ»ÖÂÐÔ Consistency¡¢¿ÉÓÃÐÔ AvailabilityºÍ·ÖÇøÈÝ´íÐÔ
Partition ToleranceÈýÕߵġ£
Ò»¾ä»°×ܽ᣺һÖÂÐÔ¡¢¿ÉÓÃÐԺͷÖÇøÈÝ´íÔÚ·Ö²¼Ê½ÊÂÎñÖв»¿É¼æµÃ¡£
ÔÚ¾ø´ó¶àÊýµÄ³¡¾°£¬¶¼ÐèÒªÎþÉüǿһÖÂÐÔÀ´»»È¡ÏµÍ³µÄ¸ß¿ÉÓÃÐÔ£¬ÏµÍ³ÍùÍùÖ»ÐèÒª±£Ö¤×îÖÕÒ»ÖÂÐÔ¡£
ÕâÒ²ÊÇÊǺóÀ´·¢Õ¹³öµÄBASEÀíÂ۵Ļù´¡¡£
2.BASE ÀíÂÛ

Basically Available£¨»ù±¾¿ÉÓã©
Soft state£¨ÈáÈí״̬£©
Eventually consistent£¨×îÖÕÒ»ÖÂÐÔ£©Èý¸ö¶ÌÓïµÄ¼òд¡£
BASEÊǶÔCAPÖÐÒ»ÖÂÐԺͿÉÓÃÐÔȨºâµÄ½á¹û£¬ÆäÀ´Ô´ÓÚ¶Ô´ó¹æÄ£»¥ÁªÍøÏµÍ³·Ö²¼Ê½Êµ¼ùµÄ½áÂÛ£¬ÊÇ»ùÓÚCAP¶¨ÀíÖð²½ÑÝ»¯¶øÀ´µÄ£¬ÆäºËÐÄ˼ÏëÊǼ´Ê¹ÎÞ·¨×öµ½Ç¿Ò»ÖÂÐÔ£¨Strong
consistency£©£¬µ«Ã¿¸öÓ¦Óö¼¿ÉÒÔ¸ù¾Ý×ÔÉíµÄÒµÎñÌØµã£¬²ÉÓÃÊʵ±µÄ·½Ê½À´Ê¹ÏµÍ³´ïµ½×îÖÕÒ»ÖÂÐÔ£¨Eventual
consistency£©¡£
03 ·Ö²¼Ê½ÊÂÎñµÄ½â¾ö·½°¸
1.»ùÓÚXAÐÒéµÄÁ½½×¶ÎÌá½» 2PC£¨2-phase commit protocol£©
XAÊÇÒ»¸ö·Ö²¼Ê½ÊÂÎñÐÒ飬XAÖдóÖ·ÖΪÁ½²¿·Ö£ºÊÂÎñ¹ÜÀíÆ÷ºÍ±¾µØ×ÊÔ´¹ÜÀíÆ÷,ÆäÖб¾µØ×ÊÔ´¹ÜÀíÆ÷ÍùÍùÓÉÊý¾Ý¿âʵÏÖ£¬¶øÊÂÎñ¹ÜÀíÆ÷×÷Ϊȫ¾ÖµÄµ÷¶ÈÕߣ¬¸ºÔð¸÷¸ö±¾µØ×ÊÔ´µÄÌá½»ºÍ»Ø¹ö¡£

´óÖµÄÁ÷³Ì£º
µÚÒ»½×¶ÎÊDZí¾ö½×¶Î£¬ËùÓвÎÓëÕß¶¼½«±¾ÊÂÎñÄÜ·ñ³É¹¦µÄÐÅÏ¢·´À¡·¢¸øÐµ÷Õߣ»
µÚ¶þ½×¶ÎÊÇÖ´Ðн׶Σ¬Ðµ÷Õ߸ù¾ÝËùÓвÎÓëÕߵķ´À¡£¬Í¨ÖªËùÓвÎÓëÕߣ¬²½µ÷Ò»ÖµØÔÚËùÓзÖÖ§ÉÏÌá½»»òÕ߻عö¡£
ÓÅȱµã
¾¡Á¿±£Ö¤ÁËÊý¾ÝµÄǿһÖ£¬ÊµÏֳɱ¾½ÏµÍ£¬ÔÚ¸÷´óÖ÷Á÷Êý¾Ý¿â¶¼ÓÐ×Ô¼ºÊµÏÖ£¬´æÔÚµ¥µã¹ÊÕÏÎÊÌâ¡¢ÐÔÄÜÎÊÌâ¡¢¿çÊý¾Ý¿âÎÊÌâ¡£
2.ÊÂÎñ²¹³¥TCCģʽ
TCC·½°¸ÆäʵÊÇÁ½½×¶ÎÌá½»µÄÒ»ÖָĽø£¬½«Õû¸öÒµÎñÂß¼µÄÿ¸ö·ÖÖ§ÏÔʽµÄ·Ö³ÉÁËTry¡¢Confirm¡¢CancelÈý¸ö²Ù×÷¡£
Try²¿·ÖÍê³ÉÒµÎñµÄ×¼±¸¹¤×÷£¬confirm²¿·ÖÍê³ÉÒµÎñµÄÌá½»£¬cancel²¿·ÖÍê³ÉÊÂÎñµÄ»Ø¹ö£¬»ù±¾ÔÀíÈçÏÂͼËùʾ£º

ÓÅȱµã
¶Ô´úÂëÓÐÇÖÈëÐÔ£¬½µµÍÁËËø³åÍ»£¬Ìá¸ßÁËÍÌÍÂÁ¿£¬È±µãÊÇÓÐʱºò²¢Ã»ÓÐÄÇôºÃʵÏÖ¡£
°¸Àý
ÂìÒϽð·þµÄDTS£¨prepare¡¢commit¡¢rollback£©
3.ÏûÏ¢¶ÓÁÐ×îÖÕÒ»ÖÂÐÔ·½°¸
ͨ¹ýÒì²½½âñîµÄ·½Ê½£¬Í¨¹ýµÚÈý·½Öмä¼þ

°¸Àý
RocketMQ RabbitMQµÈ¾ù¿ÉʵÏÖ£¬RocketMQ »¹ÓÐרÃŵÄÊÂÎñÐÍÏûÏ¢£¬Ð°æµÄkafkaÒ²ÓС£
×ÜÖ®£¬·Ö²¼Ê½ÏµÍ³ÖÐÊÂÎñ¸ü¶àµÄÊǶÔCAPȨºâ£¬ÔÚʵ¼ÊÓ¦ÓÃÖУ¬¸ù¾ÝÒµÎñÒªÇ󡢿ª·¢ÈËÔ±Çé¿öÒÔ¼°ËùÓÿò¼Ü²»Í¬½øÐе÷Õû¡£
|