±à¼ÍƼö: |
ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃǽ«½éÉÜ
ÊÂÎñµÄʵÏÖÔÀí¡¢·Ö²¼Ê½ÊÂÎñµÄÀíÂÛ»ù´¡ÒÔ¼°ÊµÏÖÔÀí¡£
À´×ÔÓÚdraveness.me£¬,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
ÊÂÎñÊÇÊý¾Ý¿âϵͳÖзdz£ÓÐȤҲ·Ç³£ÖØÒªµÄ¸ÅÄËüÊÇÊý¾Ý¿â¹ÜÀíϵͳִÐйý³ÌÖеÄÒ»¸öÂß¼µ¥Ôª£¬ËüÄܹ»±£Ö¤Ò»¸öÊÂÎñÖеÄËùÓвÙ×÷Ҫôȫ²¿Ö´ÐУ¬ÒªÃ´È«²»Ö´ÐУ»ÔÚ
SOA Óë΢·þÎñ¼Ü¹¹´óÐÐÆäµÀµÄ½ñÌ죬ÔÚ·Ö²¼Ê½µÄ¶à¸ö·þÎñÖб£Ö¤ÒµÎñµÄÒ»ÖÂÐÔ¾ÍÐèÒªÎÒÃÇʵÏÖ·Ö²¼Ê½ÊÂÎñ¡£
ÊÂÎñ
ÔÚÎÄÕµĿªÍ·£¬ÎÒÃÇÒѾ˵¹ýÊÂÎñÊÇÊý¾Ý¿â¹ÜÀíϵͳִÐйý³ÌÖеÄÒ»¸öÂß¼µ¥Î»£¬ËüÄܱ£Ö¤Ò»×éÊý¾Ý¿â²Ù×÷Ҫôȫ²¿Ö´ÐУ¬ÒªÃ´È«²»Ö´ÐУ¬ÎÒÃÇÄܹ»Í¨¹ýÊÂÎñ½«Êý¾Ý¿â´ÓÒ»¸ö×´Ì¬Ç¨ÒÆµ½ÁíÒ»¸ö״̬£¬ÔÚÿһ¸ö״̬ÖУ¬Êý¾Ý¿âÖеÄÊý¾Ý¶¼±£³ÖÒ»ÖÂÐÔ¡£

Êý¾Ý¿âÊÂÎñÓµÓÐËĸöÌØÐÔ£¬Ô×ÓÐÔ£¨Atomicity£©¡¢Ò»ÖÂÐÔ£¨Consistency£©¡¢¸ôÀëÐÔ£¨Isolation£©ºÍ³Ö¾ÃÐÔ£¨Durability£©£º

ÎÒÃǾ³£½«ÕâÉÏÊöµÄËÄ´óÌØÐÔ¼òдΪ ACID£¬¶øÊý¾Ý¿âÊÂÎñµÄʵÏÖÔÀíÆäʵҲ¾ÍÊÇʵÏÖÕâËÄ´óÌØÐÔµÄÔÀí¡£
ʵÏÖÔÀí
ÔÚ֮ǰµÄÎÄÕ ¡ºÇ³ÈëÉî³ö¡»MySQL ÖÐÊÂÎñµÄʵÏÖ ÖÐÆäʵÒѾ¶ÔÈçºÎʵÏÖÊÂÎñµÄ ACID Õ⼸¸ö»ù±¾ÊôÐÔ¸ø³öÁ˱ȽÏÏêϸµÄ½éÉܺͷÖÎö£¬ÔÚÕâÀï¾Í¼òµ¥½éÉܼ¸¸ö±È½ÏÖØÒªµÄʵÏÖϸ½Ú£¬¹ØÓÚÕ¹¿ªµÄÄÚÈÝ£¬¿ÉÒÔÔĶÁÉÏÊöÎÄÕ¡£
ÊÂÎñÈÕÖ¾
ΪÁËʵÏÖÈ·±£ÊÂÎñÄÜÔÚÖ´ÐеÄÈÎÒâ¹ý³ÌÖлعö£¨Ô×ÓÐÔ£©²¢ÇÒÌá½»µÄÊÂÎñ»áÓÀ¾Ã±£´æÔÚÊý¾Ý¿âÖУ¬ÎÒÃÇ»áʹÓÃÊÂÎñÈÕÖ¾À´´æ´¢ÊÂÎñÖ´Ðйý³ÌÖеÄÊý¾Ý¿âµÄ±ä¶¯£¬Ã¿Ò»ÌõÊÂÎñÈÕÖ¾Öж¼°üº¬ÊÂÎñµÄ
ID¡¢µ±Ç°±»Ð޸ĵÄÔªËØ¡¢±ä¶¯Ç°ÒÔ¼°±ä¶¯ºóµÄÖµ¡£

µ±ÎÒÃÇÓÐÒÔÉϵÄÊÂÎñÈÕÖ¾Ö®ºó£¬Ò»µ©ÐèÒª¶ÔÊÂÎñ½øÐлعö¾Í·Ç³£ÈÝÒ×ÁË£¬Êý¾Ý¿â»á¸ù¾ÝÉÏÊöÈÕÖ¾Éú³ÉÒ»¸öÏà·´µÄ²Ù×÷»Ö¸´ÊÂÎñ·¢Éú֮ǰµÄ״̬£»ÊÂÎñÈÕÖ¾³ýÁËÄܹ»¶ÔÊÂÎñ½øÐлعö±£Ö¤Ô×ÓÐÔÖ®Í⣬»¹Äܹ»ÊµÏÖ³Ö¾ÃÐÔ£¬µ±Ò»¸öÊÂÎñ³¢ÊÔ¶ÔÊý¾Ý¿â½øÐÐÐÞ¸Äʱ£¬ËüÆäʵ»áÏÈÉú³ÉÒ»ÌõÈÕÖ¾²¢Ë¢Ðµ½´ÅÅÌÉÏ£¬Ð´ÈÕÖ¾µÄ²Ù×÷ÓÉÓÚÊÇ×·¼ÓµÄËùÒԷdz£¿ì£¬ÔÚÕâÖ®ºó²Å»áÏòÊý¾Ý¿âÖÐдÈë»òÕ߸üжÔÓ¦µÄ¼Ç¼¡£
ÔÚ MySQL ×î³£¼ûµÄ´æ´¢ÒýÇæ InnoDB ÖУ¬ÊÂÎñÈÕÖ¾ÆäʵÓÐÁ½ÖÖ£¬Ò»ÖÖÊǻعöÈÕÖ¾£¨undo
log£©£¬ÁíÒ»ÖÖÊÇÖØ×öÈÕÖ¾£¨redo log£©£¬ÆäÖÐǰÕß±£Ö¤ÊÂÎñµÄÔ×ÓÐÔ£¬ºóÕß±£Ö¤ÊÂÎñµÄ³Ö¾ÃÐÔ£¬Á½Õß¿ÉÒÔͳ³ÆÎªÊÂÎñÈÕÖ¾¡£
²¢·¢¿ØÖÆ
Êý¾Ý¿â×÷Ϊ×î¹Ø¼üµÄºó¶Ë·þÎñ£¬ºÜÄÑÏëÏóÖ»ÄÜ´®ÐÐÖ´ÐÐÿһ¸öÊý¾Ý¿â²Ù×÷´øÀ´µÄÐÔÄÜÓ°Ï죬Ȼ¶øÔÚ²¢·¢Ö´ÐÐ SQL
µÄ¹ý³ÌÖоͿÉÄÜÎÞ·¨±£Ö¤Êý¾Ý¿â¶ÔÓÚ¸ôÀëÐÔµÄÒªÇ󣬹é¸ù½áµ×Õâ¾ÍÊÇÒ»ÖÂÐÔ¡¢¸ôÀëÐÔÓëÐÔÄÜÖ®¼äµÄȨºâ¡£

ΪÁ˱ÜÃâ²¢·¢´øÀ´µÄÒ»ÖÂÐÔÎÊÌâ¡¢Âú×ãÊý¾Ý¿â¶ÔÓÚ¸ôÀëÐÔÒªÇó£¬Êý¾Ý¿âϵͳÍùÍù¶¼»áʹÓò¢·¢¿ØÖÆ»úÖÆ¾¡¿ÉÄܵسä·ÖÀûÓûúÆ÷µÄЧÂÊ£¬×î³£¼ûµÄ¼¸ÖÖ²¢·¢¿ØÖÆ»úÖÆ¾ÍÊÇËø¡¢Ê±¼ä´ÁºÍ
MVCC£º

×÷Ϊ±¯¹Û²¢·¢¿ØÖÆ»úÖÆ£¬ËøÊ¹ÓÃÔÚ¸üÐÂ×ÊԴ֮ǰ¶Ô×ÊÔ´½øÐÐËø¶¨µÄ·½Ê½±£Ö¤¶à¸öÊý¾Ý¿âµÄ»á»°Í¬Ê±ÐÞ¸ÄijһÐмǼʱ²»»á³öÏÖÍÑÀëÔ¤ÆÚµÄÐÐΪ£¬¶øÊ±¼ä´ÁÕâÖÖ·½Ê½ÔÚÿ´ÎÌύʱ¶Ô×ÊÔ´ÊÇ·ñ±»¸Ä±ä½øÐмì²é¡£
ÔÚ Ç³Ì¸Êý¾Ý¿â²¢·¢¿ØÖÆ - ËøºÍ MVCC ÖУ¬×÷Õß½éÉܹý¼¸ÖÖ²»Í¬µÄ²¢·¢¿ØÖÆ»úÖÆµÄʵÏÖÔÀí£¬ÏëÒªÁ˽â¸ü¶àÏà¹ØµÄÄÚÈݵĿÉÒÔÔĶÁÕâÆªÎÄÕ¡£
·Ö²¼Ê½ÊÂÎñ
´Ó¹ãÒåÉÏÀ´¿´£¬·Ö²¼Ê½ÊÂÎñÆäʵҲÊÇÊÂÎñ£¬Ö»ÊÇÓÉÓÚÒµÎñÉϵ͍ÒåÒÔ¼°Î¢·þÎñ¼Ü¹¹Éè¼ÆµÄÎÊÌ⣬ËùÒÔÐèÒªÔÚ¶à¸ö·þÎñÖ®¼ä±£Ö¤ÒµÎñµÄÊÂÎñÐÔ£¬Ò²¾ÍÊÇ
ACID ËĸöÌØÐÔ£»´Óµ¥»úµÄÊý¾Ý¿âÊÂÎñ±ä³É·Ö²¼Ê½ÊÂÎñʱ£¬ÔÓе¥»úÖÐÏà¶Ô¿É¿¿µÄ·½·¨µ÷ÓÃÒÔ¼°½ø³Ì¼äͨÐÅ·½Ê½ÒѾûÓа취ʹÓã¬Í¬Ê±ÓÉÓÚÍøÂçͨО³£ÊDz»Îȶ¨µÄ£¬ËùÒÔ·þÎñÖ®¼äÐÅÏ¢µÄ´«µÝ»á³öÏÖÕϰ¡£

Ä£¿é£¨»ò·þÎñ£©Ö®¼äͨÐÅ·½Ê½µÄ¸Ä±äÊÇÔì³É·Ö²¼Ê½ÊÂÎñ¸´ÔÓµÄ×îÖ÷ÒªÔÒò£¬ÔÚͬһ¸öÊÂÎñÖ®¼äµÄÖ´Ðжà¶Î´úÂë»áÒòÎªÍøÂçµÄ²»Îȶ¨Ôì³É¸÷ÖÖÆæ¹ÖµÄÎÊÌ⣬µ±ÎÒÃÇͨ¹ýÍøÂçÇëÇóÆäËû·þÎñµÄ½Ó¿Úʱ£¬ÍùÍù»áµÃµ½ÈýÖÖ½á¹û£ºÕýÈ·¡¢Ê§°ÜºÍ³¬Ê±£¬ÎÞÂÛÊdzɹ¦»¹ÊÇʧ°Ü£¬ÎÒÃǶ¼Äܵõ½Î¨Ò»È·¶¨µÄ½á¹û£¬³¬Ê±´ú±íÇëÇóµÄ·¢ÆðÕß²»ÄÜÈ·¶¨½ÓÊÜÕßÊÇ·ñ³É¹¦´¦ÀíÁËÇëÇó£¬ÕâÒ²ÊÇÔì³ÉÖî¶àÎÊÌâµÄÓÕÒò¡£

ϵͳ֮¼äµÄͨÐſɿ¿ÐÔ´Óµ¥Ò»ÏµÍ³ÖеĿɿ¿±ä³ÉÁË΢·þÎñ¼Ü¹¹Ö®¼äµÄ²»¿É¿¿£¬·Ö²¼Ê½ÊÂÎñÆäʵ¾ÍÊÇÔÚ²»¿É¿¿µÄͨÐÅÏÂʵÏÖÊÂÎñµÄÌØÐÔ¡£ÎÞÂÛÊÇÊÂÎñ»¹ÊÇ·Ö²¼Ê½ÊÂÎñʵÏÖÔ×ÓÐÔ¶¼ÎÞ·¨±ÜÃâ¶Ô³Ö¾Ã´æ´¢µÄÒÀÀµ£¬ÊÂÎñʹÓôÅÅÌÉϵÄÈÕÖ¾¼Ç¼ִÐеĹý³ÌÒÔ¼°ÉÏÏÂÎÄ£¬ÕâÑùÎÞÂÛÊÇÐèÒª»Ø¹ö»¹ÊDz¹³¥¶¼¿ÉÒÔͨ¹ýÈÕÖ¾×·ËÝ£¬¶ø·Ö²¼Ê½ÊÂÎñÒ²»áÒÀÀµÊý¾Ý¿â¡¢Zookeeper
»òÕß ETCD µÈ·þÎñ×·×ÙÊÂÎñµÄÖ´Ðйý³Ì£¬×ܶøÑÔÖ®£¬¸÷ÖÖÐÎʽµÄÈÕÖ¾ÊDZ£Ö¤ÊÂÎñ¼¸´óÌØÐÔµÄÖØÒªÊֶΡ£
2PC Óë 3PC
Á½½×¶ÎÌá½»ÊÇÒ»ÖÖʹ·Ö²¼Ê½ÏµÍ³ÖÐËùÓнڵãÔÚ½øÐÐÊÂÎñÌύʱ±£³ÖÒ»ÖÂÐÔ¶øÉè¼ÆµÄÒ»ÖÖÐÒ飻ÔÚÒ»¸ö·Ö²¼Ê½ÏµÍ³ÖУ¬ËùÓеĽڵãËäÈ»¶¼¿ÉÒÔÖªµÀ×Ô¼ºÖ´ÐвÙ×÷ºóµÄ״̬£¬µ«ÊÇÎÞ·¨ÖªµÀÆäËû½ÚµãÖ´ÐвÙ×÷µÄ״̬£¬ÔÚÒ»¸öÊÂÎñ¿çÔ½¶à¸öϵͳʱ£¬¾ÍÐèÒªÒýÈëÒ»¸ö×÷Ϊе÷ÕßµÄ×é¼þÀ´Í³Ò»ÕÆ¿ØÈ«²¿µÄ½Úµã²¢Ö¸Ê¾ÕâЩ½ÚµãÊÇ·ñ°Ñ²Ù×÷½á¹û½øÐÐÕæÕýµÄÌá½»£¬ÏëÒªÔÚ·Ö²¼Ê½ÏµÍ³ÖÐʵÏÖÒ»ÖÂÐÔµÄÆäËûÐÒé¶¼ÊÇÔÚÁ½½×¶ÎÌá½»µÄ»ù´¡ÉÏ×öµÄ¸Ä½ø¡£

Á½½×¶ÎÌá½»µÄÖ´Ðйý³Ì¾Í¸úËüµÄÃû×ÖÒ»Ñù·ÖΪÁ½¸ö½×¶Î£¬Í¶Æ±½×¶ÎºÍÌá½»½×¶Î£¬ÔÚͶƱ½×¶ÎÖУ¬Ðµ÷Õߣ¨Coordinator£©»áÏòÊÂÎñµÄ²ÎÓëÕߣ¨Cohort£©Ñ¯ÎÊÊÇ·ñ¿ÉÒÔÖ´ÐвÙ×÷µÄÇëÇ󣬲¢µÈ´ýÆäËû²ÎÓëÕßµÄÏìÓ¦£¬²ÎÓëÕß»áÖ´ÐÐÏà¶ÔÓ¦µÄÊÂÎñ²Ù×÷²¢¼ÇÂ¼ÖØ×öºÍ»Ø¹öÈÕÖ¾£¬ËùÓÐÖ´Ðгɹ¦µÄ²ÎÓëÕß»áÏòе÷Õß·¢ËÍ
AGREEMENT »òÕß ABORT ±íʾִÐвÙ×÷µÄ½á¹û¡£

µ±ËùÓеIJÎÓëÕß¶¼·µ»ØÁËÈ·¶¨µÄ½á¹û£¨Í¬Òâ»òÕßÖÕÖ¹£©Ê±£¬Á½½×¶ÎÌá½»¾Í½øÈëÁËÌá½»½×¶Î£¬Ðµ÷Õß»á¸ù¾ÝͶƱ½×¶ÎµÄ·µ»ØÇé¿öÏòËùÓеIJÎÓëÕß·¢ËÍÌá½»»òÕ߻عöµÄÖ¸Áî¡£

µ±ÊÂÎñµÄËùÓвÎÓëÕß¶¼¾ö¶¨Ìá½»ÊÂÎñʱ£¬Ðµ÷Õß»áÏò²ÎÓëÕß·¢ËÍ COMMIT ÇëÇ󣬲ÎÓëÕßÔÚÍê³É²Ù×÷²¢ÊÍ·Å×ÊÔ´Ö®ºóÏòе÷Õß·µ»ØÍê³ÉÏûÏ¢£¬Ðµ÷ÕßÔÚÊÕµ½ËùÓвÎÓëÕßµÄÍê³ÉÏûϢʱ»á½áÊøÕû¸öÊÂÎñ£»ÓëÖ®Ïà·´£¬µ±ÓвÎÓëÕß¾ö¶¨
ABORT µ±Ç°ÊÂÎñʱ£¬Ðµ÷Õß»áÏòÊÂÎñµÄ²ÎÓëÕß·¢ËͻعöÇëÇ󣬲ÎÓëÕß»á¸ù¾Ý֮ǰִÐвÙ×÷ʱµÄ»Ø¹öÈÕÖ¾¶Ô²Ù×÷½øÐлعö²¢Ïòе÷Õß·¢ËÍÍê³ÉµÄÏûÏ¢£¬ÔÚÌá½»½×¶Î£¬ÎÞÂÛµ±Ç°ÊÂÎñ±»Ìá½»»¹Êǻعö£¬ËùÓеÄ×ÊÔ´¶¼»á±»ÊͷŲ¢ÇÒÊÂÎñÒ²Ò»¶¨»á½áÊø¡£
Á½½×¶ÎÌá½»ÐÒéÊÇÒ»¸ö×èÈûÐÒ飬Ҳ¾ÍÊÇ˵ÔÚÁ½½×¶ÎÌá½»µÄÖ´Ðйý³ÌÖУ¬³ý´ËÖ®Í⣬Èç¹ûÊÂÎñµÄÖ´Ðйý³ÌÖÐе÷ÕßÓÀ¾Ãå´»ú£¬ÊÂÎñµÄÒ»²¿·Ö²ÎÓëÕß½«ÓÀÔ¶ÎÞ·¨Íê³ÉÊÂÎñ£¬ËüÃÇ»áµÈ´ýе÷Õß·¢ËÍ
COMMIT »òÕß ROLLBACK ÏûÏ¢£¬ÉõÖÁ»á³öÏÖ¶à¸ö²ÎÓëÕß״̬²»Ò»ÖµÄÎÊÌâ¡£

3PC
ΪÁ˽â¾öÁ½½×¶ÎÌá½»ÔÚÐÒéµÄһЩÎÊÌ⣬Èý½×¶ÎÌá½»ÒýÈëÁ˳¬Ê±»úÖÆºÍ×¼±¸½×¶Î£¬Èç¹ûе÷Õß»òÕß²ÎÓëÕßÔڹ涨µÄÖ®¼äÄÚûÓнÓÊܵ½À´×ÔÆäËû½ÚµãµÄÏìÓ¦£¬¾Í»á¸ù¾Ýµ±Ç°µÄ״̬ѡÔñÌá½»»òÕßÖÕÖ¹Õû¸öÊÂÎñ£¬×¼±¸½×¶ÎµÄÒýÈëÆäʵÈÃÊÂÎñµÄ²ÎÓëÕßÓÐÁ˳ý»Ø¹öÖ®ÍâµÄÆäËûÑ¡Ôñ¡£

µ±²ÎÓëÕßÏòе÷Õß·¢ËÍ ACK ºó£¬Èç¹û³¤Ê±¼äûÓеõ½Ðµ÷ÕßµÄÏìÓ¦£¬ÔÚĬÈÏÇé¿öÏ£¬²ÎÓëÕß»á×Ô¶¯½«³¬Ê±µÄÊÂÎñ½øÐÐÌá½»£¬²»»áÏñÁ½½×¶ÎÌá½»Öб»×èÈûס£»ÉÏÊöµÄͼƬ·Ç³£Çå³þµØËµÃ÷ÁËÔÚ²»Í¬½×¶Î£¬Ðµ÷Õß»òÕß²ÎÓëÕߵij¬Ê±»áÔì³ÉʲôÑùµÄÐÐΪ¡£
XA ÊÂÎñ
MySQL µÄ InnoDB ÒýÇæÆäʵÄܹ»Ö§³Ö·Ö²¼Ê½ÊÂÎñ£¬Ò²¾ÍÊÇÎÒÃǾ³£ËµµÄ XA ÊÂÎñ£»XA ÊÂÎñ¾ÍÊÇÓÃÁËÎÒÃÇÔÚÉÏÒ»½ÚÖÐÌáµ½µÄÁ½½×¶ÎÌá½»ÐÒéʵÏÖ·Ö²¼Ê½ÊÂÎñ£¬ÆäÖÐÊÂÎñ¹ÜÀíÆ÷Ϊе÷Õߣ¬¶ø×ÊÔ´¹ÜÀíÆ÷¾ÍÊÇ·Ö²¼Ê½ÊÂÎñµÄ²ÎÓëÕß¡£

µ½ÕâÀÆäʵÎÒÃÇÒѾÄܹ»ÇåÎúµØÖªµÀ MySQL ÖÐµÄ XA ÊÂÎñÊÇÈçºÎʵÏֵģº
×ÊÔ´¹ÜÀíÆ÷ÌṩÁË·ÃÎÊÊÂÎñ×ÊÔ´µÄÄÜÁ¦£¬Êý¾Ý¿â¾ÍÊÇÒ»ÖÖ³£¼ûµÄ×ÊÔ´¹ÜÀíÆ÷£¬ËüÄܹ»Ìá½»»òÕ߻عöÆä¹ÜÀíµÄÊÂÎñ£»
ÊÂÎñ¹ÜÀíÆ÷е÷Õû¸ö·Ö²¼Ê½ÊÂÎñµÄ¸÷¸ö²¿·Ö£¬ËüÓë¶à¸ö×ÊÔ´¹ÜÀíÆ÷ͨÐÅ£¬·Ö±ð´¦ÀíËûÃǹÜÀíµÄÊÂÎñ£¬ÕâЩÊÂÎñ¶¼ÊÇÕûÌåÊÂÎñµÄÒ»¸ö·ÖÖ§¡£

ÕýÈçÁ½½×¶ÎÌá½»ÐÒéÖж¨ÒåµÄ£¬MySQL ÌṩµÄ XA ½Ó¿Ú¿ÉÒԷdz£·½±ãµØÊµÏÖÐÒéÖеÄͶƱºÍÌá½»½×¶Î£¬ÎÒÃÇ¿ÉÒÔͨ¹ýһϵÄÁ÷³Ìͼ¼òµ¥Àí½âÒ»ÏÂ
MySQL XA µÄ½Ó¿ÚÊÇÈçºÎʹÓõģº

XA ȷʵÄܹ»±£Ö¤½ÏÇ¿µÄÒ»ÖÂÐÔ£¬µ«ÊÇÔÚ MySQL XA µÄÖ´Ðйý³ÌÖлá¶ÔÏàÓ¦µÄ×ÊÔ´¼ÓËø£¬×èÈûÆäËûÊÂÎñ¶Ô¸Ã×ÊÔ´µÄ·ÃÎÊ£¬Èç¹ûÊÂÎñ³¤Ê±¼äûÓÐ
COMMIT »òÕß ROLLBACK£¬Æäʵ»á¶ÔÊý¾Ý¿âÔì³É±È½ÏÑÏÖØµÄÓ°Ïì¡£
Saga
Á½½×¶ÎÌá½»Æäʵ¿ÉÒÔ±£Ö¤ÊÂÎñµÄǿһÖÂÐÔ£¬µ«ÊÇÔںܶàÒµÎñ³¡¾°Ï£¬ÎÒÃÇÆäʵֻÐèÒª±£Ö¤ÒµÎñµÄ×îÖÕÒ»ÖÂÐÔ£¬ÔÚÒ»¶¨µÄʱ¼ä´°¿ÚÄÚ£¬¶à¸öϵͳÖеÄÊý¾Ý²»Ò»ÖÂÊÇ¿ÉÒÔ½ÓÊܵģ¬ÔÚ¹ýÁËʱ¼ä´°¿ÚÖ®ºó£¬ËùÓÐϵͳ¶¼»á·µ»ØÒ»ÖµĽá¹û¡£
Saga Æäʵ¾ÍÒ»ÖÖ¼ò»¯µÄ·Ö²¼Ê½ÊÂÎñ½â¾ö·½°¸£¬Ëü½«Ò»ÏµÁеķֲ¼Ê½²Ù×÷ת»¯³ÉÁËһϵÁеı¾µØÊÂÎñ£¬ÔÚÿһ¸ö±¾µØÊÂÎñÖÐÎÒÃǶ¼»á¸üÐÂÊý¾Ý¿â²¢ÇÒÏò¼¯ÈºÖÐµÄÆäËû·þÎñ·¢ËÍÒ»ÌõµÄеÄÏûÏ¢À´´¥·¢ÏÂÒ»¸ö±¾µØµÄÊÂÎñ£»Ò»µ©±¾µØµÄÊÂÎñÒòΪΥ·´ÁËÒµÎñÂß¼¶øÊ§°Ü£¬ÄÇô¾Í»áÁ¢¿Ì´¥·¢Ò»ÏµÁеĻعö²Ù×÷À´³·»ØÖ®Ç°±¾µØÊÂÎñÔì³ÉµÄ¸±×÷Óá£
LLT
Ïà±ÈÓÚ±¾µØµÄÊý¾Ý¿âÊÂÎñÀ´Ëµ£¬³¤ÊÂÎñ£¨Long Lived Transaction£©»á¶ÔһЩÊý¾Ý¿â×ÊÔ´³ÖÓÐÏà¶Ô½Ï³¤µÄÒ»¶Îʱ¼ä£¬Õâ»áÑÏÖØµØÓ°ÏìÆäËûÕý³£Êý¾Ý¿âÊÂÎñµÄÖ´ÐУ¬ÎªÁ˽â¾öÕâÒ»ÎÊÌ⣬Hector
Garcia-Molina ºÍ Kenneth Salem ÔÚ 1987 ·¢²¼ÁËÂÛÎÄ Sagas ÓÃÓÚ½â¾öÕâÒ»ÎÊÌâ¡£
Èç¹ûÒ»¸ö LLT Äܹ»±»¸Äд³ÉһϵÁеÄÏ໥½»´íÖØµþµÄ¶à¸öÊý¾Ý¿âÊÂÎñ£¬ÄÇôÕâ¸ö LLT ¾ÍÊÇÒ»¸ö Saga£»Êý¾Ý¿âϵͳÄܹ»±£Ö¤
Saga ÖÐһϵÁеÄÊÂÎñҪôȫ²¿³É¹¦Ö´ÐС¢ÒªÃ´ËüÃǵIJ¹³¥ÊÂÎñÄܹ»»Ø¹öÈ«²¿µÄ¸±×÷Ó㬱£Ö¤Õû¸ö·Ö²¼Ê½ÊÂÎñµÄ×îÖÕÒ»ÖÂÐÔ¡£Saga
µÄ¸ÅÄîºÍËüµÄʵÏÖ¶¼ÊǷdz£¼òµ¥µÄ£¬µ«ÊÇËüÈ´Äܹ»ÓкܴóµÄDZÁ¦Ôö¼ÓÕû¸öϵͳµÄ´¦ÀíÄÜÁ¦¡£

ÊÂÎñÔ½³¤²¢ÇÒÔ½¸´ÔÓ£¬ÄÇôÕâ¸öÊÂÎñÓÉÓÚÒì³£¶ø±»»Ø¹öÒÔ¼°ËÀËøµÄ¿ÉÄÜÐԾͻáÖð½¥Ôö¼Ó£¬Saga »á½«Ò»¸ö
LLT ·Ö½â³É¶à¸ö¶ÌÊÂÎñ£¬Äܹ»·Ç³£Ã÷ÏԵؽµµÍÊÂÎñ±»»Ø¹öµÄ·çÏÕ¡£
ÐͬÓë±àÅÅ
µ±ÎÒÃÇʹÓà Saga ģʽ¿ª·¢·Ö²¼Ê½ÊÂÎñʱ£¬ÓÐÁ½ÖÖе÷²»Í¬·þÎñµÄ·½Ê½£¬Ò»ÖÖÊÇÐͬ£¨Choreography£©£¬ÁíÒ»ÖÖÊDZàÅÅ£¨Orchestration£©£º

Èç¹û¶ÔÓÚÒ»¸ö·Ö²¼Ê½ÊÂÎñ£¬ÎÒÃDzÉÓÃÐͬµÄ·½Ê½½øÐпª·¢£¬Ã¿Ò»¸ö±¾µØµÄÊÂÎñ¶¼»á´¥·¢Ò»¸öÆäËû·þÎñÖеı¾µØÊÂÎñµÄÖ´ÐУ¬Ò²¾ÍÊÇ˵ÊÂÎñµÄÖ´Ðйý³ÌÊÇÒ»¸öÁ÷µÄÐÎʽ½øÐеģº

µ±ÎÒÃÇÑ¡ÔñʹÓÃÐͬµÄ·½Ê½´¦ÀíÊÂÎñʱ£¬·þÎñÖ®¼äµÄͨÐÅÆäʵ¾ÍÊÇͨ¹ýʼþ½øÐеģ¬Ã¿Ò»¸ö±¾µÄÊÂÎñ×îÖÕ¶¼»áÏò·þÎñµÄÏÂÓη¢ËÍÒ»¸öеÄʼþ£¬¼È¿ÉÒÔÊÇÏûÏ¢¶ÓÁÐÖеÄÏûÏ¢£¬Ò²¿ÉÒÔÊÇ
RPC µÄÇëÇó£¬Ö»ÊÇÏÂÓÎÌṩµÄ½Ó¿ÚÐèÒª±£Ö¤ÃݵȺÍÖØÈë¡£
³ý´ËÖ®Í⣬ͨ¹ýÐͬ·½Ê½´´½¨µÄ·Ö²¼Ê½ÊÂÎñÆäʵ²¢Ã»ÓÐÃ÷ÏÔµÄÖÐÐÄ»¯½Úµã£¬¶à¸ö·þÎñ²ÎÓëÕßÖ®¼äµÄ½»»¥ÐÒéÒª´ÓÈ«¾ÖÀ´¶¨Ò壬ÿ¸ö·þÎñÄܹ»´¦ÀíÒÔ¼°·¢Ë͵ÄʼþºÍ½Ó¿Ú¶¼ÐèÒª½øÐбȽÏÑϽ÷µÄÉè¼Æ£¬¾¡¿ÉÄÜÌṩ³éÏó³Ì¶È¸ßµÄʼþ»òÕß½Ó¿Ú£¬ÕâÑù¸÷¸ö·þÎñ²ÅÄÜʵÏÖ×ÔÖβ¢ÖØÓÃÒÑÓеĴúÂëºÍÂß¼¡£
Èç¹ûÎÒÃDz»ÏëʹÓÃÐͬµÄ·½Ê½¶Ô·Ö²¼Ê½ÊÂÎñ½øÐд¦Àí£¬ÄÇôҲ¿ÉÒÔÑ¡Ôñ±àÅŵķ½Ê½ÊµÏÖ·Ö²¼Ê½ÊÂÎñ£¬±àÅŵķ½Ê½ÒýÈëÁËÖÐÐÄ»¯µÄе÷Æ÷½Úµã£¬ÎÒÃÇͨ¹ýÒ»¸ö
Saga ¶ÔÏóÀ´×·×ÙËùÓеÄ×ÓÈÎÎñµÄµ÷ÓÃÇé¿ö£¬¸ù¾ÝÈÎÎñµÄµ÷ÓÃÇé¿ö¾ö¶¨ÊÇ·ñÐèÒªµ÷ÓöÔÓ¦µÄ²¹³¥·½°¸£¬²¢ÔÚÍøÂçÇëÇó³öÏÖ³¬Ê±Ê±½øÐÐÖØÊÔ£º

ÔÚÕâÀïÎÒÃǾÍÒýÈëÁËÒ»¸öÖÐÐÄ»¯µÄ¡ºÐµ÷Æ÷¡»£¬Ëü»á±£´æµ±Ç°·Ö²¼Ê½ÊÂÎñ½øÐе½µ×µÄ״̬£¬²¢¸ù¾ÝÇé¿ö¶ÔÊÂÎñ½øÐлعö»òÕßÌá½»²Ù×÷£¬ÔÚ·þÎñ±àÅŵĹý³ÌÖУ¬ÎÒÃÇÊÇ´Óе÷Õß±¾Éí´¥·¢¿¼ÂÇÕû¸öÊÂÎñµÄÖ´Ðйý³ÌµÄ£¬Ïà¶ÔÓÚÐͬµÄ·½Ê½£¬±àÅÅʵÏֵĹý³ÌÏà¶ÔÀ´Ëµ¸üΪ¼òµ¥¡£
ÐͬÓë±àÅÅÆäʵÊÇÁ½ÖÖ˼·½ØÈ»Ïà·´µÄģʽ£¬Ç°ÕßÇ¿µ÷¸÷¸ö·þÎñµÄ×ÔÖÎÓëÈ¥ÖÐÐÄ»¯£¬ºóÕßÐèÒªÒ»¸öÖÐÐÄ»¯µÄ×é¼þ¶ÔÊÂÎñÖ´ÐеĹý³Ì½øÐÐͳһµÄ¹ÜÀí£¬Á½ÕßµÄÓÅȱµãÆäʵ¾ÍÊÇÖÐÐÄ»¯ÓëÈ¥ÖÐÐÄ»¯µÄÓÅȱµã£¬ÖÐÐÄ»¯µÄ·½°¸ÍùÍù¶¼»áÔì¾ÍÒ»¸ö¡ºÉϵ۷þÎñ¡»£¬ÆäÖаüº¬Á˷dz£¶à×éÖ¯Ó뼯³ÉÆäËû½ÚµãµÄ¹¤×÷£¬Ò²»áÓе¥µã¹ÊÕϵÄÎÊÌ⣬¶øÈ¥ÖÐÐÄ»¯µÄ·½°¸¾Í»á´øÀ´¹ÜÀíÒÔ¼°µ÷ÊÔÉϵIJ»±ã£¬µ±ÎÒÃÇÐèҪ׷×ÙÒ»¸öÒµÎñµÄÖ´Ðйý³Ìʱ¾ÍÐèÒª¿çÔ½¶à¸ö·þÎñ½øÐУ¬Ôö¼ÓÁËά»¤µÄ³É±¾¡£
ÏÂÓÎÔ¼Êø
µ±ÎÒÃÇÑ¡ÔñʹÓà Saga ¶Ô·Ö²¼Ê½ÊÂÎñ½øÐпª·¢Ê±£¬»á¶Ô·Ö²¼Ê½ÊÂÎñµÄ²ÎÓëÕßÓÐÒ»¶¨µÄÔ¼Êø£¬Ã¿Ò»¸öÊÂÎñµÄ²ÎÓëÕß¶¼ÐèÒª±£Ö¤£º
Ìṩ½Ó¿ÚºÍ²¹³¥¸±×÷ÓõĽӿڣ»
½Ó¿ÚÖ§³ÖÖØÈ벢ͨ¹ýÈ«¾ÖΨһµÄ ID ±£Ö¤Ãݵȣ»
ÕâÑùÎÒÃǾÍÄܹ»±£Ö¤Ò»¸ö³¤ÊÂÎñÄܹ»ÔÚÍøÂçͨÐÅ·¢Éú³¬Ê±Ê±½øÐÐÖØÊÔ£¬Í¬Ê±ÔÚÐèÒª¶ÔÊÂÎñ½øÐлعöʱµ÷Óûعö½Ó¿Ú´ïµ½ÎÒÃǵÄÄ¿µÄ¡£
С½á
Saga ÕâÖÖģʽÆäʵÍêÈ«·ÅÆúÁËͬʱÂú×ãÊÂÎñËÄ´ó»ù±¾ÌØÐÔ ACID µÄÏë·¨£¬¶øÊÇÑ¡Ôñ½µµÍʵÏÖ·Ö²¼Ê½ÊÂÎñµÄÄѶȲ¢¼õÉÙ×ÊԴͬ²½ÒÔ¼°Ëø¶¨´øÀ´µÄÎÊÌ⣬ѡÔñʵÏÖ
BASE(Basic Availability, Soft, Eventual consistency)
ÊÂÎñ£¬´ïµ½ÒµÎñÉϵĻù±¾¿ÉÓÃÒÔ¼°×îÖÕÒ»ÖÂÐÔ£¬ÔÚ¾ø´ó¶àÊýµÄÒµÎñ³¡¾°ÖУ¬ÊµÏÖ×îÖÕÒ»ÖÂÐÔ¾ÍÄܹ»»ù±¾Âú×ãÒµÎñµÄÈ«²¿ÐèÇ󣬼«¶Ë³¡¾°Ï»¹ÊÇÓ¦¸ÃÑ¡ÔñÁ½½×¶ÎÌá½»»òÕ߸ɴà·ÅÆú·Ö²¼Ê½ÊÂÎñÕâÖÖÒ×´íµÄʵÏÖ·½Ê½£¬×ª¶øÊ¹Óõ¥»úÖеÄÊý¾Ý¿âÊÂÎñÀ´½â¾ö¡£
ÏûÏ¢·þÎñ
·Ö²¼Ê½ÊÂÎñ´øÀ´¸´ÔӶȵÄÔÒòÆäʵ¾ÍÊÇÓÉÓÚ¸÷¸öÄ£¿éÖ®¼äµÄͨÐŲ»Îȶ¨£¬µ±ÎÒÃÇ·¢³öÒ»¸öÍøÂçÇëÇóʱ£¬¿ÉÄܵķµ»Ø½á¹ûÊdzɹ¦¡¢Ê§°Ü»òÕß³¬Ê±¡£

ÍøÂçÎÞÂÛÊÇ·µ»Ø³É¹¦»¹ÊÇʧ°ÜÆäʵ¶¼ÊÇÒ»¸öÈ·¶¨µÄ½á¹û£¬µ±ÍøÂçÇëÇó³¬Ê±µÄʱºòÆäʵ·Ç³£²»ºÃ´¦Àí£¬ÔÚÕâʱµ÷Ó÷½²¢²»ÄÜÈ·¶¨ÕâÒ»´ÎÇëÇóÊÇ·ñËÍ´ï¶øÇÒ²»»áÖªµÀÇëÇóµÄ½á¹û£¬µ«ÊÇÏûÏ¢·þÎñ¿ÉÒÔ±£Ö¤Ä³ÌõÐÅÏ¢Ò»¶¨»áËÍ´ïµ½µ÷Ó÷½£»´ó¶àÊýÏûÏ¢·þÎñ¶¼»áÌṩÁ½ÖÖ²»Í¬µÄ
QoS£¬Ò²¾ÍÊÇ·þÎñµÄµÈ¼¶¡£

×î³£¼ûµÄÁ½ÖÖ·þÎñµÈ¼¶¾ÍÊÇ At-Most-Once ºÍ At-Least-Once£¬Ç°ÕßÄܹ»±£Ö¤·¢ËÍ·½²»¶Ô½ÓÊÕ·½ÊÇ·ñÄÜÊÕµ½ÏûÏ¢×÷±£Ö¤£¬ÏûϢҪô»á±»Í¶µÝÒ»´Î£¬ÒªÃ´²»»á±»Í¶µÝ£¬ÕâÆäʵ¸úÒ»´ÎÆÕͨµÄÍøÂçÇëÇóûÓÐÌ«¶àµÄÇø±ð£»At-Least-Once
Äܹ»½â¾öÏûϢͶµÝʧ°ÜµÄÎÊÌ⣬ËüÒªÇó·¢ËÍÕß¼ì²éͶµÝµÄ½á¹û£¬²¢ÔÚʧ°Ü»òÕß³¬Ê±Ê±ÖØÐ¶ÔÏûÏ¢½øÐÐͶµÝ£¬·¢ËÍÕß»á³ÖÐø¶ÔÏûÏ¢½øÐÐÍÆËÍ£¬Ö±µ½½ÓÊÜÕßÈ·ÈÏÏûÏ¢ÒѾ±»ÊÕµ½£¬Ïà±ÈÓÚ
At-Most-Once£¬At-Least-Once ÒòΪÄܹ»È·±£ÏûÏ¢µÄͶµÝ»á±»¸ü¶àÈËʹÓá£
³ýÁËÕâÁ½ÖÖ³£¼ûµÄ·þÎñµÈ¼¶Ö®Í⣬»¹ÓÐÁíÒ»ÖÖ·þÎñµÈ¼¶£¬Ò²¾ÍÊÇ Exactly-Once£¬ÕâÖÖ·þÎñµÈ¼¶²»½ö¶Ô·¢ËÍÕßÌá³öÁËÒªÇ󣬻¹¶ÔÏû·ÑÕßÌá³öÁËÒªÇó£¬ËüÐèÒª½ÓÊÜÕß¶Ô½ÓÊÕµ½µÄËùÓÐÏûÏ¢½øÐÐÈ¥ÖØ£¬·¢ËÍÕߺͽÓÊÜÕßÒ»·½¶ÔÏûÏ¢½øÐÐÖØÊÔ£¬ÁíÒ»·½¶ÔÏûÏ¢½øÐÐÈ¥ÖØ£¬Á½Õß·Ö±ð²¿ÊðÔÚ²»Í¬µÄ½ÚµãÉÏ£¬ÕâÑù¶ÔÓÚ¸÷¸ö½ÚµãÉϵķþÎñÀ´Ëµ£¬ËüÃÇÖ®¼äµÄͨОÍÊÇ
Exactly-Once µÄ£¬µ«ÊÇÐèҪעÒâµÄÊÇ£¬Exacly-Once Ò»¶¨ÐèÒª½ÓÊÕ·½µÄ²ÎÓë¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýʵÏÖ AMQP ÐÒéµÄÏûÏ¢¶ÓÁÐÀ´ÊµÏÖ·Ö²¼Ê½ÊÂÎñ£¬ÔÚÐÒéµÄ±ê×¼Öж¨ÒåÁË tx_select¡¢tx_commit
ºÍ tx_rollback Èý¸öÊÂÎñÏà¹ØµÄ½Ó¿Ú£¬ÆäÖÐ tx_select Äܹ»¿ªÆôÊÂÎñ£¬tx_commit
ºÍ tx_rollback ·Ö±ðÄܹ»Ìá½»»òÕ߻عöÊÂÎñ¡£
ʹÓÃÏûÏ¢·þÎñʵÏÖ·Ö²¼Ê½ÊÂÎñÔڵײãµÄÔÀíÉÏÓëÆäËûµÄ·½·¨Ã»ÓÐÌ«¶àµÄ²î±ð£¬Ö»ÊÇÏûÏ¢·þÎñÄܹ»°ïÖúÎÒÃÇʵÏÖµÄÏûÏ¢µÄ³Ö¾Ã»¯ÒÔ¼°ÖØÊԵȹ¦ÄÜ£¬Äܹ»ÎªÎÒÃÇÌṩһ¸ö±È½ÏºÏÀíµÄ
API ½Ó¿Ú£¬·½±ã¿ª·¢ÕßʹÓá£
×ܽá
·Ö²¼Ê½ÊÂÎñµÄʵÏÖ·½Ê½ÊÇ·Ö²¼Ê½ÏµÍ³Öзdz£ÖØÒªµÄÒ»¸öÎÊÌ⣬ÔÚ΢·þÎñ¼Ü¹¹ºÍ SOA ´óÐÐÆäµÀµÄ½ñÌì£¬ÕÆÎÕ·Ö²¼Ê½ÊÂÎñµÄÔÀíºÍʹÓ÷½Ê½ÒѾÊÇ×÷Ϊºó¶Ë¿ª·¢ÕßÀíËùÓ¦µ±ÕÆÎյļ¼ÄÜ£¬´ÓʵÏÖ
ACID ÊÂÎñµÄ 2PC Óë 3PC µ½ÊµÏÖ BASE ²¹³¥Ê½ÊÂÎñµÄ Saga£¬ÔÙµ½×îºóͨ¹ýÊÂÎñÏûÏ¢µÄ·½Ê½Òì²½µØ±£Ö¤ÏûÏ¢×îÖÕÒ»¶¨»á±»Ïû·Ñ³É¹¦£¬ÎÒÃÇΪÁËÔö¼ÓϵͳµÄÍÌÍÂÁ¿ÒÔ¼°¿ÉÓÃÐÔÖð½¥½µµÍÁËϵͳ¶ÔÒ»ÖÂÐÔµÄÒªÇó¡£
ÔÚÒµÎñûÓжÔÒ»ÖÂÐÔÓÐÄÇôǿµÄÐèÇóʱ£¬×÷ÕßÒ»°ã»áʹÓà Saga ÐÒé¶Ô·Ö²¼Ê½ÊÂÎñ½øÐÐÉè¼ÆºÍ¿ª·¢£¬¶øÔÚʵ¼Ê¹¤×÷ÖУ¬ÐèҪǿһÖÂÐÔÊÂÎñµÄÒµÎñ³¡¾°¼¸ºõûÓУ¬ÎÒÃǶ¼¿ÉÒÔʵÏÖ×îÖÕÒ»ÖÂÐÔ£¬ÔÚ·¢ÉúÄÔÁÑ»òÕß²»Ò»ÖÂÎÊÌâʱͨ¹ý²¹³¥µÄ·½Ê½½øÐнâ¾ö£¬Õâ¾ÍÄܽâ¾ö¼¸ºõÈ«²¿µÄÎÊÌâ¡£
|