¸ÅÄî³ÎÇå
ÊÂÎñ²¹³¥»úÖÆ: ÔÚÊÂÎñÁ´ÖеÄÈκÎÒ»¸öÕýÏòÊÂÎñ²Ù×÷, ¶¼±ØÐë´æÔÚÒ»¸öÍêÈ«·ûºÏ»Ø¹ö¹æÔòµÄ¿ÉÄæÊÂÎñ.
CAPÀíÂÛ: CAP(Consistency, Availability, Partition Tolerance),
²ûÊöÁËÒ»¸ö·Ö²¼Ê½ÏµÍ³µÄÈý¸öÖ÷Òª·½Ãæ, Ö»ÄÜͬʱÔñÆä¶þ½øÐÐʵÏÖ. ³£¼ûµÄÓÐCPϵͳ, APϵͳ.
ÃݵÈÐÔ: ¼òµ¥µÄ˵, ÒµÎñ²Ù×÷Ö§³ÖÖØÊÔ, ²»»á²úÉú²»ÀûÓ°Ïì. ³£¼ûµÄʵÏÖ·½Ê½: ΪÏûÏ¢¶îÍâÔö¼ÓΨһID.
BASE(Basically avaliable, soft state, eventually consistent):
ÊÇ·Ö²¼Ê½ÊÂÎñʵÏÖµÄÒ»ÖÖÀíÂÛ±ê×¼.
ÈáÐÔÊÂÎñ vs. ¸ÕÐÔÊÂÎñ
¸ÕÐÔÊÂÎñÊÇÖ¸Ñϸñ×ñÑACIDÔÔòµÄÊÂÎñ, ÀýÈçµ¥»ú»·¾³ÏµÄÊý¾Ý¿âÊÂÎñ.
ÈáÐÔÊÂÎñÊÇÖ¸×ñÑBASEÀíÂÛµÄÊÂÎñ, ͨ³£ÓÃÔÚ·Ö²¼Ê½»·¾³ÖÐ, ³£¼ûµÄʵÏÖ·½Ê½ÓÐ: Á½½×¶ÎÌá½»(2PC),
TCC²¹³¥ÐÍÌá½», »ùÓÚÏûÏ¢µÄÒ첽ȷ±£ÐÍ, ×î´óŬÁ¦Í¨ÖªÐÍ.
ͨ³£¶Ô±¾µØÊÂÎñ²ÉÓøÕÐÔÊÂÎñ, ·Ö²¼Ê½ÊÂÎñʹÓÃÈáÐÔÊÂÎñ.
×î¼Ñʵ¼ù
ÏÈÉϽáÂÛ, ÔÙ·Ö±ð½éÉÜ·Ö²¼Ê½ÊÂÎñµÄ¸÷ÖÖʵÏÖ·½Ê½.
Èç¹ûÒµÎñ³¡¾°ÐèҪǿһÖÂÐÔ, ÄÇô¾¡Á¿±ÜÃ⽫ËüÃÇ·ÅÔÚ²»Í¬·þÎñÖÐ, Ò²¾ÍÊǾ¡Á¿Ê¹Óñ¾µØÊÂÎñ, ±ÜÃâʹÓÃǿһÖÂÐԵķֲ¼Ê½ÊÂÎñ.
Èç¹ûÒµÎñ³¡¾°Äܹ»½ÓÊÜ×îÖÕÒ»ÖÂÐÔ, ÄÇô×îºÃÊÇʹÓûùÓÚÏûÏ¢µÄ×îÖÕÒ»ÖÂÐԵķ½°¸(Ò첽ȷ±£ÐÍ)À´½â¾ö.
Èç¹ûÒµÎñ³¡¾°ÐèҪǿһÖÂÐÔ, ²¢ÇÒÖ»Äܹ»½øÐзֲ¼Ê½·þÎñ²¿Êð, ÄÇô×îºÃÊÇʹÓÃTCC·½°¸¶ø²»ÊÇ2PC·½°¸À´½â¾ö.
×¢Òâ: ÒÔÏÂÿÖÖ·½°¸¶¼Óв»Í¬µÄÊÊÓó¡ºÏ, ÐèÒª¸ù¾Ýʵ¼ÊÒµÎñ³¡¾°À´Ñ¡Ôñ.
Á½½×¶ÎÌá½»(2PC)
Á½½×¶ÎÌá½»(Two Phase Commit, 2PC), ¾ßÓÐǿһÖÂÐÔ, ÊÇCPϵͳµÄÒ»ÖÖµäÐÍʵÏÖ.
Á½½×¶ÎÌá½», ³£¼ûµÄ±ê×¼ÊÇXA, JTAµÈ. ÀýÈçOracleµÄÊý¾Ý¿âÖ§³ÖXA.
ÏÂͼÊÇÁ½½×¶ÎÌá½»µÄʾÒâͼ:

ͼµÄÉϰëÊÇÁ½½×¶ÎÌá½»³É¹¦µÄÑÝʾ, ϰëÊÇÁ½½×¶ÎÌύʧ°ÜµÄÑÝʾ. ¹ØÓÚÁ½½×¶ÎÌá½»ÍøÉÏÓкܶྵäµÄ½²½â,
ÕâÀï¾Í²»Ï¸ËµÁË, ¿ÉÒԲο¼Ç°ÃæµÄÁ´½Ó.
ȱµã
Á½½×¶ÎÌá½»Öеĵڶþ½×¶Î, е÷ÕßÐèÒªµÈ´ýËùÓвÎÓëÕß·¢³öyesÇëÇó, »òÕßÒ»¸ö²ÎÓëÕß·¢³önoÇëÇóºó,
²ÅÄÜÖ´ÐÐÌá½»»òÕßÖжϲÙ×÷. Õâ»áÔì³É³¤Ê±¼äÍ¬Ê±Ëø×¡¶à¸ö×ÊÔ´, Ôì³ÉÐÔÄÜÆ¿¾±, Èç¹û²ÎÓëÕßÓÐÒ»¸öºÄʱ³¤µÄ²Ù×÷,
ÐÔÄÜËðºÄ»á¸üÃ÷ÏÔ.
ʵÏÖ¸´ÔÓ, ²»ÀûÓÚϵͳµÄÀ©Õ¹, ²»ÍƼö.
TCC (Try-Confirm-Cancle)
TCC, ÊÇ»ùÓÚ²¹³¥ÐÍÊÂÎñµÄAPϵͳµÄÒ»ÖÖʵÏÖ, ¾ßÓÐ×îÖÕÒ»ÖÂÐÔ.

ÏÂÃæÒÔ¿Í»§¹ºÂòÉÌÆ·Ê±µÄ¸¶¿î²Ù×÷ΪÀý½øÐн²½â:
Try:
Íê³ÉËùÓеÄÒµÎñ¼ì²é(Ò»ÖÂÐÔ),Ô¤Áô±ØÐëÒµÎñ×ÊÔ´(×¼¸ôÀëÐÔ);
ÌåÏÖÔÚ±¾ÀýÖÐ, ¾ÍÊÇÈ·ÈϿͻ§ÕË»§Óà¶î×ã¹»Ö§¸¶(Ò»ÖÂÐÔ), Ëø×¡¿Í»§ÕË»§, ÉÌ»§ÕË»§(×¼¸ôÀëÐÔ).
Confirm:
ʹÓÃTry½×¶ÎÔ¤ÁôµÄÒµÎñ×ÊÔ´Ö´ÐÐÒµÎñ(ÒµÎñ²Ù×÷±ØÐëÊÇÃݵȵÄ), Èç¹ûÖ´ÐгöÏÖÒì³£, Òª½øÐÐÖØÊÔ.
ÔÚÕâÀï¾ÍÊÇÖ´Ðпͻ§ÕË»§¿Û¿î, ÉÌ»§ÕË»§ÈëÕ˲Ù×÷.
Cancle:
ÊÍ·ÅTry½×¶ÎÔ¤ÁôµÄÒµÎñ×ÊÔ´, ÔÚÕâÀï¾ÍÊÇÊͷſͻ§ÕË»§ºÍÉÌ»§ÕË»§µÄËø;
Èç¹ûÈÎÒ»×ÓÒµÎñÔÚConfirm½×¶ÎÓвÙ×÷ÎÞ·¨Ö´Ðгɹ¦, »áÔì³É¶ÔÒµÎñ»î¶¯¹ÜÀíÆ÷µÄÏìÓ¦³¬Ê±, ´ËʱҪ¶ÔÆäËûÒµÎñÖ´Ðв¹³¥ÐÔÊÂÎñ.
Èç¹û²¹³¥²Ù×÷Ö´ÐÐÒ²³öÏÖÒì³£, ±ØÐë½øÐÐÖØÊÔ, ÈôʵÔÚÎÞ·¨Ö´Ðгɹ¦, ÔòÊÂÎñ¹ÜÀíÆ÷±ØÐëÄܹ»¸ÐÖªµ½Ê§°ÜµÄ²Ù×÷,
½øÐÐlog(ÓÃÓÚʺóÈ˹¤½øÐв¹³¥ÐÔÊÂÎñ²Ù×÷»òÕß½»ÓÉÖмä¼þ½Ó¹ÜÔÚÖ®ºó½øÐв¹³¥ÐÔÊÂÎñ²Ù×÷).
Óŵã
¶Ô±ÈÓëÇ°ÃæÌáµ½µÄÁ½½×¶ÎÌá½»·¨, ÓÐÁ½´óÓÅÊÆ:
TCCÄܹ»¶Ô·Ö²¼Ê½ÊÂÎñÖеĸ÷¸ö×ÊÔ´½øÐзֱðËø¶¨, ·Ö±ðÌá½»ÓëÊÍ·Å, ÀýÈç, ¼ÙÉèÓÐABÁ½¸ö²Ù×÷,
¼ÙÉèA²Ù×÷ºÄʱ¶Ì, ÄÇôA¾ÍÄܽϿìµÄÍê³É×ÔÉíµÄtry-confirm-cancelÁ÷³Ì, ÊÍ·Å×ÊÔ´.
ÎÞÐèµÈ´ýB²Ù×÷. Èç¹ûʺó³öÏÖÎÊÌâ, ×·¼ÓÖ´Ðв¹³¥ÐÔÊÂÎñ¼´¿É.
TCCÊǰó¶¨ÔÚ¸÷¸ö×ÓÒµÎñÉϵÄ(³ýÁËcancleÖеÄÈ«¾Ö»Ø¹ö²Ù×÷), Ò²¾ÍÊǸ÷·þÎñÖ®¼ä¿ÉÒÔÔÚÒ»¶¨³Ì¶ÈÉÏ¡±Òì²½²¢ÐС±Ö´ÐÐ.
×¢ÒâÊÂÏî
ÊÂÎñ¹ÜÀíÆ÷(е÷Æ÷)Õâ¸ö½Úµã±ØÐëÒÔ´øÍ¬²½¸´ÖÆÓïÒåµÄ¸ß¿ÉÓü¯Èº(HAC)·½Ê½²¿Êð.
ÊÂÎñ¹ÜÀíÆ÷(е÷Æ÷)»¹ÐèҪʹÓöàÊýÅÉËã·¨À´±ÜÃ⼯Ⱥ·¢ÉúÄÔÁÑÎÊÌâ.
ÊÊÓó¡¾°
ÑϸñÒ»ÖÂÐÔ
Ö´ÐÐʱ¼ä¶Ì
ʵʱÐÔÒªÇó¸ß
¾ÙÀý: ºì°ü, ÊÕ¸¶¿îÒµÎñ.
Ò첽ȷ±£ÐÍ
ͨ¹ý½«Ò»ÏµÁÐͬ²½µÄÊÂÎñ²Ù×÷±äΪ»ùÓÚÏûÏ¢Ö´ÐеÄÒì²½²Ù×÷, ±ÜÃâÁË·Ö²¼Ê½ÊÂÎñÖеÄͬ²½×èÈû²Ù×÷µÄÓ°Ïì.
Õâ¸ö·½°¸ÕæÕýʵÏÖÁËÁ½¸ö·þÎñµÄ½âñî, ½âñîµÄ¹Ø¼ü¾ÍÊÇÒì²½ÏûÏ¢ºÍ²¹³¥ÐÔÊÂÎñ.
ÕâÀïÒÔÒ»¸öÀý×Ó×÷Ϊ½²½â:

Ö´Ðв½ÖèÈçÏÂ:
MQ·¢ËÍ·½·¢ËÍÔ¶³ÌÊÂÎñÏûÏ¢µ½MQ Server;
MQ Server¸øÓèÏìÓ¦, ±íÃ÷ÊÂÎñÏûÏ¢Òѳɹ¦µ½´ïMQ Server.
MQ·¢ËÍ·½Commit±¾µØÊÂÎñ.
Èô±¾µØÊÂÎñCommit³É¹¦, Ôò֪ͨMQ ServerÔÊÐí¶ÔÓ¦ÊÂÎñÏûÏ¢±»Ïû·Ñ; Èô±¾µØÊÂÎñʧ°Ü, Ôò֪ͨMQ
Server¶ÔÓ¦ÊÂÎñÏûÏ¢Ó¦±»¶ªÆú.
ÈôMQ·¢ËÍ·½³¬Ê±Î´¶ÔMQ Server×÷³ö±¾µØÊÂÎñÖ´ÐÐ״̬µÄ·´À¡, ÄÇôÐèÒªMQ ServferÏòMQ·¢ËÍ·½Ö÷¶¯»Ø²éÊÂÎñ״̬,
ÒÔ¾ö¶¨ÊÂÎñÏûÏ¢ÊÇ·ñÄܱ»Ïû·Ñ.
µ±µÃÖª±¾µØÊÂÎñÖ´Ðгɹ¦Ê±, MQ ServerÔÊÐíMQ¶©ÔÄ·½Ïû·Ñ±¾ÌõÊÂÎñÏûÏ¢.
ÐèÒª¶îÍâ˵Ã÷µÄÒ»µã, ¾ÍÊÇÊÂÎñÏûϢͶµÝµ½MQ¶©ÔÄ·½ºó, ²¢²»Ò»¶¨Äܹ»³É¹¦Ö´ÐÐ. ÐèÒªMQ¶©ÔÄ·½Ö÷¶¯¸øÓèÏû·Ñ·´À¡(ack)
Èç¹ûMQ¶©ÔÄ·½Ö´ÐÐÔ¶³ÌÊÂÎñ³É¹¦, Ôò¸øÓèÏû·Ñ³É¹¦µÄack, ÄÇôMQ Server¿ÉÒÔ°²È«½«ÊÂÎñÏûÏ¢ÒÆ³ý;
Èç¹ûÖ´ÐÐʧ°Ü, MQ ServerÐèÒª¶ÔÏûÏ¢ÖØÐÂͶµÝ, Ö±ÖÁÏû·Ñ³É¹¦.
×¢ÒâÊÂÏî
ÏûÏ¢Öмä¼þÔÚϵͳÖаçÑÝÒ»¸öÖØÒªµÄ½ÇÉ«, ËùÓеÄÊÂÎñÏûÏ¢¶¼ÐèҪͨ¹ýËüÀ´´«´ï, ËùÒÔÏûÏ¢Öмä¼þÒ²ÐèÒªÖ§³Ö
HAC À´È·±£ÊÂÎñÏûÏ¢²»¶ªÊ§.
¸ù¾ÝÒµÎñÂß¼µÄ¾ßÌåʵÏÖ²»Í¬£¬»¹¿ÉÄÜÐèÒª¶ÔÏûÏ¢Öмä¼þÔö¼ÓÏûÏ¢²»Öظ´, ²»ÂÒÐòµÈÆäËüÒªÇó.
ÊÊÓó¡¾°
Ö´ÐÐÖÜÆÚ½Ï³¤
ʵʱÐÔÒªÇ󲻸ß
ÀýÈç:
¿çÐÐתÕË/»ã¿îÒµÎñ(Á½¸ö·þÎñ·Ö±ðÔÚ²»Í¬µÄÒøÐÐÖÐ)
ÍË»õ/ÍË¿îÒµÎñ
²ÆÎñ, Õ˵¥Í³¼ÆÒµÎñ(ÏÈ·¢Ë͵½ÏûÏ¢Öмä¼þ, È»ºó½øÐÐÅúÁ¿¼ÇÕË)
×î´óŬÁ¦Í¨ÖªÐÍ
ÕâÊÇ·Ö²¼Ê½ÊÂÎñÖÐÒªÇó×îµÍµÄÒ»ÖÖ, Ò²¿ÉÒÔͨ¹ýÏûÏ¢Öмä¼þʵÏÖ, ÓëÇ°ÃæÒ첽ȷ±£ÐͲÙ×÷²»Í¬µÄÒ»µãÊÇ,
ÔÚÏûÏ¢ÓÉMQ ServerͶµÝµ½Ïû·ÑÕßÖ®ºó, ÔÊÐíÔÚ´ïµ½×î´óÖØÊÔ´ÎÊýÖ®ºóÕý³£½áÊøÊÂÎñ.
ÊÊÓó¡¾°
½»Ò×½á¹ûÏûÏ¢µÄ֪ͨµÈ.
С½á
²»¹ÜÊÇͬ²½ÊÂÎñÖеÄÊÂÎñ¹ÜÀíÆ÷(е÷Õß), »¹ÊÇÒì²½ÊÂÎñÖÐʹÓõÄÏûÏ¢Öмä¼þ£¬ÈôÒª´ïµ½Ò»ÖÂÐÔ±£Ö¤£¬¶¼ÐèҪʹÓôøÓÐͬ²½¸´ÖÆÓïÒåµÄ
HAC ÌṩµÄ¸ß¿ÉÓú͸߿ɿ¿ÌØÐÔ£¬ÕâЩ¶¼ÊÇÒÔÐÔÄÜΪ´ú¼ÛµÄ£¬ÎÞÒɳÉΪÁËSOA ¼Ü¹¹ÖеĵäÐÍÐÔÄÜÆ¿¾±Ö®Ò». |