Êý¾ÝÒ»ÖÂÐÔÊǹ¹½¨ÒµÎñϵͳÐèÒª¿¼ÂǵÄÖØÒªÎÊÌâ
£¬ ÒÔÍùÎÒÃÇÊÇÒÀ¿¿Êý¾Ý¿âÀ´±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£µ«ÊÇÔÚ΢·þÎñ¼Ü¹¹ÒÔ¼°·Ö²¼Ê½»·¾³ÏÂʵÏÖÊý¾ÝÒ»ÖÂÐÔÊÇÒ»¸öºÜÓÐÌôÕ½µÄµÄÎÊÌâ¡£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Éè¼Æ½âñîÁË·þÎñÓëÊý¾ÝÒ»ÖÂÐÔÂß¼¼°Æä³Ö¾Ã»¯ÉèÊ©£¬
²¢Ê¹ÅŲéÊÂÎñÖеÄÎÊÌâ¸üÈÝÒס£ |