Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ServiceCombÖеÄÊý¾Ý×îÖÕÒ»ÖÂÐÔ·½°¸
 
À´Ô´£ºcsdn ·¢²¼ÓÚ£º 2017-10-16
  2320  次浏览      27
 

Êý¾ÝÒ»ÖÂÐÔÊǹ¹½¨ÒµÎñϵͳÐèÒª¿¼ÂǵÄÖØÒªÎÊÌâ £¬ ÒÔÍùÎÒÃÇÊÇÒÀ¿¿Êý¾Ý¿âÀ´±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£µ«ÊÇÔÚ΢·þÎñ¼Ü¹¹ÒÔ¼°·Ö²¼Ê½»·¾³ÏÂʵÏÖÊý¾ÝÒ»ÖÂÐÔÊÇÒ»¸öºÜÓÐÌôÕ½µÄµÄÎÊÌâ¡£ServiceComb×÷Ϊ¿ªÔ´µÄ΢·þÎñ¿ò¼ÜÖÂÁ¦½â¾ö΢·þÎñ¿ª·¢¹ý³ÌÖеÄÎÊÌâ¡£ÎÒÃÇ×î½ü·¢ÆðµÄServiceComb-SagaÏîÄ¿À´½â¾ö·Ö²¼Ê½»·¾³ÏµÄÊý¾Ý×îÖÕÒ»ÖÂÐÔÎÊÌâ¡£±¾ÎĽ«Ïò´ó¼Ò½éÉÜΪʲôÊý¾ÝÒ»ÖÂÐÔÈç´ËÖØÒª£¿SagaÓÖÊÇʲô£¿

µ¥ÌåÓ¦ÓõÄÊý¾ÝÒ»ÖÂÐÔ

ÏëÏóÒ»ÏÂÈç¹ûÎÒÃǾ­Óª×ÅÒ»¼Ò´óÐÍÆóÒµ£¬ÏÂÊôÓк½¿Õ¹«Ë¾¡¢×â³µ¹«Ë¾¡¢ºÍÁ¬Ëø¾Æµê¡£ÎÒÃÇΪ¿Í»§ÌṩһվʽµÄÂÃÓÎÐг̹滮·þÎñ£¬ÕâÑù¿Í»§Ö»ÐèÒªÌṩ³öÐÐÄ¿µÄµØ£¬ ÎÒÃǰïÖú¿Í»§Ô¤¶©»úƱ¡¢×â³µ¡¢ÒÔ¼°Ô¤¶©¾Æµê¡£´ÓÒµÎñµÄ½Ç¶È£¬ÎÒÃDZØÐë±£Ö¤ÉÏÊöÈý¸ö·þÎñµÄÔ¤¶©¶¼Íê³É²ÅÄÜÂú×ãÒ»¸ö³É¹¦µÄÂÃÓÎÐг̣¬·ñÔò²»ÄܳÉÐС£

ÎÒÃǵĵ¥ÌåÓ¦ÓÃÒªÂú×ãÕâ¸öÐèÇó·Ç³£¼òµ¥£¬Ö»Ð轫Õâ¸öÈý¸ö·þÎñÇëÇó·Åµ½Í¬Ò»¸öÊý¾Ý¿âÊÂÎñÖУ¬Êý¾Ý¿â»á°ïÎÒÃDZ£Ö¤È«²¿³É¹¦»òÕßÈ«²¿»Ø¹ö¡£

µ±Õâ¸ö¹¦ÄÜÉÏÏßÒԺ󣬹«Ë¾·Ç³£ÂúÒ⣬¿Í»§Ò²·Ç³£¸ßÐË¡£

΢·þÎñ³¡¾°ÏµÄÊý¾ÝÒ»ÖÂÐÔ

Õ⼸ÄêÖУ¬ÎÒÃǵÄÐг̹滮·þÎñ·Ç³£³É¹¦£¬ÆóÒµÕôÕôÈÕÉÏ£¬Óû§Á¿Ò²·­ÁËÊýÊ®±¶¡£ÆóÒµµÄÏÂÊôº½¿Õ¹«Ë¾¡¢×â³µ¹«Ë¾¡¢ºÍÁ¬Ëø¾ÆµêÒ²Ïà¼ÌÍÆ³öÁ˸ü¶à·þÎñÒÔÂú×ã¿Í»§ÐèÇó£¬ ÎÒÃǵÄÓ¦ÓúͿª·¢ÍŶÓÒ²Òò´ËÈÕ½¥ÅÓ´ó¡£Èç½ñÎÒÃǵĵ¥ÌåÓ¦ÓÃÒѱäµÃÈç´Ë¸´ÔÓ£¬ÒÔÖÁÓÚûÈËÁ˽âÕû¸öÓ¦ÓÃÊÇÔõôÔË×÷µÄ¡£¸üÔãµÄÊÇй¦ÄܵÄÉÏÏßÏÖÔÚÐèÒªËùÓÐÑз¢ÍŶӺÏ×÷£¬ ÈÕÒ¹·ÜÕ½ÊýÖܲÅÄÜÍê³É¡£¿´×ÅÊг¡Õ¼ÓÐÂÊÿ¿öÓúÏ£¬¹«Ë¾¸ß²ã¶ÔÑз¢²¿ÃÅÔ½À´Ô½²»ÂúÒâ¡£

¾­¹ýÊýÂÖÌÖÂÛ£¬ÎÒÃÇ×îÖÕ¾ö¶¨½«ÅÓ´óµÄµ¥ÌåÓ¦ÓÃÒ»·ÖΪËÄ£º»úƱԤ¶©·þÎñ¡¢×â³µ·þÎñ¡¢¾ÆµêÔ¤¶©·þÎñ¡¢ºÍÖ§¸¶·þÎñ¡£·þÎñ¸÷×ÔʹÓÃ×Ô¼ºµÄÊý¾Ý¿â£¬²¢Í¨¹ýHTTPЭÒéͨÐÅ¡£ ¸ºÔð¸÷·þÎñµÄÍŶӸù¾ÝÊг¡ÐèÇó°´ÕÕ×Ô¼ºµÄ¿ª·¢½Ú×à·¢°æÉÏÏß¡£Èç½ñÎÒÃÇÃæÁÙеÄÌôÕ½£ºÈçºÎ±£Ö¤×î³õÈý¸ö·þÎñµÄÔ¤¶©¶¼Íê³É²ÅÄÜÂú×ãÒ»¸ö³É¹¦µÄÂÃÓÎÐг̣¬ ·ñÔò²»ÄܳÉÐеÄÒµÎñ¹æÔò£¿ÏÖÔÚ·þÎñÓи÷×Եı߽磬¶øÇÒÊý¾Ý¿âÑ¡ÐÍÒ²²»¾¡Ïàͬ£¬Í¨¹ýÊý¾Ý¿â±£Ö¤Êý¾ÝÒ»ÖÂÐԵķ½°¸ÒѲ»¿ÉÐС£

Sagas

ÐÒÔ˵ÄÊÇÎÒÃÇÔÚ»¥ÁªÍøÕÒµ½Ò»Æª¾«²ÊµÄÂÛÎÄ£¬ÎÄÖÐÌá³öµÄÊý¾ÝÒ»ÖÂÐÔ½â¾ö·½°¸SagaÇ¡ºÃÂú×ãÎÒÃǵÄÒµÎñÒªÇó¡£

SagaÊÇÒ»¸ö³¤»îÊÂÎñ£¬¿É±»·Ö½â³É¿ÉÒÔ½»´íÔËÐеÄ×ÓÊÂÎñ¼¯ºÏ¡£ÆäÖÐÿ¸ö×ÓÊÂÎñ¶¼ÊÇÒ»¸ö±£³ÖÊý¾Ý¿âÒ»ÖÂÐÔµÄÕæÊµÊÂÎñ¡£

ÔÚÎÒÃǵÄÒµÎñ³¡¾°Ï£¬Ò»¸öÐг̹滮µÄÊÂÎñ¾ÍÊÇÒ»¸öSaga£¬ÆäÖаüº¬Ëĸö×ÓÊÂÎñ£º»úƱԤ¶©¡¢×â³µ¡¢¾ÆµêÔ¤¶©¡¢ºÍÖ§¸¶¡£

Chris RichardsonÔÚËûµÄÎÄÕÂPattern: SagaÖжÔSagaÓÐËùÃèÊö¡£ Caitie McCaffreyÒ²ÔÚËýµÄÑݽ²ÖÐÌáµ½ÈçºÎÔÚ΢ÈíµÄ¹âÔÎ 4ÓÎÏ·ÖÐÈçºÎÓ¦ÓÃsaga½â¾öÊý¾ÝÒ»ÖÂÐÔÎÊÌâ¡£

SagaµÄÔËÐÐÔ­Àí

SagaÖеÄÊÂÎñÏ໥¹ØÁª£¬Ó¦×÷Ϊ£¨·ÇÔ­×Ó£©µ¥Î»Ö´ÐС£ÈκÎδÍêȫִÐеÄSagaÊDz»Âú×ãÒªÇóµÄ£¬Èç¹û·¢Éú£¬±ØÐëµÃµ½²¹³¥¡£ÒªÐÞÕýδÍêȫִÐеIJ¿·Ö£¬ ÿ¸ösaga×Ó½»Ò×T1Ó¦Ìṩ¶ÔÓ¦²¹³¥ÊÂÎñC1

ÎÒÃǸù¾ÝÉÏÊö¹æÔò¶¨ÒåÒÔÏÂÊÂÎñ¼°ÆäÏàÓ¦µÄÊÂÎñ²¹³¥£º

µ±Ã¿¸ösaga×ÓÊÂÎñ T1, T2, ¡­, Tn ¶¼ÓжÔÓ¦µÄ²¹³¥¶¨Òå C1, C2, ¡­, Cn-1, ÄÇôsagaϵͳ¿ÉÒÔ±£Ö¤ [1]

×ÓÊÂÎñÐòÁÐ T1, T2, ¡­, TnµÃÒÔÍê³É (×î¼ÑÇé¿ö)

»òÕßÐòÁÐ T1, T2, ¡­, Tj, Cj, ¡­, C2, C1, 0 < j < n, µÃÒÔÍê³É

»»¾ä»°Ëµ£¬Í¨¹ýÉÏÊö¶¨ÒåµÄÊÂÎñ/²¹³¥£¬saga±£Ö¤Âú×ãÒÔÏÂÒµÎñ¹æÔò£º

ËùÓеÄÔ¤¶©¶¼±»Ö´Ðгɹ¦£¬Èç¹ûÈκÎÒ»¸öʧ°Ü£¬¶¼»á±»È¡Ïû

Èç¹û×îºóÒ»²½¸¶¿îʧ°Ü£¬ËùÓÐÔ¤¶©Ò²½«±»È¡Ïû

SagaµÄ»Ö¸´·½Ê½

Ô­ÂÛÎÄÖÐÃèÊöÁËÁ½ÖÖÀàÐ͵ÄSaga»Ö¸´·½Ê½£º

Ïòºó»Ö¸´ ²¹³¥ËùÓÐÒÑÍê³ÉµÄÊÂÎñ£¬Èç¹ûÈÎÒ»×ÓÊÂÎñʧ°Ü

Ïòǰ»Ö¸´ ÖØÊÔʧ°ÜµÄÊÂÎñ£¬¼ÙÉèÿ¸ö×ÓÊÂÎñ×îÖÕ¶¼»á³É¹¦

ÏÔÈ»£¬Ïòǰ»Ö¸´Ã»ÓбØÒªÌṩ²¹³¥ÊÂÎñ£¬Èç¹ûÄãµÄÒµÎñÖУ¬×ÓÊÂÎñ£¨×îÖÕ£©×Ü»á³É¹¦£¬»ò²¹³¥ÊÂÎñÄÑÒÔ¶¨Òå»ò²»¿ÉÄÜ£¬Ïòǰ»Ö¸´¸ü·ûºÏÄãµÄÐèÇó¡£

ÀíÂÛÉϲ¹³¥ÊÂÎñÓÀ²»Ê§°Ü£¬È»¶ø£¬ÔÚ·Ö²¼Ê½ÊÀ½çÖУ¬·þÎñÆ÷¿ÉÄÜ»áå´»ú£¬ÍøÂç¿ÉÄÜ»áʧ°Ü£¬ÉõÖÁÊý¾ÝÖÐÐÄÒ²¿ÉÄÜ»áÍ£µç¡£ÔÚÕâÖÖÇé¿öÏÂÎÒÃÇÄÜ×öЩʲô£¿ ×îºóµÄÊÖ¶ÎÊÇÌṩ»ØÍË´ëÊ©£¬±ÈÈçÈ˹¤¸ÉÔ¤¡£

ʹÓÃSagaµÄÌõ¼þ

Saga¿´ÆðÀ´ºÜÓÐÏ£ÍûÂú×ãÎÒÃǵÄÐèÇó¡£ËùÓ㤻îÊÂÎñ¶¼¿ÉÒÔÕâÑù×öÂð£¿ÕâÀïÓÐһЩÏÞÖÆ£º

SagaÖ»ÔÊÐíÁ½¸ö²ã´ÎµÄǶÌ×£¬¶¥¼¶µÄSagaºÍ¼òµ¥×ÓÊÂÎñ [1]

ÔÚÍâ²ã£¬È«Ô­×ÓÐÔ²»Äܵõ½Âú×ã¡£Ò²¾ÍÊÇ˵£¬sagas¿ÉÄܻῴµ½ÆäËûsagasµÄ²¿·Ö½á¹û [1]

ÿ¸ö×ÓÊÂÎñÓ¦¸ÃÊǶÀÁ¢µÄÔ­×ÓÐÐΪ [2]

ÔÚÎÒÃǵÄÒµÎñ³¡¾°Ï£¬º½°àÔ¤¶©¡¢×â³µ¡¢¾ÆµêÔ¤¶©ºÍ¸¶¿îÊÇ×ÔÈ»¶ÀÁ¢µÄÐÐΪ£¬¶øÇÒÿ¸öÊÂÎñ¶¼¿ÉÒÔÓöÔÓ¦·þÎñµÄÊý¾Ý¿â±£Ö¤Ô­×Ó²Ù×÷¡£

ÎÒÃÇÔÚÐг̹滮ÊÂÎñ²ãÃæÒ²²»ÐèÒªÔ­×ÓÐÔ¡£Ò»¸öÓû§¿ÉÒÔÔ¤¶©×îºóÒ»ÕÅ»úƱ£¬¶øºóÓÉÓÚÐÅÓÿ¨Óà¶î²»×ã¶ø±»È¡Ïû¡£Í¬Ê±ÁíÒ»¸öÓû§¿ÉÄÜ¿ªÊ¼»á¿´µ½ÒÑÎÞÓàÆ±£¬ ½Ó×ÅÓÉÓÚǰÕßÔ¤¶©±»È¡Ïû£¬×îºóÒ»ÕÅ»úƱ±»ÊÍ·Å£¬¶øÇÀµ½×îºóÒ»¸ö×ùλ²¢Íê³ÉÐг̹滮¡£

²¹³¥Ò²ÓÐÐ迼ÂǵÄÊÂÏ

²¹³¥ÊÂÎñ´ÓÓïÒå½Ç¶È³·ÏûÁËÊÂÎñTiµÄÐÐΪ£¬µ«Î´±ØÄܽ«Êý¾Ý¿â·µ»Øµ½Ö´ÐÐTiʱµÄ״̬¡££¨ÀýÈ磬Èç¹ûÊÂÎñ´¥·¢µ¼µ¯·¢É䣬 Ôò¿ÉÄÜÎÞ·¨³·Ïû´Ë²Ù×÷£©

µ«Õâ¶ÔÎÒÃǵÄÒµÎñÀ´Ëµ²»ÊÇÎÊÌâ¡£ÆäʵÄÑÒÔ³·ÏûµÄÐÐΪҲÓпÉÄܱ»²¹³¥¡£ÀýÈ磬·¢Ë͵çÓʵÄÊÂÎñ¿ÉÒÔͨ¹ý·¢ËͽâÊÍÎÊÌâµÄÁíÒ»·âµçÓÊÀ´²¹³¥¡£

ÏÖÔÚÎÒÃÇÓÐÁËͨ¹ýSagaÀ´½â¾öÊý¾ÝÒ»ÖÂÐÔÎÊÌâµÄ·½°¸¡£ËüÔÊÐíÎÒÃdzɹ¦µØÖ´ÐÐËùÓÐÊÂÎñ£¬»òÔÚÈκÎÊÂÎñʧ°ÜµÄÇé¿öÏ£¬²¹³¥Òѳɹ¦µÄÊÂÎñ¡£ ËäÈ»Saga²»ÌṩACID±£Ö¤£¬µ«ÈÔÊÊÓÃÓÚÐí¶àÊý¾Ý×îÖÕÒ»ÖÂÐԵij¡¾°¡£ÄÇÎÒÃÇÈçºÎÉè¼ÆÒ»¸öSagaϵͳ£¿

Saga Log

Saga±£Ö¤ËùÓеÄ×ÓÊÂÎñ¶¼µÃÒÔÍê³É»ò²¹³¥£¬µ«Sagaϵͳ±¾ÉíÒ²¿ÉÄÜ»á±ÀÀ£¡£Saga±ÀÀ£Ê±¿ÉÄÜ´¦ÓÚÒÔϼ¸¸ö״̬£º

SagaÊÕµ½ÊÂÎñÇëÇ󣬵«ÉÐδ¿ªÊ¼¡£Òò×ÓÊÂÎñ¶ÔÓ¦µÄ΢·þÎñ״̬δ±»SagaÐ޸ģ¬ÎÒÃÇʲôҲ²»ÐèÒª×ö¡£

һЩ×ÓÊÂÎñÒѾ­Íê³É¡£ÖØÆôºó£¬Saga±ØÐë½Ó×ÅÉÏ´ÎÍê³ÉµÄÊÂÎñ»Ö¸´¡£

×ÓÊÂÎñÒÑ¿ªÊ¼£¬µ«ÉÐδÍê³É¡£ÓÉÓÚÔ¶³Ì·þÎñ¿ÉÄÜÒÑÍê³ÉÊÂÎñ£¬Ò²¿ÉÄÜÊÂÎñʧ°Ü£¬ÉõÖÁ·þÎñÇëÇó³¬Ê±£¬sagaÖ»ÄÜÖØÐ·¢Æð֮ǰδȷÈÏÍê³ÉµÄ×ÓÊÂÎñ¡£ÕâÒâζ×Å×ÓÊÂÎñ±ØÐëÃݵȡ£

×ÓÊÂÎñʧ°Ü£¬Æä²¹³¥ÊÂÎñÉÐδ¿ªÊ¼¡£Saga±ØÐëÔÚÖØÆôºóÖ´ÐжÔÓ¦²¹³¥ÊÂÎñ¡£

²¹³¥ÊÂÎñÒÑ¿ªÊ¼µ«ÉÐδÍê³É¡£½â¾ö·½°¸ÓëÉÏÒ»¸öÏàͬ¡£ÕâÒâζ×Ų¹³¥ÊÂÎñÒ²±ØÐëÊÇÃݵȵġ£

ËùÓÐ×ÓÊÂÎñ»ò²¹³¥ÊÂÎñ¾ùÒÑÍê³É£¬ÓëµÚÒ»ÖÖÇé¿öÏàͬ¡£

ΪÁ˻ָ´µ½ÉÏÊö״̬£¬ÎÒÃDZØÐë×·×Ù×ÓÊÂÎñ¼°²¹³¥ÊÂÎñµÄÿһ²½¡£ÎÒÃǾö¶¨Í¨¹ýʼþµÄ·½Ê½´ïµ½ÒÔÉÏÒªÇ󣬲¢½«ÒÔÏÂʼþ±£´æÔÚÃûΪsaga logµÄ³Ö¾Ã´æ´¢ÖУº

Saga started event ±£´æÕû¸ösagaÇëÇ󣬯äÖаüÀ¨¶à¸öÊÂÎñ/²¹³¥ÇëÇó

Transaction started event ±£´æ¶ÔÓ¦ÊÂÎñÇëÇó

Transaction ended event ±£´æ¶ÔÓ¦ÊÂÎñÇëÇ󼰯仨¸´

Transaction aborted event ±£´æ¶ÔÓ¦ÊÂÎñÇëÇóºÍʧ°ÜµÄÔ­Òò

Transaction compensated event ±£´æ¶ÔÓ¦²¹³¥ÇëÇ󼰯仨¸´

Saga ended event ±êÖ¾×ÅsagaÊÂÎñÇëÇóµÄ½áÊø£¬²»ÐèÒª±£´æÈκÎÄÚÈÝ

ͨ¹ý½«ÕâЩʼþ³Ö¾Ã»¯ÔÚsaga logÖУ¬ÎÒÃÇ¿ÉÒÔ½«saga»Ö¸´µ½ÉÏÊöÈκÎ״̬¡£

ÓÉÓÚSagaÖ»ÐèÒª×öʼþµÄ³Ö¾Ã»¯£¬¶øÊ¼þÄÚÈÝÒÔJSONµÄÐÎʽ´æ´¢£¬Saga logµÄʵÏַdz£Áé»î£¬Êý¾Ý¿â£¨SQL»òNoSQL£©£¬³Ö¾ÃÏûÏ¢¶ÓÁУ¬ÉõÖÁÆÕͨÎļþ¿ÉÒÔÓÃ×÷ʼþ´æ´¢£¬ µ±È»ÓÐЩÄܸü¿ìµÃ°ïsaga»Ö¸´×´Ì¬¡£

SagaÇëÇóµÄÊý¾Ý½á¹¹

ÔÚÎÒÃǵÄÒµÎñ³¡¾°Ï£¬º½°àÔ¤¶©¡¢×â³µ¡¢ºÍ¾ÆµêÔ¤¶©Ã»ÓÐÒÀÀµ¹ØÏµ£¬¿ÉÒÔ²¢Ðд¦Àí£¬µ«¶ÔÓÚÎÒÃǵĿͻ§À´Ëµ£¬Ö»ÔÚËùÓÐÔ¤¶©³É¹¦ºóÒ»´Î¸¶·Ñ¸ü¼ÓÓѺᣠÄÇôÕâËĸö·þÎñµÄÊÂÎñ¹ØÏµ¿ÉÒÔÓÃÏÂͼ±íʾ£º

½«Ðг̹滮ÇëÇóµÄÊý¾Ý½á¹¹ÊµÏÖΪÓÐÏò·ÇÑ­»·Í¼Ç¡ºÃºÏÊÊ¡£ ͼµÄ¸ùÊÇsagaÆô¶¯ÈÎÎñ£¬Ò¶ÊÇsaga½áÊøÈÎÎñ¡£

Parallel Saga

ÈçÉÏËùÊö£¬º½°àÔ¤¶©£¬×â³µºÍ¾ÆµêÔ¤¶©¿ÉÒÔ²¢Ðд¦Àí¡£µ«ÊÇÕâÑù×ö»áÔì³ÉÁíÒ»¸öÎÊÌ⣺Èç¹ûº½°àÔ¤¶©Ê§°Ü£¬¶ø×â³µÕýÔÚ´¦ÀíÔõô°ì£¿ÎÒÃDz»ÄÜÒ»Ö±µÈ´ý×â³µ·þÎñ»ØÓ¦£¬ ÒòΪ²»ÖªµÀÐèÒªµÈ¶à¾Ã¡£

×îºÃµÄ°ì·¨ÊÇÔٴη¢ËÍ×â³µÇëÇ󣬻ñµÃ»ØÓ¦£¬ÒÔ±ãÎÒÃÇÄܹ»¼ÌÐø²¹³¥²Ù×÷¡£µ«Èç¹û×â³µ·þÎñÓÀ²»»ØÓ¦£¬ÎÒÃÇ¿ÉÄÜÐèÒª²ÉÈ¡»ØÍË´ëÊ©£¬±ÈÈçÊÖ¶¯¸ÉÔ¤¡£

³¬Ê±µÄÔ¤¶©ÇëÇó¿ÉÄÜ×îºóÈÔ±»×â³µ·þÎñÊÕµ½£¬Õâʱ·þÎñÒѾ­´¦ÀíÁËÏàͬµÄÔ¤¶©ºÍÈ¡ÏûÇëÇó¡£

Òò´Ë£¬·þÎñµÄʵÏÖ±ØÐë±£Ö¤²¹³¥ÇëÇóÖ´ÐÐÒÔºó£¬ÔÙ´ÎÊÕµ½µÄ¶ÔÓ¦ÊÂÎñÇëÇóÎÞЧ¡£ Caitie McCaffreyÔÚËýµÄÑݽ²Distributed Sagas: A Protocol for Coordinating MicroservicesÖаÑÕâ¸ö³ÆÎª¿É½»»»µÄ²¹³¥ÇëÇó (commutative compensating request)¡£

ACID and Saga

ACIDÊǾßÓÐÒÔÏÂÊôÐÔµÄÒ»ÖÂÐÔÄ£ÐÍ:

Ô­×ÓÐÔ£¨Atomicity£©

Ò»ÖÂÐÔ£¨Consistency£©

¸ôÀëÐÔ£¨Isolation£©

³Ö¾ÃÐÔ£¨Durability£©

Saga²»ÌṩACID±£Ö¤£¬ÒòΪԭ×ÓÐԺ͸ôÀëÐÔ²»Äܵõ½Âú×ã¡£Ô­ÂÛÎÄÃèÊöÈçÏ£º

full atomicity is not provided. That is, sagas may view the partial results of other sagas [1]

ͨ¹ýsaga log£¬saga¿ÉÒÔ±£Ö¤Ò»ÖÂÐԺͳ־ÃÐÔ¡£

Saga ¼Ü¹¹

×îºó£¬ÎÒÃǵÄSaga¼Ü¹¹ÈçÏ£º

Saga Execution Component½âÎöÇëÇóJSON²¢¹¹½¨ÇëÇóͼ

TaskRunner ÓÃÈÎÎñ¶ÓÁÐÈ·±£ÇëÇóµÄÖ´ÐÐ˳Ðò

TaskConsumer ´¦ÀíSagaÈÎÎñ£¬½«Ê¼þдÈësaga log£¬²¢½«ÇëÇó·¢Ë͵½Ô¶³Ì·þÎñ

ÔÚÉÏÎÄÖУ¬ÎÒ̸µ½ÁËServiceCombϵÄSagaÊÇÔõôÉè¼ÆµÄ¡£ È»¶ø£¬Òµ½ç»¹ÓÐÆäËûÊý¾ÝÒ»ÖÂÐÔ½â¾ö·½°¸£¬ÈçÁ½½×¶ÎÌá½»£¨2PC£©ºÍTry-Confirm / Cancel£¨TCC£©¡£ÄÇsagaÏà±ÈÖ®ÏÂÓÐÊ²Ã´ÌØ±ð£¿

Á½½×¶ÎÌá½» Two-Phase Commit (2PC)

Á½½×¶ÎÌύЭÒéÊÇÒ»ÖÖ·Ö²¼Ê½Ëã·¨£¬ÓÃÓÚЭµ÷²ÎÓë·Ö²¼Ê½Ô­×ÓÊÂÎñµÄËùÓнø³Ì£¬ÒÔ±£Ö¤ËûÃǾùÍê³ÉÌá½»»òÖÐÖ¹£¨»Ø¹ö£©ÊÂÎñ¡£

2PC°üº¬Á½¸ö½×¶Î£º

ͶƱ½×¶Î Эµ÷Æ÷ÏòËùÓзþÎñ·¢ÆðͶƱÇëÇ󣬷þÎñ»Ø´ðyes»òno¡£Èç¹ûÓÐÈκηþÎñ»Ø¸´noÒԾܾø»ò³¬Ê±£¬Ð­µ÷Æ÷ÔòÔÚÏÂÒ»½×¶Î·¢ËÍÖÐÖ¹ÏûÏ¢¡£

¾ö¶¨½×¶Î Èç¹ûËùÓзþÎñ¶¼»Ø¸´yes£¬Ð­µ÷Æ÷ÔòÏò·þÎñ·¢ËÍcommitÏûÏ¢£¬½Ó×Å·þÎñ¸æÖªÊÂÎñÍê³É»òʧ°Ü¡£Èç¹ûÈκηþÎñÌύʧ°Ü£¬ Эµ÷Æ÷½«Æô¶¯¶îÍâµÄ²½ÖèÒÔÖÐÖ¹¸ÃÊÂÎñ¡£

ÔÚͶƱ½×¶Î½áÊøÖ®ºóÓë¾ö²ß½×¶Î½áÊøÖ®Ç°£¬·þÎñ´¦ÓÚ²»È·¶¨×´Ì¬£¬ÒòΪËûÃDz»È·¶¨½»Ò×ÊÇ·ñ¼ÌÐø½øÐС£µ±·þÎñ´¦ÓÚ²»È·¶¨×´Ì¬²¢ÓëЭµ÷Æ÷ʧȥÁ¬½Óʱ£¬ ËüÖ»ÄÜÑ¡ÔñµÈ´ýЭµ÷Æ÷µÄ»Ö¸´£¬»òÕß×ÉѯÆäËûÔÚÈ·¶¨×´Ì¬ÏµķþÎñÀ´µÃ֪Эµ÷Æ÷µÄ¾ö¶¨¡£ÔÚ×µÄÇé¿öÏ£¬ n¸ö´¦ÓÚ²»È·¶¨×´Ì¬µÄ·þÎñÏòÆäËûn-1¸ö·þÎñ×Éѯ½«²úÉúO(n2)¸öÏûÏ¢¡£

ÁíÍ⣬2PCÊÇÒ»¸ö×èÈûЭÒé¡£·þÎñÔÚͶƱºóÐèÒªµÈ´ýЭµ÷Æ÷µÄ¾ö¶¨£¬´Ëʱ·þÎñ»á×èÈû²¢Ëø¶¨×ÊÔ´¡£ÓÉÓÚÆä×èÈû»úÖÆºÍ×î²îʱ¼ä¸´ÔӶȸߣ¬ 2PC²»ÄÜÊÊÓ¦Ëæ×ÅÊÂÎñÉæ¼°µÄ·þÎñÊýÁ¿Ôö¼Ó¶øÀ©Õ¹µÄÐèÒª¡£

ÓйØ2PCʵÏֵĸü¶àϸ½Ú¿É²Î¿¼2ºÍ3¡£

Try-Confirm/Cancel (TCC)

TCCÒ²ÊDz¹³¥ÐÍÊÂÎñģʽ£¬Ö§³ÖÁ½½×¶ÎµÄÉÌҵģÐÍ¡£

³¢ÊÔ½×¶Î ½«·þÎñÖÃÓÚ´ý´¦Àí״̬¡£ÀýÈ磬ÊÕµ½³¢ÊÔÇëÇóʱ£¬º½°àÔ¤¶©·þÎñ½«Îª¿Í»§Ô¤ÁôÒ»¸ö×ù룬²¢ÔÚÊý¾Ý¿â²åÈë¿Í»§Ô¤¶©¼Ç¼£¬½«¼Ç¼ÉèΪԤÁô״̬¡£ Èç¹ûÈκηþÎñʧ°Ü»ò³¬Ê±£¬Ð­µ÷Æ÷½«ÔÚÏÂÒ»½×¶Î·¢ËÍÈ¡ÏûÇëÇó¡£

È·ÈϽ׶Π½«·þÎñÉèΪȷÈÏ״̬¡£È·ÈÏÇëÇó½«È·ÈϿͻ§Ô¤¶©µÄ×ù룬Õâʱ·þÎñÒÑ¿ÉÏò¿Í»§ÊÕÈ¡»úƱ·ÑÓá£Êý¾Ý¿âÖеĿͻ§Ô¤¶©¼Ç¼Ҳ»á±»¸üÐÂΪȷÈÏ״̬¡£ Èç¹ûÈκηþÎñÎÞ·¨È·ÈÏ»ò³¬Ê±£¬Ð­µ÷Æ÷½«ÖØÊÔÈ·ÈÏÇëÇóÖ±µ½³É¹¦£¬»òÔÚÖØÊÔÁËÒ»¶¨´ÎÊýºó²ÉÈ¡»ØÍË´ëÊ©£¬±ÈÈçÈ˹¤¸ÉÔ¤¡£

ÓësagaÏà±È£¬TCCµÄÓÅÊÆÔÚÓÚ£¬³¢ÊԽ׶ν«·þÎñתΪ´ý´¦Àí״̬¶ø²»ÊÇ×îÖÕ״̬£¬ÕâʹµÃÉè¼ÆÏàÓ¦µÄÈ¡Ïû²Ù×÷Çá¶øÒ×¾Ù¡£

ÀýÈ磬µçÓÊ·þÎñµÄ³¢ÊÔÇëÇó¿É½«Óʼþ±ê¼ÇΪ׼±¸·¢ËÍ£¬²¢ÇÒ½öÔÚÈ·ÈϺó·¢ËÍÓʼþ£¬ÆäÏàÓ¦µÄÈ¡ÏûÇëÇóÖ»Ð轫Óʼþ±ê¼ÇΪÒÑ·ÏÆú¡£µ«Èç¹ûʹÓÃsaga£¬ ÊÂÎñ½«·¢Ë͵ç×ÓÓʼþ£¬¼°ÆäÏàÓ¦µÄ²¹³¥ÊÂÎñ¿ÉÄÜÐèÒª·¢ËÍÁíÒ»·âµç×ÓÓʼþ×÷³ö½âÊÍ¡£

TCCµÄȱµãÊÇÆäÁ½½×¶ÎЭÒéÐèÒªÉè¼Æ¶îÍâµÄ·þÎñ´ý´¦Àí״̬£¬ÒÔ¼°¶îÍâµÄ½Ó¿ÚÀ´´¦Àí³¢ÊÔÇëÇó¡£ÁíÍ⣬TCC´¦ÀíÊÂÎñÇëÇóËù»¨·ÑµÄʱ¼ä¿ÉÄÜÊÇsagaµÄÁ½±¶£¬ ÒòΪTCCÐèÒªÓëÿ¸ö·þÎñ½øÐÐÁ½´ÎͨÐÅ£¬²¢ÇÒÆäÈ·ÈϽ׶ÎÖ»ÄÜÔÚÊÕµ½ËùÓзþÎñ¶Ô³¢ÊÔÇëÇóµÄÏìÓ¦ºó¿ªÊ¼¡£

ÓйØTCCµÄ¸ü¶àϸ½Ú¿É²Î¿¼Transactions for the REST of Us.

ʼþÇý¶¯µÄ¼Ü¹¹

ºÍTCCÒ»Ñù£¬ÔÚʼþÇý¶¯µÄ¼Ü¹¹ÖУ¬³¤»îÊÂÎñÉæ¼°µÄÿ¸ö·þÎñ¶¼ÐèÒªÖ§³Ö¶îÍâµÄ´ý´¦Àí״̬¡£½ÓÊÕµ½ÊÂÎñÇëÇóµÄ·þÎñ»áÔÚÆäÊý¾Ý¿âÖвåÈëÒ»ÌõеļǼ£¬ ½«¸Ã¼Ç¼״̬ÉèΪ´ý´¦Àí²¢·¢ËÍÒ»¸öеÄʼþ¸øÊÂÎñÐòÁÐÖеÄÏÂÒ»¸ö·þÎñ¡£

ÒòΪÔÚ²åÈë¼Ç¼ºó·þÎñ¿ÉÄܱÀÀ££¬ÎÒÃÇÎÞ·¨È·¶¨ÊÇ·ñÐÂʼþÒÑ·¢ËÍ£¬ËùÒÔÿ¸ö·þÎñ»¹ÐèÒª¶îÍâµÄʼþ±íÀ´¸ú×Ùµ±Ç°³¤»îÊÂÎñ´¦ÓÚÄÄÒ»²½¡£

Ò»µ©³¤»îÊÂÎñÖеÄ×îºóÒ»¸ö·þÎñÍê³ÉÆä×ÓÊÂÎñ£¬Ëü½«Í¨ÖªËüÔÚÊÂÎñÖеÄǰһ¸ö·þÎñ¡£½ÓÊÕµ½Íê³ÉʼþµÄ·þÎñ½«ÆäÔÚÊý¾Ý¿âÖеļǼ״̬ÉèΪÍê³É¡£

Èç¹û×Ðϸ±È½Ï£¬Ê¼þÇý¶¯µÄ¼Ü¹¹¾ÍÏñ·Ç¼¯ÖÐʽµÄ»ùÓÚʼþµÄTCCʵÏÖ¡£Èç¹ûÈ¥µô´ý´¦Àí״̬¶øÖ±½Ó°Ñ·þÎñ¼Ç¼ÉèΪ×îÖÕ״̬£¬Õâ¸ö¼Ü¹¹¾ÍÏñ·Ç¼¯ÖÐʽµÄ»ùÓÚʼþµÄsagaʵÏÖ¡£ È¥ÖÐÐÄ»¯ÄÜ´ïµ½·þÎñ×ÔÖΣ¬µ«Ò²Ôì³ÉÁË·þÎñÖ®¼ä¸ü½ôÃܵĵÄñîºÏ¡£¼ÙÉèеÄÒµÎñÐèÇóÔÚ·þÎñBºÍCÖ®¼äµÄÔö¼ÓÁËеÄÁ÷³ÌD¡£ÔÚʼþÇý¶¯¼Ü¹¹Ï£¬·þÎñBºÍC±ØÐë¸Ä¶¯´úÂëÒÔÊÊӦеÄÁ÷³ÌD¡£

SagaÔòÕýºÃÏà·´£¬ËùÓÐÕâЩñîºÏ¶¼ÔÚsagaϵͳÖУ¬µ±ÔÚ³¤»îÊÂÎñÖÐÌí¼ÓÐÂÁ÷³Ìʱ£¬ÏÖÓзþÎñ²»ÐèÒªÈκθ͝¡£

¸ü¶àϸ½Ú¿É²Î¿¼Event-Driven Data Management for Microservices.

¼¯ÖÐʽÓë·Ç¼¯ÖÐʽʵÏÖ

Õâ¸öSagaϵÁеÄÎÄÕÂÌÖÂ۵ͼÊǼ¯ÖÐʽµÄsagaÉè¼Æ¡£µ«sagaÒ²¿ÉÓ÷Ǽ¯ÖÐʽµÄ·½°¸À´ÊµÏÖ¡£ÄÇô·Ç¼¯ÖÐʽµÄ°æ±¾ÓÐʲô²»Í¬£¿

·Ç¼¯ÖÐʽsagaûÓÐרְµÄЭµ÷Æ÷¡£Æô¶¯ÏÂÒ»¸ö·þÎñµ÷ÓõķþÎñ¾ÍÊǵ±Ç°µÄЭµ÷Æ÷¡£ÀýÈ磬

·þÎñAÊÕµ½ÒªÇó·þÎñA£¬BºÍCÖ®¼äµÄÊý¾ÝÒ»ÖÂÐÔµÄÊÂÎñÇëÇó¡£

AÍê³ÉÆä×ÓÊÂÎñ£¬²¢½«ÇëÇ󴫵ݸøÊÂÎñÖеÄÏÂÒ»¸ö·þÎñ£¬·þÎñB.

BÍê³ÉÆä×ÓÊÂÎñ£¬²¢½«ÇëÇ󴫵ݸøC£¬ÒÀ´ËÀàÍÆ¡£

Èç¹ûC´¦ÀíÇëÇóʧ°Ü£¬BÓÐÔðÈÎÆô¶¯²¹³¥ÊÂÎñ£¬²¢ÒªÇóA»Ø¹ö¡£

Ó뼯ÖÐʽÏà±È£¬·Ç¼¯ÖÐʽµÄʵÏÖ¾ßÓзþÎñ×ÔÖεÄÓÅÊÆ¡£µ«Ã¿¸ö·þÎñ¶¼ÐèÒª°üº¬Êý¾ÝÒ»ÖÂÐÔЭÒ飬²¢ÌṩÆäËùÐèµÄ¶îÍâ³Ö¾Ã»¯ÉèÊ©¡£

ÎÒÃǸüÇãÏòÓÚ×ÔÖεÄÒµÎñ·þÎñ£¬µ«·þÎñ»¹¹ØÁªºÜ¶àÓ¦Óõĸ´ÔÓÐÔ£¬ÈçÊý¾ÝÒ»ÖÂÐÔ£¬·þÎñ¼à¿ØºÍÏûÏ¢´«µÝ£¬ ½«ÕâЩ¼¬ÊÖÎÊÌ⼯Öд¦Àí£¬Äܽ«ÒµÎñ·þÎñ´ÓÓ¦Óõĸ´ÔÓÐÔÖÐÊÍ·Å£¬×¨×¢ÓÚ´¦Àí¸´ÔÓµÄÒµÎñ£¬Òò´ËÎÒÃDzÉÓÃÁ˼¯ÖÐʽµÄsagaÉè¼Æ¡£

ÁíÍâ£¬Ëæ×ų¤»îÊÂÎñÖÐÉæ¼°µÄ·þÎñÊýÁ¿Ôö³¤£¬·þÎñÖ®¼äµÄ¹ØÏµ±äµÃÔ½À´Ô½ÄÑÀí½â£¬ºÜ¿ì±ã»á³ÊÏÖÏÂͼµÄËÀÐÇÐÎ×´¡£

ͼƬÀ´Ô´: http://www.slideshare.net/BruceWong3/the-case-for-chaos (s12)

ͬʱ£¬ÔÚ³¤»îÊÂÎñÖж¨Î»ÎÊÌâÒ²±äµÃ¸ü¼Ó¸´ÔÓ£¬ÒòΪ·þÎñÈÕÖ¾±é²¼Èº¼¯½Úµã¡£

Summary

±¾ÎĽ«sagaÓëÆäËûÊý¾ÝÒ»ÖÂÐÔ½â¾ö·½°¸½øÐÐÁ˱Ƚϡ£Saga±ÈÁ½½×¶ÎÌá½»¸üÒ×À©Õ¹¡£ÔÚÊÂÎñ¿É²¹³¥µÄÇé¿öÏ£¬ Ïà±ÈTCC£¬saga¶ÔÒµÎñÂß¼­¼¸ºõûÓи͝µÄÐèÒª£¬¶øÇÒÐÔÄܸü¸ß¡£¼¯ÖÐʽµÄsagaÉè¼Æ½âñîÁË·þÎñÓëÊý¾ÝÒ»ÖÂÐÔÂß¼­¼°Æä³Ö¾Ã»¯ÉèÊ©£¬ ²¢Ê¹ÅŲéÊÂÎñÖеÄÎÊÌâ¸üÈÝÒס£

   
2320 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ