±à¼ÍƼö: |
±¾ÆªÄÚÈÝÖ÷ÒªÌÖÂÛµÄÊǶ¨ÒåÒ»¸ö³äÖµÐèÇó£¬ÎÒÃÇÔÚ¸÷¸öʵÏÖÖÐÈçºÎΪ¸ÃÐèÇóʵÏÖ·Ö²¼Ê½ÊÂÎñ£¬Ï£Íû±¾ÎĶԴó¼ÒÓаïÖú
¡£
À´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
ÐèÇóÔµÆð
ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬Ëæ×Å·þÎñµÄÖð²½²ð·Ö£¬Êý¾Ý¿â˽ÓÐÒѾ³ÉΪ¹²Ê¶£¬ÕâÒ²µ¼ÖÂËùÃæÁٵķֲ¼Ê½ÊÂÎñÎÊÌâ³ÉΪ΢·þÎñÂ䵨¹ý³ÌÖÐÒ»¸ö·Ç³£ÄÑÒÔÓâÔ½µÄÕϰ£¬µ«ÊÇĿǰÉÐûÓÐÒ»¸öÍêÕûͨÓõĽâ¾ö·½°¸¡£
Æäʵ²»½ö½öÊÇÔÚ΢·þÎñ¼Ü¹¹ÖУ¬Ëæ×ÅÓû§·ÃÎÊÁ¿µÄÖð½¥ÉÏÕÇ£¬Êý¾Ý¿âÉõÖÁÊÇ·þÎñµÄ·ÖƬ¡¢·ÖÇø¡¢Ë®Æ½²ð·Ö¡¢´¹Ö±²ð·ÖÒѾÖð½¥³ÉΪ½ÏΪ³£ÓõÄÌáÉýÆ¿¾±µÄ½â¾ö·½°¸£¬Òò´ËÔ½À´Ô½¶àµÄÔ×Ó²Ù×÷±ä³ÉÁË¿ç¿âÉõÖÁÊÇ¿ç·þÎñµÄÊÂÎñ²Ù×÷¡£×îÖÕ½á¹ûÊÇÔÚ¶Ô¸ßÐÔÄÜ¡¢¸ßÀ©Õ¹ÐÔ£¬¸ß¿ÉÓÃÐÔµÄ×·ÇóµÄµÀ·ÉÏ£¬ÎÒÃÇ¿ªÊ¼Öð½¥·ÅËɶÔÒ»ÖÂÐÔµÄ×·Ç󣬵«ÊÇÔںܶೡ¾°Ï£¬ÓÈÆäÊÇÕËÎñ£¬µçÉ̵ÈÒµÎñÖУ¬²»¿É±ÜÃâµÄ´æÔÚ×ÅÒ»ÖÂÐÔÎÊÌ⣬ʹµÃÎÒÃDz»µÃ²»È¥Ì½Ñ°Ò»ÖÖ»úÖÆ£¬ÓÃÒÔÔÚ·Ö²¼Ê½»·¾³Öб£Ö¤ÊÂÎñµÄÒ»ÖÂÐÔ
ÀíÂÛ»ùʯ
2PC
̸µ½·Ö²¼Ê½ÊÂÎñ£¬Ê×ÏÈҪ˵µÄ¾ÍÊÇ 2PC£¨two phase commit£©·½°¸£¬ÈçÏÂͼËùʾ£º

2PC °ÑÊÂÎñµÄÖ´ÐзÖΪÁ½¸ö½×¶Î£¬µÚÒ»¸ö½×¶Î¼´ prepare ½×¶Î£¬Õâ¸ö½×¶Îʵ¼ÊÉϾÍÊÇͶƱ½×¶Î£¬Ðµ÷ÕßÏò²ÎÓëÕßÈ·ÈÏÊÇ·ñ¿ÉÒÔ¹²Í¬Ìá½»£¬Ôٵõ½È«²¿²ÎÓëÕßµÄËùÓлشðºó£¬Ðµ÷ÕßÏòËùÓеIJÎÓëÕß·¢²¼¹²Í¬Ìá½»»òÕß¹²Í¬»Ø¹öµÄÖ¸ÁÓÃÒÔ±£Ö¤ÊÂÎñ´ïµ½Ò»ÖÂÐÔ¡£
2PC ÊǼ¸ºõËùÓзֲ¼Ê½ÊÂÎñËã·¨µÄ»ù´¡£¬ºóÐøµÄ·Ö²¼Ê½ÊÂÎñËã·¨¼¸ºõ¶¼Óɴ˸Ľø¶øÀ´¡£
ÐèÇóÑùÀý
ÕâÀïÎÒÃǶ¨ÒåÒ»¸ö³äÖµÐèÇ󣬺óÐøÎÒÃÇÔÚ¸÷¸öʵÏÖÖп´¿´ÈçºÎΪ¸ÃÐèÇóʵÏÖ·Ö²¼Ê½ÊÂÎñ¡£

Order ºÍ Account ·Ö±ðÊǶÀÁ¢µÄÒ»¸ö·þÎñ£¬³äÖµÍê³Éºó£¬Òª·Ö±ð½«¶©µ¥Order ÉèÖÃΪ³É¹¦ÒÔ¼°Ôö¼ÓÓû§Óà¶î¡£
ʵÏÖ1 Seata
½éÉÜ & ¿ò¼Ü
Seata£¨Fescar£© is a distributed transaction solution
with high performance and ease of use for microservices
architecture.
°¢À↑Դ£¬ÆäÌØµãÊÇÓÃÒ»¸öÊÂÎñ¹ÜÀíÆ÷£¬À´¹ÜÀíÿ¸ö·þÎñµÄÊÂÎñ£¬±¾ÖÊÉÏÊÇ 2PC£¨ºóÎÄ»á½âÊÍ£© µÄÒ»ÖÖʵÏÖ¡£
Seata ÌṩÁËÈ«¾ÖµÄÊÂÎñ¹ÜÀíÆ÷

ÔÀí
Fescar¹Ù·½½éÉÜ
FescarÈ«¾ÖËøµÄÀí½â
´úÀí SQL ²éѯ£¬ÊµÏÖÊÂÎñ¹ÜÀí£¬ÀàËÆÖмä¼þ
ʵÏÖ³äÖµÐèÇó
Óø÷½°¸ÊµÏÖÐèÇóµÄ»°£¬¾ÍÊÇÕâÑùµÄ£º

Order ºÍ Account ¶¼½ÓÈë Seata À´´úÀíÊÂÎñ
´úÂëʾÀý
±ÈÆð×Ô¼ºÈ¥ÊµÏÖ 2PC£¬Seata ÌṩÁ˼ò»¯·½°¸£¬´úÂëʵÀý¼û £º
Seata Samples
ʵÏÖ2 TCC
½éÉÜ
TCC(Try-Confirm-Concel) Ä£ÐÍÊÇÒ»ÖÖ²¹³¥ÐÔÊÂÎñ£¬Ö÷Òª·ÖΪ Try£º¼ì²é¡¢±£Áô×ÊÔ´£¬Confirm£ºÖ´ÐÐÊÂÎñ£¬Concel£ºÊÍ·Å×ÊÔ´Èý¸ö½×¶Î£¬ÈçÏÂͼËùʾ£º

ÆäÖУ¬»î¶¯¹ÜÀíÆ÷¼Ç¼ÁËÈ«¾ÖÊÂÎñµÄÍÆ½ø×´Ì¬ÒÔ¼°¸÷×ÓÊÂÎñµÄÖ´ÐÐ״̬£¬¸ºÔðÍÆ½ø¸÷¸ö×ÓÊÂÎñ¹²Í¬½øÐÐÌá½»»òÕ߻عö¡£Í¬Ê±¸ºÔðÔÚ×ÓÊÂÎñ´¦Àí³¬Ê±ºó²»Í£ÖØÊÔ£¬ÖØÊÔ²»³É¹¦ºóתÊÖ¹¤´¦Àí£¬ÓÃÒÔ±£Ö¤ÊÂÎñµÄ×îÖÕÒ»ÖÂÐÔ¡£
ÔÀí
ÿ¸ö×ӽڵ㣬ҪʵÏÖ TCC ½Ó¿Ú£¬²ÅÄܱ»¹ÜÀí¡£
Óŵ㣺²»ÒÀÀµ local transaction£¬¿ÉÒÔ¹ÜÀí·Ç¹ØÏµÊý¾Ý¿â¿âµÄ·þÎñ
ȱµã£ºTCC ģʽ¶àÔö¼ÓÁËÒ»¸ö״̬£¬µ¼ÖÂÔÚÒµÎñ¿ª·¢¹ý³ÌÖУ¬¸´ÔÓ¶ÈÉÏÉý£¬¶øÇÒе÷Æ÷Óë×ÓÊÂÎñµÄͨÐŹý³ÌÔö¼Ó£¬×´Ì¬ÂÖת´¦ÀíÒ²¸üΪ¸´ÔÓ¡£¶øÇÒ£¬ºÜ¶àÒµÎñÊÇÎÞ·¨²¹³¥µÄ£¬ÀýÈçÒøÐп¨³äÖµ¡£
ʵÏÖ¿ò¼Ü
tx-lcn LCN distributed transaction framework, compatible
with dubbo, spring cloud and Motan framework, supports
various relational databases https://www.txlcn.org
»òÕß Seata MT ģʽ
´úÂëʾÀý
txlcn-demo
ʵÏÖ³äÖµÐèÇó

ÐèÒª°Ñ Oder.done ºÍ Account µÄÓà¶î+ ²Ù×÷¶¼ÊµÏÖ tcc ½Ó¿Ú
¿ÉÒÔ¿´³ö£¬ÕâÑùÕæµÄºÜÂé·³£¬ÄÜÓñ¾µØÊÂÎñµÄ»¹ÊǾ¡Á¿Óñ¾µØÊÂÎñ°É
ʵÏÖ3 ÊÂÎñÏûÏ¢
½éÉÜ
ÒÔ¹ºÎﳡ¾°ÎªÀý£¬ÕÅÈý¹ºÂòÎïÆ·£¬ÕË»§¿Û¿î 100 ÔªµÄͬʱ£¬ÐèÒª±£Ö¤ÔÚÏÂÓεĻáÔ±·þÎñÖиø¸ÃÕË»§Ôö¼Ó 100
»ý·Ö¡£ÓÉÓÚÊý¾Ý¿â˽ÓУ¬ËùÒÔµ¼ÖÂÔÚʵ¼ÊµÄ²Ù×÷¹ý³ÌÖлá³öÏֺܶàÎÊÌ⣬±ÈÈçÏÈ·¢ËÍÏûÏ¢£¬¿ÉÄÜ»áÒòΪ¿Û¿îʧ°Üµ¼ÖÂÕË»§»ý·ÖÎÞ¹ÊÔö¼Ó£¬Èç¹ûÏÈÖ´ÐпۿÔòÓпÉÄÜÒò·þÎñå´»ú£¬µ¼Ö»ý·Ö²»ÄÜÔö¼Ó£¬ÎÞÂÛÊÇÏÈ·¢ÏûÏ¢»¹ÊÇÏÈÖ´Ðб¾µØÊÂÎñ£¬¶¼ÓпÉÄܵ¼Ö³öÏÖÊý¾Ý²»Ò»ÖµĽá¹û¡£

ÊÂÎñÏûÏ¢µÄ±¾ÖʾÍÊÇΪÁ˽â¾ö´ËÀàÎÊÌ⣬½â¾ö±¾µØÊÂÎñÖ´ÐÐÓëÏûÏ¢·¢Ë͵ÄÔ×ÓÐÔÎÊÌâ¡£
ʵÏÖ¿ò¼Ü
Apache RocketMQ? is an open source distributed messaging
and streaming data platform.
ÔÀí

ÊÂÎñ·¢Æð·½Ê×ÏÈ·¢ËÍ prepare ÏûÏ¢µ½ MQ¡£
ÔÚ·¢ËÍ prepare ÏûÏ¢³É¹¦ºóÖ´Ðб¾µØÊÂÎñ¡£
¸ù¾Ý±¾µØÊÂÎñÖ´Ðнá¹û·µ»Ø commit »òÕßÊÇ rollback¡£
Èç¹ûÏûÏ¢ÊÇ rollback£¬MQ ½«É¾³ý¸Ã prepare ÏûÏ¢²»½øÐÐÏ·¢£¬Èç¹ûÊÇ commit
ÏûÏ¢£¬MQ ½«»á°ÑÕâ¸öÏûÏ¢·¢Ë͸ø consumer ¶Ë¡£
Èç¹ûÖ´Ðб¾µØÊÂÎñ¹ý³ÌÖУ¬Ö´Ðж˹ҵô£¬»òÕß³¬Ê±£¬MQ ½«»á²»Í£µÄѯÎÊÆäͬ×éµÄÆäËü producer À´»ñȡ״̬¡£
Consumer ¶ËµÄÏû·Ñ³É¹¦»úÖÆÓÐ MQ ±£Ö¤¡£
Óŵ㣺¶ÔÒì²½²Ù×÷Ö§³ÖÓѺÃ
ȱµã£ºProducer ¶ËҪΪ RMQ ʵÏÖÊÂÎñ²éѯ½Ó¿Ú£¬µ¼ÖÂÔÚÒµÎñ¿ª·¢¹ý³ÌÖУ¬¸´ÔÓ¶ÈÉÏÉý¡£
´úÂëʾÀý
// TODO
ʵÏÖ³äÖµÐèÇó

ͨ¹ý MQ£¬À´±£ÕÏ Order ºÍ Acount µÄÁ½¸ö²Ù×÷ҪôһÆð³É¹¦£¬ÒªÃ´Ò»Æðʧ°Ü¡£
×¢ÒâÒ»¸öµã£¬¼ÙÉè Account µÄÓà¶î+ʧ°ÜÁË£¬ÕâÀïÊÇÎÞ·¨»Ø¹ö Order µÄ²Ù×÷µÄ£¬Account
Òª±£Ö¤×Ô¼ºÄÜÕýÈ·´¦ÀíÏûÏ¢¡£
ʵÏÖ4 ±¾µØÏûÏ¢±í
½éÉÜ & ÔÀí
·Ö²¼Ê½ÊÂÎñ=Aϵͳ±¾µØÊÂÎñ + Bϵͳ±¾µØÊÂÎñ + ÏûϢ֪ͨ;
×¼±¸:
Aϵͳά»¤Ò»ÕÅÏûÏ¢±ílog1,״̬ΪδִÐÐ,
Bϵͳά»¤2Õűí,
δÍê³É±ílog2,
ÒÑÍê³É±ílog3,
ÏûÏ¢Öмä¼þÓÃÁ½¸ötopic,
topic1ÊÇAϵͳ֪ͨBÒªÖ´ÐÐÈÎÎñÁË,
topic2ÊÇBϵͳ֪ͨAÒѾÍê³ÉÈÎÎñÁË,

Óû§ÔÚAϵͳÀïÁìÈ¡ÓÅ»Ýȯ,²¢Íùlog1²åÈëÒ»Ìõ¼Ç¼
Óɶ¨Ê±ÈÎÎñÂÖѯlog1,·¢ÏûÏ¢¸øBϵͳ
BϵͳÊÕµ½ÏûÏ¢ºó,Ïȼì²éÊÇ·ñÔÚlog3ÖÐÖ´ÐйýÕâÌõÏûÏ¢,ûÓеϰ²åÈëlog2±í,²¢½øÐз¢¶ÌÐÅ,·¢Ëͳɹ¦ºóɾ³ýlog2µÄ¼Ç¼,²åÈëlog3
Bϵͳ·¢ÏûÏ¢¸øAϵͳ
Aϵͳ¸ù¾Ýidɾ³ýÕâ¸öÏûÏ¢
¼ÙÉè³öÏÖÍøÂçÖжϺÍϵͳ Crash µÈÎÊÌâʱ£¬ÎªÁ˼ÌÐøÖ´ÐÐÊÂÎñ£¬ÐèÒª½øÐÐÖØÊÔ¡£ÖØÊÔ·½Ê½ÓУº
¶¨Ê±ÈÎÎñ»Ö¸´ÊÂÎñµÄÖ´ÐУ¬
ʹÓà MQ À´´«µÝÏûÏ¢£¬MQ¿ÉÒÔ±£Ö¤ÏûÏ¢±»ÕýÈ·Ïû·Ñ¡£
Óŵ㣺¼òµ¥
ȱµã£º³ÌÐò»á³öÏÖÖ´Ðе½Ò»°ëµÄ״̬£¬ÖØÊÔÔòÒªÇóÿ¸ö²Ù×÷ÐèҪʵÏÖÃݵÈÐÔ
×¢Ò⣺·Ö²¼Ê½ÏµÍ³ÊµÏÖÃݵÈÐÔµÄʱºò£¬¼ÇµÃʹÓ÷ֲ¼Ê½Ëø£¬·Ö²¼Ê½ËøÏêϸ½éÉܼûÎÄÄ©²Î¿¼ÎÄÕÂ
ʵÏÖ³äÖµÐèÇó

ͨ¹ýÏûÏ¢±í£¬°Ñ¶Ï¿ªµÄÊÂÎñ¼ÌÐøÖ´ÐÐÏÂÈ¥¡£
ʵÏÖ5 ¿¼ÀµÄ·½°¸
½éÉÜ & ÔÀí
¿¼ÀµÄ·½°¸£¬¾ÍÊÇʹÓñ¾µØÏûÏ¢±í£¬µ«ÊÇÉÙÁËÁ½¸öÖØÒª×é¼þ£¨MQ ºÍ ¹ØÏµÐÍÊý¾Ý¿â£©£¬Ð´ÆðÀ´»¹ÊDZȽÏÐÁ¿àµÄ¡£
¿¼À·½°¸ÓÐÈçÏÂÌØµã£º
Order ±í³Ðµ£ÁËÏûÏ¢±í¹¦ÄÜ
·þÎñÖ®¼äʹÓà http ͨÐÅ£¬ËùÒÔÅöµ½ÎÊÌâÒªÒÀÀµ¶¨Ê±ÈÎÎñ·¢²¼²¹µ¥ÖØÊÔ
ûÓÐʹÓùØÏµÐÍÊý¾Ý¿â£¬ÃݵÈÐÔµÄʵÏֱȽÏÀ§ÄÑ¡£
ʵÏÖ³äÖµÐèÇó

Äѵã:
ʵÏÖÃݵÈÐÔµÄÒªÇóÌ«¸ß£¬»ù±¾ÒªÇóËùÓвÙ×÷¶¼ÐèҪʵÏÖÃݵÈÐÔ,ÀýÈç¸üÐÂÓà¶î²Ù×÷£¬Òª¸ßЧ¸üУ¬¼òµ¥µÄ°ì·¨ÊÇʹÓÃÀÖ¹ÛËø£¬µ«ÊÇҪͬʱ¼æ¹ËÃݵÈÐԵϰ£¬ÀÖ¹ÛËø¾Í²»¹»ÓÃÁË¡£
³ÌÐòÔÚÈÎÒ»Ò»²½¶Ï¿ª£¬¶¼ÐèÒªÖØÐÂÔËÐÐÆðÀ´£¬²¹µ¥³ÌÐò»áºÜÄÑд£¨¼òµ¥µÄÒµÎñ»¹ºÃ£¬¸´ÔÓÒµÎñ¾Í»á»ìÂÒÁË£©
¸Ä½ø½¨Ò飺
·þÎñÖ±½ÓʹÓà mq ͨÐÅ£¬·þÎñÒì³£ÐèÒªÖØÊÔÏû·Ñ¡£
ʹÓùØÏµÐÍÊý¾Ý¿â£¬Í¨¹ý±¾µØÊÂÎñ£¬¿ÉÒÔÖ»³ÌÐò¿ªÊ¼´¦ÅжÏÖØ¸´£¬¼ò»¯ÃݵÈÐÔµÄʵÏÖÂß¼
ʵ¼ÊÉϾÍÊÇÍùÉÏÒ»¸öʵÏÖ4ÉÏ×ß¡£
×ܽá
ÎÒÃÇÏȶÔÕâЩʵÏÖ·½°¸½øÐÐÒ»¸ö×ܽ᣺

¸÷¸ö·½°¸ÓÐ×Ô¼ºµÄÓÅÁÓ£¬Êµ¼ÊʹÓùý³ÌÖУ¬ÎÒÃÇ»¹ÊÇÐèÒª¸ù¾ÝÇé¿öÀ´Ñ¡Ôñ²»Í¬ÊÂÎñ·½°¸À´Áé»î×éºÏ¡£
ÀýÈç´æÔÚ·þÎñÄ£¿éA ¡¢B¡¢ C¡£AÄ£¿éÊÇmysql×÷ΪÊý¾ÝÔ´µÄ·þÎñ£¬BÄ£¿éÊÇ»ùÓÚredis×÷ΪÊý¾ÝÔ´µÄ·þÎñ£¬CÄ£¿éÊÇ»ùÓÚmongo×÷ΪÊý¾ÝÔ´µÄ·þÎñ¡£ÈôÐèÒª½â¾öËûÃǵÄÊÂÎñÒ»ÖÂÐÔ¾ÍÐèÒªÕë¶Ô²»Í¬µÄ½Úµã²ÉÓò»Í¬µÄ·½°¸£¬²¢ÇÒͳһе÷Íê³É·Ö²¼Ê½ÊÂÎñµÄ´¦Àí¡£

·½°¸£º½«AÄ£¿é²ÉÓà Seata ģʽ¡¢B/C²ÉÓÃTCCģʽ¾ÍÄÜÍêÃÀ½â¾ö¡£
|