±à¼ÍƼö: |
Ëæ×ÅÈí¼þϵͳ´Óµ¥ÌåÓ¦ÓÃÂõÏò΢·þÎñ¼Ü¹¹ÒÔ¼°Êý¾Ý¿âÑ¡ÐÍÈ¥ÖÐÐÄ»¯¡¢Òì¹¹»¯µÄÇ÷ÊÆ£¬´«Í³µÄACIDÊÂÎñÔÚ·Ö²¼Ê½ÏµÍ³ÉÏÄÜ·ñÑÓÐø£¬ÈçºÎÂ䵨£¬ÓÐÄÄЩעÒâÊÂÏ±¾ÎĽ«Î§ÈÆ·Ö²¼Ê½ÊÂÎñÕâÒ»¼¼ÊõÒéÌ⣬½éÉÜFreeWheelºËÐÄÒµÎñϵͳÔÚÏà¹ØÁìÓòµÄÒµÎñÐèÇó¡¢¼¼Êõ¾ö²ßºÍÏßÉÏʵ¼ù¡£
±¾ÎÄÀ´×ÔÓÚinfoq£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
·Ö²¼Ê½ÊÂÎñµÄÌôÕ½
¼¼ÊõÑݽø
FreeWheel ºËÐÄÒµÎñ²úÆ·Àú¾Ê®¶àÄêµÄ»ýÀۺ͵ü´ú£¬°éËæ×ÅÊý¾ÝÌåÁ¿ºÍ¹¦Äܸ´ÔӶȵÄÉÏÉý£¬Ö§³Å FreeWheel
ºËÐÄÒµÎñµÄ¹¤³ÌÍŶÓËù²ÉÓúÍ̽Ë÷µÄ¼¼ÊõÒ²ÔÚ²»¶ÏÑÝ»¯ºÍ¸ïС£
ÏµÍ³ÍØÆË·½Ã棺

ÔçÆÚ FreeWheel ºËÐÄÒµÎñϵͳÊÇÒ»¸öµ¥ÌåÓ¦Óã¨Monolith£©£ºÔÚͬһ̨·þÎñÆ÷µÄͬһ¸ö½ø³ÌÖУ¬Íê³É½ÓÊÕ¿Í»§ÇëÇó¡¢´¦ÀíÇëÇó¡¢Êý¾Ý´æ´¢¡¢·µ»ØÏìÓ¦µÈ²½Ö衣ΪÁËÌáÉýϵͳÕûÌåµÄ¿É¿¿ÐÔ£¬·½±ã¸÷¸öÄ£¿éµÄ¶ÀÁ¢ÑÝ»¯£¬¹¤³ÌÍŶӶԵ¥ÌåÓ¦ÓýøÐÐÁ˲ð·Ö²¿ÊðºÍ·þÎñ»¯£¬ÂõÏòÁËÃæÏò·þÎñµÄ¼Ü¹¹£¨SOA£©¡£Ëæ×Å·þÎñµÄ²»¶Ïϸ·Ö£¬µ¥¸ö·þÎñµÄ¹¦ÄܱäµÃ¸ü¼Ó¾Û½¹£¬»ù´¡·þÎñºÍ¹«ÓÃÉèÊ©µÄ×éºÏ/±àÅÅÂß¼Ôò±äµÃ¸ü¼Ó´í×Û¸´ÔÓ£¬ÓÐÏò΢·þÎñ·¢Õ¹µÄÇ÷ÊÆ¡£ÒÀÍнüÄêÀ´Å·¢Õ¹µÄÔÆ¼ÆËãÆ½Ì¨
AWS£¬FreeWheel µÄ¼¼ÊõÍŶӻ¹ÔÚ»ý¼«Ì½Ë÷ÎÞ·þÎñ£¨Serverless£©¼¼Êõ¡£
Êý¾Ý´æ´¢·½Ã棺

FreeWheel ºËÐÄÒµÎñϵͳ×îÔç¹ã·ºÊ¹ÓÃÁËÒÔ MySQL Ϊ´ú±íµÄ¹ØÏµÐÍÊý¾Ý¿â£¨RDBMS£©¡£ºóÀ´ÎªÁËÂú×ã¶àÑù»¯Ë÷ÒýºÍ²éѯÊý¾ÝµÄÐèÇó£¬ÒýÈëÁËÒÔ
ApacheSolr ºÍ ElasticSearch Ϊ´ú±íµÄËÑËØÒýÇæ£¨Search Engine£©¡£Ëæ×ÅÊý¾ÝÌåÁ¿µÄÔö³¤£¬´«Í³µÄ¹ØÏµÐÍÊý¾Ý¿âÒÑÎÞ·¨Âú×ã·Ö²¼Ê½´æÈ¡º£Á¿Êý¾ÝµÄÐèÇó£¬Îª´ËÓÖÒýÈëÁËÒÔ
AmazonDynamoDB ºÍ MongoDB Ϊ´ú±íµÄ NoSQL Êý¾Ý¿â ¡£
ÊÂÎñÀàÐèÇó
ÔÚÖî¶à±ä»¯±³ºó£¬¿Í»§¶àÄê»ýÀÛÏÂÀ´µÄʹÓÃϰ¹ßÆäʵÊÇÄÑÒԸıäµÄ¡£¶ø¿´ÉÏÈ¥ÈÕÐÂÔÂÒìµÄ²úÆ·µü´úÐèÇ󣬾¹ý³éÏó²»ÄÑ·¢ÏÖһЩºã¶¨µÄ¹æÂɺÍģʽ£º
ͬ²½ºÍÓÐÐòµÄÊý¾Ý±ä¸ü£º¿Í»§Ï°¹ßÓÚÔÚ¼¯ÖеÄÈë¿Ú£¨UI / API£©Ìá½»Ò»×éÊý¾Ý±ä¸üÇëÇó£¬Ï£ÍûÔÚ¾¡¿ÉÄ̵ܶÄʱ¼äÄÚ£¬µÃµ½·µ»Ø½á¹û£¨³É¹¦»òʧ°Ü£©£»½ÓÏÂÀ´×öºÎÖÖ²Ù×÷£¬ÌύʲôÊý¾Ý£¬È¡¾öÓÚ֮ǰ²½ÖèµÄÖ´Ðнá¹û¡£
ÅúÁ¿Ð޸ģ¬Í³Ò»½á¹û£ºÒ»´ÎÇëÇóÈç¹û¶ÔÓ¦¶àÌõÊý¾Ý±ä¸ü²Ù×÷£¨Ôö¼Ó¡¢É¾³ý¡¢ÐÞ¸ÄÊý¾Ý£©£¬²»¹ÜÕâЩ²Ù×÷·¢ÉúÔÚÄÄЩ·þÎñ¡¢Âäµ½ÄĸöÊý¾Ý¿â£¬×îºÃҪô¶¼³É¹¦£¬ÒªÃ´¶¼Ê§°Ü¡£
´«Í³¹ØÏµÐÍÊý¾Ý¿âÖУ¬Ò»ÅúÊý¾Ý²Ù×÷ͬʱ³É¹¦¡¢Í¬Ê±Ê§°ÜµÄÕâÀàÐèÇó¹²ÐÔ±»³éÏóΪÊÂÎñÐÔ£¬Ó¢ÎÄËõдΪ ACID£º
A £¨Atomicity, Ô×ÓÐÔ£©£ºÒ»×éÊý¾Ý²Ù×÷Èç¹ûÆäÖÐij²½²Ù×÷ʧ°Ü£¬Ö®Ç°µÄ²Ù×÷Ò²Òª»Ø¹ö£¬²»ÔÊÐí³öÏÖ²¿·Ö³É¹¦²¿·Öʧ°ÜµÄÇé¿ö¡£
C£¨Consistency£¬Ò»ÖÂÐÔ£©£ºÊý¾Ý²Ù×÷·ûºÏijÖÖÒµÎñÔ¼Êø¡£Õâ¸ö¸ÅÄîÀ´Ô´ÓÚ²ÆÎñ¶ÔÕËÁìÓò£¬ÍØÕ¹µ½Êý¾Ý¿âÉè¼ÆÉϵĺ¬Òå±È½ÏÄ£ºý£¬ÖÚ˵·×ç¡¡£ÉõÖÁÓÐ×ÊÁÏ˵CÊÇΪÁË´Õ³ÉACIDÕâ¸öËõд¶øÌí¼ÓµÄ¡£
I£¨Isolation£¬¸ôÀëÐÔ£©£º¶Ô²¢·¢µÄÊý¾Ý²Ù×÷ÓÐÒ»¶¨µÄ¸ôÀëÐÔ¡£IsolationÊǷֵȼ¶µÄ£¬
×î²îµÄÇé¿öÊǺÁÎÞ¸ôÀë¡¢»¥Ïà¸ÉÈÅ£»×îºÃµÄÇé¿öÊDz¢·¢²Ù×÷µÈЧÓÚһϵÁд®ÐвÙ×÷£¨Serializable£¬¿É´®Ðл¯£©¡£IsolationµÈ¼¶Ô½¸ß£¬Êý¾Ý¿âÐèÒªµÄ×ÊÔ´Ô½¶à£¬´æÈ¡Êý¾ÝµÄÐÔÄÜ£¨ÈçÍÌÍÂÁ¿¡¢ÑÓ³Ù£©Ô½²î¡£
D£¨Durability£¬³Ö¾ÃÐÔ£©£ºµ½´ïÊý¾Ý¿âµÄÇëÇ󲻻ᡰÇáÒס±¶ªÊ§¡£Í¨³£Êý¾Ý¿âÉè¼ÆÎĵµ»á¶Ô¡°ÇáÒס±×ö¾ßÌåµÄ¶¨Ò壬±ÈÈçÔÚ´ÅÅÌ»µµÀ£¬»úÆ÷Í£µçÖØÆôµÈÌõ¼þϲ»»á¶ªÊý¾Ý¡£
Ëæ×ÅϵͳµÄ·þÎñÍØÆË´Óµ¥ÌåÓ¦ÓÃÂõÏò΢·þÎñʱ´ú£¬ÒÔ¼°Êý¾Ý¿âÊýÁ¿ºÍÖÖÀàµÄÔö³¤£¬·Ö²¼Ê½ÏµÍ³ÔÚÂú×㴫ͳ ACID
±ê×¼µÄÊÂÎñÐÔÐèÇóÉÏ£¬ÃæÁÙ×ÅеÄÌôÕ½¡£ËùνµÄ CAP ÈýÑ¡¶þ¶¨ÀíÊÇ˵£¬ÈκÎÒ»¸ö·Ö²¼Ê½ÏµÍ³²»ÄÜͬʱÂú×ãÒÔÏÂÈý¸öÌØÐÔ£º
C£¨Consistency£¬Ç¿Ò»ÖÂÐÔ£©£º·Ö²¼Ê½ÏµÍ³µÄÈκνڵã¶Ôͬһ¸ökeyµÄ¶ÁдÇëÇ󣬵õ½µÄ½á¹ûÍêȫһÖ¡£Ò²½ÐÏßÐÔÒ»ÖÂÐÔ¡£
A£¨Availability£¬¿ÉÓÃÐÔ£©£ºÃ¿´ÎÇëÇó¶¼Äܵõ½¼°Ê±ºÍÕý³£µÄÏìÓ¦£¬µ«²»±£Ö¤Êý¾ÝÊÇ×îеġ£
P£¨Partition tolerance£¬³ÐÊÜÍøÂç·Ö¸ô£©£º·Ö²¼Ê½ÏµÍ³ÔÚ½ÚµãÖ®¼äÎÞ·¨Á¬Í¨»òÕßÁ¬½Ó³¬Ê±µÄǰÌáÏ»¹ÄÜά³ÖÔËת¡£
ÔÚ CAP Èý¸öÌØÐÔÖУ¬P ͨ³£ÊÇ·Ö²¼Ê½ÏµÍ³ÎÞ·¨¹æ±ÜµÄ¼È¶¨ÊÂʵ£¬Éè¼ÆÕßÖ»ÄÜÔÚ C ºÍ A Ö®¼ä½øÐÐÈ¡Éá¡£´ó²¿·Öϵͳ¾¹ý×ۺϿ¼ÂÇ£¬¶¼Ñ¡ÔñÁË
A ¶ø·ÅÆú C£¬Ä¿±êÊǸ߿ÉÓã¬×îÖÕÒ»Ö£¨²»¹ý´ï³ÉÒ»ÖÂÐèÒªµÄʱ¼äÎÞÉÏÏÞ£©¡£ÉÙ²¿·Öϵͳ¼á³Ö C ¶ø·ÅÆú
A£¬¼´Ñ¡ÔñǿһÖ¡¢µÍ¿ÉÓ㨵¥½Úµã¹ÊÕϽ«µ¼Ö·þÎñ²»¿ÉÓ㬿ÉÓÃÂÊÈ¡¾öÓÚ¹ÊÕÏÆµ¶ÈºÍ»Ö¸´Ê±¼ä£¬ÎÞÉÏÏÞ£©¡£
¼¼ÊõÑ¡ÐÍÓë·½°¸Éè¼Æ
Éè¼ÆÄ¿±ê
ÎÒÃÇ¿¼ÂÇͨ¹ýÒýÈëÒ»Ì×·Ö²¼Ê½ÊÂÎñ·½°¸£¬´ï³ÉÒÔϸ÷ÏîÉè¼ÆÄ¿±ê£º
ÊÂÎñÐÔÌá½»£º¼´ACIDÖеÄAtomicity¡£ÒµÎñ¸ù¾ÝÐèÒª£¬¿ÉÒÔ¶¨ÒåÒ»×éÊý¾Ý²Ù×÷£¬¼´·Ö²¼Ê½ÊÂÎñ£¬Õâ×é²Ù×÷ÎÞÂÛ·¢ÉúÔÚÄĸö·þÎñºÍÊý¾Ý¿â£¬ÒªÃ´Í¬Ê±³É¹¦£¬ÒªÃ´Í¬Ê±Ê§°Ü¡£ÊÂÎñÖÐÖ»ÒªÈκÎÒ»¸ö²Ù×÷³öÏÖʧ°Ü£¬
֮ǰµÄ²Ù×÷¶¼ÐèÒª»Ø¹ö¡£
ϵͳ¸ß¿ÉÓ㺵±²¿·Ö·þÎñµÄ²¿·Ö½Úµã³öÏÖ¹ÊÕÏʱ£¬ÏµÍ³ÕûÌåÈÔÈ»¿ÉÓá£Í¨¹ýÖ§³Ö·þÎñ¿ìËÙÀ©ÈݺÍËõÈÝ£¬ÊµÏÖϵͳÕûÌåµÄ¸ßÍÌÍÂÁ¿£¬¾¡¿ÉÄÜËõ¶ÌÊý¾Ý´ï³ÉÒ»ÖÂÐÔµÄÑÓ³Ù¡£¿ò¼Ü±¾ÉíÏûºÄµÄ×ÊÔ´µÍ£¬ÒýÈëµÄ¶îÍâÑÓ³ÙС¡£
Êý¾Ý×îÖÕÒ»ÖÂÐÔ£º²¢·¢²Ù×÷ͬһÌõÊý¾ÝµÄÇëÇóµ½´ï¸÷¸ö·þÎñºÍÊý¾Ý¿âµÄ´ÎÐò±£³ÖÒ»Ö£¬²»³öÏÖ¶ªÊ§¡¢ÂÒÐò¡£ ¾ÙÒ»¸ö˳Ðò²»Ò»ÖµÄÀý×Ó£º

ÈçÉÏͼ£¬A¡¢B¡¢C ÊÇÈý¸ö·þÎñ/Êý¾Ý¿â£¬ 1 ºÍ 2 Ϊ²¢·¢ÐÞ¸Äͬһ¸ö key µÄÁ½¸öÇëÇó¡£ÓÉÓÚËæ»úÍøÂçÑÓ³Ù£¬×îÖÕÂäÔÚÈý¸ö·þÎñ/Êý¾Ý¿âµÄÖµ²»Ò»Ö£¬A
Ϊ 2 µÄÖµ£¬B ºÍ C Ϊ 1 µÄÖµ¡£
Ö§³Ö·þÎñ¶ÀÁ¢ÑÝ»¯ºÍ²¿Ê𣺳ýÁËÖ§³ÖʹÓÃRPCºÍ¸ø¶¨ÐÒé½øÐÐͨÐÅÖ®Í⣬²»¶Ô·þÎñµÄʵÏÖ·½Ê½×ö¹ý¶àÒªÇóºÍ¼ÙÉè¡£
Ö§³Ö·þÎñʹÓÃÒì¹¹µÄÊý¾Ý´æ´¢¼¼Êõ£ºÊ¹Óò»Í¬µÄÊý¾Ý´æ´¢¼¼Êõ£¨¹ØÏµÐÍÊý¾Ý¿â¡¢NoSQL¡¢ËÑË÷ÒýÇæµÈ£©£¬ÊÇFreeWheelºËÐÄÒµÎñϵͳµÄ¸÷¸ö·þÎñµÄÏÖ×´ºÍŬÁ¦·½Ïò¡£
¼Ü¹¹ÇÖÈëÐԵͣ¬Ò×ÓÚ²ÉÓ㺲»¸Ä¶¯»òÉٸ͝ÏÖÓÐϵͳµÄ´úÂëºÍ²¿Ê𣬾¡Á¿Ö»Í¨¹ýÐÂÔö´úÂëÒÔ¼°·þÎñ²¿Êð£¬À´ÊµÏÖ·Ö²¼Ê½ÊÂÎñµÄÔËÐл·¾³ºÍ¾ßÌåÒµÎñÁ÷³Ì¡£¿ò¼ÜºÍÒµÎñµÄ·Ö¹¤Ã÷È·£¬¿ò¼Ü´úÂëά³Ö100%²âÊÔ¸²¸ÇÂÊ£¬
ÒµÎñ´úÂë100%¿É²âÊÔ£¬²âÊԳɱ¾µÍ¡£±£³Öϵͳ¸ß¿É¼ûÐԺͿÉÔ¤²âÐÔ£¬¾¡¿ÉÄÜΪ¿ìËÙ¹ÊÕ϶¨Î»ºÍ»Ö¸´Ìṩ±ãÀû¡£
Ö§³Öͬ²½ºÍÒì²½Á÷³Ì£ºÌṩһÖÖ»úÖÆ£¬½«UI/APIºÍºó¶ËÈë¿Ú·þÎñÖ®¼äµÄͬ²½½»»¥Á÷³Ì£¬Óë¿ÉÄܳöÏֵĺó¶Ë·þÎñÖ®¼äµÄÒì²½Á÷³ÌÏÎ½ÓÆðÀ´¡£
Ö§³ÖÊÂÎñ²½ÖèÒÀÀµ£ºÊÂÎñÀïÃæÄ³¸ö²½ÖèµÄÊý¾Ý²Ù×÷ÊÇ·ñÖ´ÐС¢ÈçºÎÖ´ÐУ¬È¡¾öÓÚÇ°ÃæµÄ²½ÖèµÄ²Ù×÷½á¹û¡£
¼¼ÊõÑ¡ÐÍ
XA ÐÒéºÍ¶à½×¶ÎÌá½»
XA ÐÒéͨ¹ýÒýÈëÒ»¸öе÷ÕߵĽÇÉ«£¬ÒÔ¼°ÒªÇóËùÓвÎÓëÊÂÎñµÄÊý¾Ý¿âÖ§³Ö Two-phaseCommit£¨2PC£¬Á½½×¶ÎÌá½»£¬¼´ÏÈ×¼±¸£¬ºóÌá½»»ò»Ø¹ö£©À´ÊµÏÖ·Ö²¼Ê½ÊÂÎñ¡£

£¨Í¼Æ¬À´Ô´£ºdocs.particular.net)
ʹÓà XA ʵÏÖ·Ö²¼Ê½ÊÂÎñµÄÓŵãÓУº
ǿһÖÂÐÔ£ºÊµÏÖÁËÊý¾ÝÔÚ¶à¸öÊý¾Ý¿âÉϵÄǿһÖÂÌá½»¡£
ÒµÎñÇÖÈëÐÔС£ºÍêÈ«¿¿Êý¾Ý¿â±¾ÉíµÄÖ§³ÖʵÏÖ·Ö²¼Ê½ÊÂÎñ£¬²»ÐèÒª¸Ä¶¯ÒµÎñÂß¼¡£
ʹÓà XA ʵÏÖ·Ö²¼Ê½ÊÂÎñµÄȱµãÒ²ºÜÃ÷ÏÔ£º
µ¥µã¹ÊÕÏ£ºÐµ÷Õß»òÕßÈÎÒâÒ»¸öXAÊý¾Ý¿â¶¼ÊÇÄÜÒýÆð¹ÊÕϵĵ¥µã£¨Single point of failure)¡£
µÍÐÔÄÜ£ºÖ§³ÖXAÌØÐÔµÄÊý¾Ý¿âÔÚÉè¼ÆÉÏÓдóÁ¿µÄ×èÈûºÍ×ÊԴռλ²Ù×÷£¬ Êý¾ÝÌåÁ¿ºÍÍÌÍÂÁ¿À©Õ¹ÐԲ
Êý¾Ý¿âÑ¡ÐÍÏÞÖÆ£º¶ÔÓÚ·þÎñµÄÊý¾Ý¿âÑ¡ÐÍÒýÈëÁËÖ§³ÖXAÐÒéÕâ¸öÏÞÖÆ¡£
XA ÔÚÉè¼ÆÉÏûÓп¼Âǵ½·Ö²¼Ê½ÏµÍ³µÄÌØµã£¬ÊÂʵÉÏÊÇÒ»¸öǿһÖ¡¢µÍ¿ÉÓõÄÉè¼Æ·½°¸£¬¶ÔÍøÂç·Ö¸ôµÄÈÝÈ̶Ƚϲ
Saga
Saga ÔÒâÊdz¤ÆªÉñ»°¹ÊÊ¡£ËüʵÏÖ·Ö²¼Ê½ÊÂÎñµÄ˼·ÊÇʵÏÖÒ»ÖÖÇý¶¯Á÷³Ì»úÖÆ£¬°´Ë³ÐòÖ´ÐÐÿ¸öÊý¾Ý²Ù×÷²½Ö裬һµ©³öÏÖʧ°Ü£¬¾Íµ¹ÐòÖ´ÐÐ֮ǰ¸÷²½Öè¶ÔÓ¦µÄ¡°²¹³¥¡±²Ù×÷¡£ÕâÒªÇóÿ¸ö²½ÖèÉæ¼°µ½µÄ·þÎñÌṩÓëÕýÏò²Ù×÷½Ó¿Ú¶ÔÓ¦µÄ²¹³¥²Ù×÷½Ó¿Ú¡£
ʹÓà Saga ʵÏÖ·Ö²¼Ê½ÊÂÎñµÄÓŵãÓУº
΢·þÎñ¼Ü¹¹£ºÍ¨¹ý¶ÔһЩ»ù´¡·þÎñ½øÐÐ×éºÏ/±àÅÅÀ´Íê³É¸÷ÖÖÒµÎñÐèÇó¡£
Êý¾Ý¿â¼æÈÝÐԸߣº¶Ôÿ¸ö·þÎñʹÓúÎÖÖÊý¾Ý¿â¼¼ÊõûÓÐÈκÎÒªÇ󣬷þÎñÉõÖÁ¿ÉÒÔ²»Ê¹ÓÃÊý¾Ý¿â¡£
ʹÓà Saga ʵÏÖ·Ö²¼Ê½ÊÂÎñµÄȱµãÓУº
ÒªÇó·þÎñÌṩ²¹³¥½Ó¿Ú£ºÔö¼ÓÁË¿ª·¢ºÍά»¤µÄ³É±¾¡£
²»·ûºÏACID£ºÃ»ÓÐÉæ¼°IsolationºÍDurability¡£
Saga ´ÓÁ÷³ÌÉÏ£¬»¹¿É·ÖΪÁ½ÖÖģʽ£ºOrchestration£¨½»ÏìÀÖ£©ºÍ Choreography£¨ÆëÎ裩¡£
Saga Orchestration
Saga Orchestration ÒýÈëÁËÀàËÆ XA ÖеÄе÷ÕߵĽÇÉ«£¬À´Çý¶¯Õû¸öÁ÷³Ì¡£

£¨Í¼Æ¬À´Ô´£ºmedium.com£©
ÈçÉÏͼ£¬Order Service ·¢Æð·Ö²¼Ê½ÊÂÎñ£¬Orchestrator ¸ºÔðÇý¶¯·Ö²¼Ê½ÊÂÎñÁ÷³Ì£¬PaymentService
ºÍ Stock Service ¸ºÔðÌṩÊý¾Ý²Ù×÷µÄÕýÏò½Ó¿ÚºÍ²¹³¥½Ó¿Ú¡£
Saga Choreography
Saga Choreography ½«Á÷³Ì·Ö²ðµ½Ã¿¸ö²½ÖèÉæ¼°µ½µÄ·þÎñÖУ¬ÓÉÿ¸ö·þÎñ×ÔÐе÷ÓúóÐò»òǰÐò·þÎñ¡£

£¨Í¼Æ¬À´Ô´£ºmedium.com£©
ÈçÉÏͼ£¬Order Service Ö±½Óµ÷Óà PaymentService À´·¢Æð·Ö²¼Ê½ÊÂÎñ£¬ºóÕßÔÙµ÷ÓÃ
Stock Service£¬Ö±µ½Íê³ÉËùÓв½Ö裻һµ©Ä³²½Öè³öÏÖʧ°Ü£¬·þÎñÖ®¼ä»á·´Ïòµ÷Óá£
ACID ÊÂÎñÁ´
ACID ÊÂÎñÁ´¿ÉÒÔ¿´×÷ÊÇ SagaChoreography µÄÔöÇ¿°æ£¬ËüÒªÇó²ÎÓë·Ö²¼Ê½ÊÂÎñµÄËùÓзþÎñ¶¼Ê¹ÓÃÖ§³Ö´«Í³
ACID ÊÂÎñµÄÊý¾Ý¿â£¬È»ºóͨ¹ý½«Ã¿¸ö·þÎñÄÚ²¿µÄÊý¾Ý²Ù×÷ºÍͬ²½µ÷ÓÃÏàÁÚ·þÎñµÄ²Ù×÷´ò°üµ½Ò»¸ö ACID
ÊÂÎñÖУ¬Í¨¹ý ACID ÊÂÎñµÄÁ´Ê½µ÷ÓÃʵÏÖ·Ö²¼Ê½ÊÂÎñ¡£
ʹÓà ACID ÊÂÎñÁ´ÊµÏÖ·Ö²¼Ê½ÊÂÎñµÄÓŵãÓУº
·ûºÏACID£ºÃ¿¸ö²½Öè¶¼ÊÇ´«Í³ACIDÊÂÎñ£¬ÕûÌåÒ²·ûºÏACIDÊÂÎñÐÔ
²»ÐèÒª·þÎñÌṩ²¹³¥½Ó¿Ú£ºÓÉÖ§³ÖACIDÊÂÎñµÄÊý¾Ý¿â½øÐлعö²Ù×÷
ʹÓà ACID ÊÂÎñÁ´ÊµÏÖ·Ö²¼Ê½ÊÂÎñµÄȱµãÓУº
Êý¾Ý¿âÑ¡ÐÍÏÞÖÆ£º¶ÔÓÚ·þÎñµÄÊý¾Ý¿âÑ¡ÐÍÒýÈëÁËÖ§³Ö´«Í³ACIDÊÂÎñÕâ¸öÏÞÖÆ¡£
·þÎññîºÏ¹ý¶à£º·þÎñÖ®¼äµÄÒÀÀµÊÇÁ´Ê½ÍØÆË£¬²»·½±ãµ÷Õû²½Öè˳Ðò£»Ëæ×ÅʹÓ÷ֲ¼Ê½ÊÂÎñµÄ¸÷ÖÖÒµÎñÁ÷³ÌµÄÔö¼Ó£¬ºÜÈÝÒײúÉú·þÎñÖ®¼äµÄÑ»·ÒÀÀµ£¬¸ø²¿ÊðÔì³ÉÀ§ÄÑ¡£
Ñ¡Ôñ Saga Orchestration
ÎÒÃÇÊ×ÏÈÅųýÁË XA ·½°¸£¬ËüÎÞ·¨Âú×ãϵͳµÄ¿ÉÓÃÐÔºÍÀ©Õ¹ÐÔ¡£Æä´ÎÅųýÁË ACID ÊÂÎñÁ´£¬ÒòΪËü²»¼æÈÝÒµÎñÏÖÓеÄÊý¾Ý¿âÑ¡ÐÍ£¬Î´À´»¹»áÒýÈë¸ü¶à²»Ö§³Ö
ACID ÊÂÎñµÄÊý¾Ý¿â¼¼Êõ¡£
×îÖÕ¾ö¶¨²ÉÓà Saga À´ÊµÏָ߿ÉÓᢵÍÑÓ³Ù¡¢×îÖÕÒ»Öµķֲ¼Ê½ÊÂÎñ¿ò¼Ü£¬Ö÷ÒªÔÒòÊÇÆäÉè¼ÆË¼Ïë·Ç³£ÆõºÏÓÚĿǰ
FreeWheel ºËÐÄÒµÎñÍÅ¶ÓµÄ SOA/΢·þÎñ/Serverless ʵ¼ù£¬¼´Í¨¹ý¶ÔһЩ»ù´¡·þÎñ£¨¶ÔÓÚ
Serverless ÆäʵÊÇ Lambda£¬ÒÔϲ»ÔÙÇø·Ö£©½øÐÐ×éºÏ/±àÅÅÀ´Íê³É¸÷ÖÖÒµÎñÐèÇó¡£
ÔÚ Saga µÄÁ½¸ö±äÖÖÖУ¬ÎÒÃÇÑ¡ÔñÁË Orchestration ¶ø²»ÊÇ Choreography£¬ÔÒòÊÇ£º
·þÎñ½âñOrchestrationÌìÈ»µØ½«ÊÂÎñ±¾ÉíµÄÇý¶¯Âß¼ºÍÖÚ¶à»ù´¡·þÎñ½âñ¶øChoreographyÔÚ²»ÒýÈë¶ÓÁеÄǰÌáÏ£¬ÈÝÒ׳öÏÖ·þÎñ¼äÑ»·ÒÀÀµµÄÎÊÌâ¡£
·þÎñ·Ö²ã£ºOrchestrationÌìÈ»µØ½«·þÎñ·Ö³ÉÁË×éºÏ/±àÅÅÆ÷ºÍ»ù´¡·þÎñÁ½¸öµ÷Óò㼶£¬ÓÐÀûÓÚÒµÎñÂß¼µÄÀ©Õ¹ºÍÖØÓá£
Êý¾Ý½âñ¶ÔÓÚij¸ö²½ÖèÒÀÀµÇ°Ðò¶à¸ö²½Öè½á¹ûµÄÒµÎñ³¡¾°£¬ºóÕßÐèҪǰÐòËùÓзþÎñ͸´«ÆäËû·þÎñµÄÊý¾Ý£¬¶øOrchestration²»ÐèÒª¡£
²ÉÓà Saga Orchestration£¬ÊƱØÐèÒªÏë°ì·¨¿Ë·þËüµÄÁ½¸öȱµã£¬¼´ÒªÇó»ù´¡·þÎñÌṩ²¹³¥½Ó¿Ú£¬ÒÔ¼°Ã»ÓÐʵÏÖ
ACID ÖÐµÄ Isolation ºÍ Durability¡£
ÈçºÎʵÏÖÊý¾Ý²¹³¥²Ù×÷ÄØ£¿Êý¾Ý²Ù×÷¿É·ÖΪ Insert£¨Ð½¨£©£¬Delete£¨É¾³ý£©ºÍ Update£¨¸üУ©ÈýÖÖ£¬¶ø
Update ÓÖ¿Éϸ·ÖΪ Full update£¨Replace£¬ÕûÌå¸üУ©ºÍ Partial update£¨Patch£¬²¿·Ö¸üÐÂ)£¬ËüÃǶÔÓ¦µÄ²¹³¥²Ù×÷ÈçÏ£º
Insert£º²¹³¥²Ù×÷ÊÇDelete£¬²ÎÊýΪÊý¾ÝµÄID£¬ÒªÇóÔÚInsert²Ù×÷Ö®ºó¼Ç¼ÏÂÊý¾ÝµÄID¡£
Delete£º²¹³¥²Ù×÷ÊÇInsert£¬²ÎÊýΪÍêÕûµÄÊý¾Ý£¬ÒªÇóÔÚ½øÐÐDelete²Ù×÷ǰ¼Çϵ±Ç°ÍêÕûµÄÊý¾Ý¡£
Full update£º²¹³¥²Ù×÷ÊÇÁíÒ»¸öFull update£¬²ÎÊýΪÍêÕûµÄÊý¾Ý£¬ÒªÇóÔÚ½øÐÐÔFull
update²Ù×÷ǰ¼Çϵ±Ç°ÍêÕûµÄÊý¾Ý¡£
Partial update£º²¹³¥²Ù×÷ÊÇPartial / Full update£¬²ÎÊýΪ¸Ä¶¯Ç°µÄ²¿·ÖÊý¾Ý»òÕßÍêÕûÊý¾Ý£¬ÒªÇóÔÚ½øÐÐÔPartial
update²Ù×÷ǰ¼Çϵ±Ç°²¿·Ö»òÍêÕûµÄÊý¾Ý¡£
ÔÙÀ´¿´ÏÂÈçºÎʵÏÖ ACID ÖÐµÄ I ºÍ D£º
Isolation£ºÆäʵÊDz¢·¢¿ØÖƵÄÎÊÌ⣬¼´ÈçºÎ´¦Àí¶ÔͬһÌõÊý¾Ý£¨Í¬Ò»¸ökey£©µÄ²¢·¢²Ù×÷¡£MySQL¸ø³öµÄ½â¾ö·½°¸ÊÇ¶à°æ±¾²¢·¢¿ØÖÆ£¨MVCC£©£¬È»¶ø²»ÊÇËùÓеÄÊý¾Ý¿â¶¼Ö§³ÖÕâÒ»ÌØÐÔ¡£¿ØÖƲ¢·¢µÄÁíÒ»Ìõ˼·ÊÇÏû³ý²¢·¢£¬»¯²¢Îª´®£¬Ò»°ãͨ¹ýÇÀÕ¼Ëø»òÕßʹÓöÓÁÐÀ´ÊµÏÖ¡£¿¼Âǵ½µÈ´ýËø¶ø²úÉúµÄÐÔÄÜËðºÄÒÔ¼°ËøË³Ðò²»Ò»Öµ¼ÖµĻ¥ËøÎÊÌ⣬ÓÅÏÈ¿¼ÂÇʹÓöÓÁС£
Durability£ºÖ¸³É¹¦Ìá½»µ½ÏµÍ³µÄÊÂÎñ²»ÄÜÖÐ;¶ªÊ§£¬¼´ÊµÏÖÊý¾Ý³Ö¾Ã»¯¡£ÐèÒª¿¼ÂǵĹÊÕϰüÀ¨Êý¾Ý´æ´¢½ÚµãµÄ¹ÊÕϺÍÊý¾Ý´¦Àí½ÚµãµÄ¹ÊÕÏ¡£
×ÛÉÏËùÊö£¬ÎÒÃÇÐèÒªÔö¼ÓÒ»¸ö¶ÓÁÐ+³Ö¾Ã»¯µÄ¼¼Êõ·½°¸À´²¹×ã Saga µÄ¶Ì°å£¬ÊµÏÖ ACID¡£½áºÏ FreeWheel
ºËÐÄÒµÎñϵͳÏÖÓеĻù´¡ÉèÊ©£¬ÎÒÃÇÓÅÏÈ¿¼ÂÇÒýÈë ApacheKafka£¨ÒÔϼò³Æ Kafka£©¡£
ÒýÈë Kafka
Kafka ÊÇÒ»¸ö¹¦ÄܷḻµÄ¶ÓÁÐ+³Ö¾Ã»¯½â¾ö·½°¸£¬Õë¶Ô·Ö²¼Ê½ÊÂÎñµÄÉè¼ÆÄ¿±ê£¬ÎÒÃÇ¿´ÖеÄÊÇËüµÄÕâЩÄÜÁ¦£º
ÏûÏ¢±£Ðò£ºÒýÈë¶ÓÁÐÀ´»¯²¢Îª´®£¬½â¾ö²¢·¢Ð´ÈëÊý¾ÝµÄIsolationÎÊÌâ¡£
ÏûÏ¢ËÍ´ï±£Ö¤£ºÖ§³Ö¡°ÖÁÉÙÒ»´Î¡±£¨at least once£©µÄÏûÏ¢ËÍ´ï±£Ö¤£¬¾ßÓÐÈßÓ౸·ÝºÍ¹ÊÕϻָ´ÄÜÁ¦£¬ÓÐÖúÓÚ½â¾öACIDµÄDurabilityÎÊÌâ¡£
ÐÔÄÜÓÅÐ㣺¸÷ÖÖ×ÊÁϱíÃ÷£¬Kafka±¾ÉíµÄЧÂʺͿɿ¿ÐÔ¶¼ÊÇÐÐÒµ±ê¸Ë£¬Èç¹ûʹÓõõ±£¬ËüÖÁÉÙ²»»á³ÉΪϵͳµÄÐÔÄÜÆ¿¾±¡£
ÁíÒ»·½Ã棬Kafka ×÷Ϊһ¸öÇ¿´óµÄ¶ÓÁнâ¾ö·½°¸£¬ËüµÄÖÚ¶àÌØÐÔ¸ø·Ö²¼Ê½ÊÂÎñµÄÉè¼ÆºÍʵÏÖ´øÀ´ÁËеĻúÓöºÍÌôÕ½¡£ÒýÈë¶ÓÁÐ֮ǰ£¬´Ó¿Í»§µã»÷ä¯ÀÀÆ÷°´Å¥£¬µ½Êý¾ÝÂäÅÌÔÙµ½·µ»ØÏìÓ¦Êý¾Ý£¬Ö÷Á÷³ÌÉϵĽڵ㶼ÊÇͬ²½½»»¥µÄ£º

ÈçÉÏͼ£¬ÊµÏß¼ýͷΪ RPC ÇëÇó£¬ÐéÏß¼ýͷΪ RPC ÏìÓ¦£¨ÏÂͬ£©£¬Êý¾Ý°´ÕÕÐòºÅ±ê×¢µÄ˳Ðò´Ó¿Í»§·¢Æð£¬ÏȺó¾¹ý
A¡¢B ºÍ C Èý¸ö·þÎñ£¬ËùÓв½Öè¶¼ÊÇͬ²½µÄ¡£
ÒýÈë¶ÓÁÐÖ®ºó£¬ÁÐÁ½¶ËµÄÉú²úÕߺÍÏû·ÑÕ߱˴˸ô¿ª£¬Õû¸ö¹ý³Ì±ä³ÉÁËͬ²½¡úÒì²½¡úͬ²½£º

ÈçÉÏͼ£¬1 ºÍ 2 Ö®¼äÊÇͬ²½µÄ£¬ 2 ºÍ 3 Ö®¼äÊÇÒì²½µÄ£¬½ÓÏÂÀ´µÄ 3 µ½ 7 ÓÖÊÇͬ²½µÄ¡£
ͨ¹ý»¯Í¬²½ÎªÒì²½£¬ÏµÍ³ÕûÌåµÄÍÌÍÂÁ¿ºÍ×ÊÔ´ÀûÓÃÂÊ¿ÉÒԵõ½½øÒ»²½µÄÌáÉý¡£ËæÖ®¶øÀ´µÄÎÊÌâÊÇΪÁËά³Öͬ²½µÄǰ¶ËÊý¾ÝÁ÷³Ì£¬ÐèÒªÔö¼Óͬ²½Á÷³ÌºÍÒì²½Á÷³ÌÈçºÎÏνӵÄÉè¼Æ¡£
ͬ²½×ªÒì²½±È½Ï¼òµ¥£¬Ôڴ˲»×öÌÖÂÛ¡£Ò첽תͬ²½µÄʱºò£¬ÐèÒª½¨Á¢Ò»ÖÖÏû·ÑÕßËùÔÚ½ÚµãºÍÉú²úÕßËùÔÚ½Úµã½øÐеã¶ÔµãͨÐŵĻúÖÆ¡£ÎÒÃDzÉÈ¡µÄ·½°¸ÊÇÖ±½Ó»Øµ÷£ºÉú²úÕ߰ѻص÷µØÖ·´ò°üµ½ÏûÏ¢ÀÏû·ÑÕß´¦ÀíÍê³Éºó½«´¦Àí½á¹û·¢Ë͵½»Øµ÷µØÖ·¡£
·Ö²¼Ê½ÊÂÎñ¼Ü¹¹
»ùÓÚ Saga Orchestration ºÍ Kafka µÄ·Ö²¼Ê½ÊÂÎñ¼Ü¹¹ÈçÏÂͼËùʾ£º

ÆäÖзþÎñ A ÊDZàÅÅ×éÖ¯Æ÷£¬Ëü¸ºÔðÇý¶¯ SagaOrchestration µÄÁ÷³Ì£¬ ·þÎñ B¡¢C¡¢D
ÊÇÈý¸öʹÓÃÁ˶ÀÁ¢ÇÒÒì¹¹µÄÊý¾Ý¿âµÄ»ù´¡·þÎñ¡£
ÓÉÓÚʹÓÃÁË Saga Orchestration ¶ø²»ÊÇ Choreography£¬Ö»ÓзþÎñ A
ÄܸÐÖªµ½·Ö²¼Ê½ÊÂÎñ²¢ÇÒÒÀÀµ Kafka ºÍ Saga£¬»ù´¡·þÎñ B¡¢C¡¢D Ö»ÐèÒª¶àʵÏÖ¼¸¸ö²¹³¥½Ó¿Ú¹©
A µ÷Óã¬Ã»ÓвúÉú¶Ô Kafka ºÍ Saga µÄÒÀÀµ¡£
·Ö²¼Ê½ÊÂÎñÁ÷³Ì
·þÎñ A ´Ó½Óµ½Óû§ÇëÇ󣬴¥·¢·Ö²¼Ê½ÊÂÎñ£¬·Ö²½Öèµ÷Óø÷¸ö»ù´¡·þÎñ£¬µ½×îÖÕ·µ»ØÏìÓ¦£¬Á÷³ÌÈçÏÂͼ£º

²½ÖèÏê½â£º
1-2: ·þÎñAµÄij¸ö½ÚµãÔÚ½Óµ½Óû§ÇëÇóºó£¬Ê×Ïȵ£µ±Éú²úÕߵĽÇÉ«£¬½«Óû§ÇëÇóºÍ»Øµ÷µØÖ·°ü×°³ÉÏûÏ¢·¢Ë͵½Kafka£¬È»ºó´¦Àí¸ÃÓû§ÇëÇóµÄ´¦Àíµ¥Ôª×èÈûµÈ´ý¡£
3-5: ͬһ¸ö·þÎñAµÄij¸ö½ÚµãµÄÏû·ÑÕß´ÓKafka½Óµ½ÏûÏ¢£¬¿ªÊ¼Çý¶¯Saga OrchestrationµÄÁ÷³Ì£¬°´ÕÕÒµÎñ¶¨ÒåµÄ˳ÐòºÍÂß¼ÒÀ´Îµ÷Ó÷þÎñBºÍCµÄ½Ó¿Ú¡£
6-7: SagaÁ÷³Ì½áÊøºó£¬Ïû·ÑÕßÏòKafka·¢ËÍÏû·Ñ½ø¶ÈÈ·ÈϲÙ×÷£¨ackMessage£¬Ò²¾ÍÊǸüÐÂconsumer
group offset£©£¬È»ºó½«½á¹û£¨³É¹¦»¹ÊÇʧ°Ü£¬×öÁËÄÄЩ¸Ä¶¯£©Í¨¹ýRPC»Øµ÷µØÖ··¢Ë͸øÉú²úÕß¡£
8: Éú²úÕߴӻص÷µØÖ·½Óµ½Êý¾Ýºó£¬ÕÒµ½¶ÔÓ¦µÄÓû§ÇëÇó´¦Àíµ¥Ôª£¬½â³ý×èÈû£¬×îºó½«½á¹û·â×°³ÉÓû§ÏìÓ¦¡£
¶ÓÁÐÏûÏ¢ÐÒéÉè¼Æ
Ò»Ìõ¶ÓÁÐÏûÏ¢ÖÁÉÙ°üº¬Á½²¿·ÖÐÅÏ¢£ºÔªÊý¾Ý£¨Metadata£©ºÍÄÚÈÝ£¨Content£©¡£
ÔªÊý¾Ý£ºÓÉ·Ö²¼Ê½ÊÂÎñ¿ò¼Ü¶ÁÈ¡ºÍдÈ룬ʹÓÃJSON¸ñʽ£¬×ֶθñʽ¹Ì¶¨£¬ÒµÎñ´úÂëÖ»ÄܶÁÈ¡£¬²»ÄÜдÈë¡£ÔªÊý¾ÝÖÐ×îÖØÒªµÄ×Ö¶ÎÊÇ·Ö²¼Ê½ÊÂÎñÏûÏ¢µÄÀàÐÍ£¨ÒÔϼò³ÆTxType£©¡£Éú²úÕßͨ¹ýÇ¿ÀàÐÍÀ´Ö¸¶¨ÏûÏ¢µÄTxType£»Ïû·ÑÕß½ø³ÌÖеķֲ¼Ê½ÊÂÎñ¿ò¼Ü»á¸ù¾ÝTxType½øÐÐʼþ·ÖÁ÷£¨event
sourcing£©£¬µ÷ÓöÔÓ¦ÒµÎñÂß¼½øÐÐÏû·Ñ¡£
ÄÚÈÝ£ºÓÉÒµÎñ´úÂë¶ÁÈ¡ºÍдÈ룬¸ñÊ½ËæÒ⣬¿ò¼Ü²»×ö½âÎö£¬Ö»Òª³¤¶È²»³¬¹ýKafka topicµÄÏÞÖÆ¼´¿É£¨Ä¬ÈÏ1MB£©¡£

Kafka ²¢ÐÐÏû·ÑÄ£Ð͵ĸĽø
Kafka ÉϵÄÏûÏ¢Êý¾Ý±»·Ö³É topic£¨Ö÷Ì⣩ºÍ partition£¨·ÖÇø£©Á½¸ö²ã¼¶£¬ÓÉ topic¡¢partition
ºÍ offset£¨Æ«ÒÆÁ¿£©À´Î¨Ò»±êʶһÌõÏûÏ¢¡£partition ÊǸºÔð±£Ö¤ÏûϢ˳ÐòµÄ²ã´Î¡£Kafka
»¹Ö§³ÖÒ»¸öÏûÏ¢±»²»Í¬µÄ¡°ÒµÎñ¡±¶à´ÎÏû·Ñ£¨³ÆÎª¶à²¥»òÉȳö£©£¬ÎªÁËÇø·Ö²»Í¬¡°ÒµÎñ¡±£¬ÒýÈëÁËÏû·ÑÕß×éµÄ¸ÅÄһ¸öÏû·ÑÕß×éÔÚÒ»¸ö
partition ÉϹ²ÏíÒ»¸öÏû·Ñ½ø¶È£¨consumergroup offset£©¡£Îª±£Ö¤ÏûÏ¢ËÍ´ï˳Ðò£¬Ò»¸ö
partition ÉϵÄÊý¾Ý£¬Í¬Ò»Ê±¼ä¡¢Í¬Ò»Ïû·ÑÕß×é×î¶àÓÉÒ»¸öÏû·ÑÕß»ñµÃ¡£
Õâ¸ø Kafka µÄʹÓÃÕßÔì³ÉÁËһЩʵ¼ÊÎÊÌ⣺
¸ß¹Àpartitionµ¼ÖÂ×ÊÔ´ÀË·Ñ£ºÎªÁ˲»¶ªÏûÏ¢£¬¸ø¶¨topicÉϵÄpartitionÊýÁ¿Ö»ÄÜÔö¼Ó£¬²»ÄܼõÉÙ¡£ÕâÒªÇóij¸ötopicÔÚÉÏÏß֮ǰԤ¹ÀÆäÉú²úÄÜÁ¦ºÍÏû·ÑÄÜÁ¦£¬È»ºó°´ÕÕÉú²úÄÜÁ¦µÄÉÏÏÞºÍÏû·ÑÄÜÁ¦µÄÏÂÏÞ£¬Çö¨Ò»¸öpartitionÊýÁ¿µÄÉÏÏÞÀ´²¿Êð¡£ÉÏÏߺóÈç¹û·¢ÏÖtopicÉϵÄÉú²úÄÜÁ¦¸ßÓÚÏû·ÑÄÜÁ¦£¬±ØÐëÏÈÀ©³äpartition£¬ÔÙÌáÉýÏû·ÑÄÜÁ¦£¨×îÖ±½ÓµÄ;¾¶ÊÇÔö¼ÓÏû·ÑÕßÊýÁ¿£©¡£Ïà·´Èç¹û·¢ÏÖtopicÉϵÄÉú²úÄÜÁ¦µÍÓÚÏû·ÑÄÜÁ¦£¨¿ÉÄÜÊÇÏûÏ¢µÄÉú²úËÙÂʵÍÓÚÔ¤ÆÚ»òÕß²¨¶¯Ã÷ÏÔ£¬Ò²¿ÉÄÜÊǵ¥¸öÏû·ÑÕßµÄÏû·ÑÄÜÁ¦Í¨¹ýÓÅ»¯µÃµ½ÌáÉý£©£¬ÓÉÓÚpartitionÊýÁ¿ÎÞ·¨»ØËõ£¬¾Í»áÔì³ÉKafkaµÄ×ÊÔ´ÀË·Ñ¡£ÏÖʵÇé¿öÊÇ£¬partitionÊýÁ¿¾³£±»¸ß¹À£¬kafka
topicµÄ´¦ÀíÄÜÁ¦¾³£±»ÀË·Ñ¡£Ò²ÕýÊÇÒòΪÈç´Ë£¬ÒµÎñ¿ª·¢¹¤³Ìʦ²Å»áÉè¼ÆtopicºÍpartitionµÄ¸÷ÖÖ¸´ÓûúÖÆ¡£
partition²»×ãÒÔÇø·ÖÄÄЩÏûÏ¢ÐèÒª´®ÐÐÏû·Ñ£¬ÄÄЩ¿ÉÒÔ²¢ÐУºKafkaµÄĬÈϵÄÏûÏ¢·ÖÇø²ßÂÔÊÇͨ¹ý¶ÔÏûÏ¢µÄKey×ֶμÆËãhashÖµ£¬·ÖÅäµ½ÌØ¶¨µÄpartition¡£µ«ÊÇij¸öÏû·ÑÕß×é¶ÔÒ»¸öpartitionÉϵÄÏûÏ¢£¬ÓпÉÄܲ¢²»ÐèҪȫ²¿´®ÐÐÏû·Ñ¡£±ÈÈçij¸ö·þÎñÈÏΪÏûÏ¢A¡¢BºÍCËäÈ»¶¼±»»®·Öµ½ÁËpartition
0£¬µ«ÊÇÖ»ÓÐAºÍCÖ®¼ä´æÔÚ´ÎÐò¹ØÏµ£¨±ÈÈç¸üеÄÊÇͬһÌõÊý¾Ý£©£¬B¿ÉÒÔÓëA¡¢C²¢ÐÐÏû·Ñ¡£Èç¹ûÄÜÓÐÒ»ÖÖ»úÖÆ£¬ÔÊÐí¸ù¾ÝÒµÎñ¶¨ÒåÄÄЩÏûÏ¢ÐèÒª´®ÐÐÏû·Ñ£¬Ê£ÏµÄÏûÏ¢Ôò¿ÉÒÔ²¢ÐÐÏû·Ñ£¬¾ÍÄÜÔÚ²»¸Ä±äpartitionÊýÁ¿µÄ»ù´¡ÉÏÌáÉýÏû·Ñ²¢ÐжȺʹ¦ÀíÄÜÁ¦£¬½µµÍ´úÂë¶ÔpartitionÊýÁ¿µÄÒÀÀµ³Ì¶È¡£
Õë¶ÔÒÔÉÏÁ½¸öÎÊÌ⣬·Ö²¼Ê½ÊÂÎñµÄ²¢ÐÐÏû·Ñ²¿·ÖÒýÈëÁËÈçϸĽø·½°¸£ºÔÚ²»Î¥±³ ACID ÊÂÎñÐÔµÄǰÌáÏ£¬ÔÚÒ»¸öÏû·ÑÕß½ø³ÌÄÚ£¬¶Ô
partition£¨·ÖÇø£©¸ù¾ÝÒ»¸ö×Ó·ÖÇø ID£¨ÒÔϼò³Æ id£©ºÍ TxType ½øÐÐÔٴηÖÇø£¬Í¬Ò»¸ö×Ó·ÖÇøµÄÏûÏ¢´®ÐÐÏû·Ñ£¬²»Í¬×Ó·ÖÇøµÄÏûÏ¢²¢ÐÐÏû·Ñ¡£

ÈçÉÏͼËùʾ£º
ÏûÏ¢idĬÈϸ´ÓÃKafkaÏûÏ¢µÄKey×ֶεÄÖµ£¬Ö§³Ö²úÆ·¹¤³Ìʦ×Ô¶¨ÒåÏûÏ¢µÄid£¬µ«ÊÇÆäÇø·Ö¶È²»ÄÜСÓÚÏûÏ¢µÄTopic
+ PartitionµÄÇø·Ö¶È¡£
Ïû·ÑÕß½ø³Ì½Óµ½ÏûÏ¢ºó£¬·Ö²¼Ê½ÊÂÎñ¿ò¼Ü»áÏȽâÎöÏûÏ¢µÄÔªÊý¾Ý£¬µÃµ½ÏûÏ¢µÄTxTypeºÍid¡£
ÏûÏ¢»á°´ÕÕTxType+id½øÐÐÔٴηÖÇø£¬ÓÉ¿ò¼Ü×Ô¶¯·ÖÅä²¢·¢Ë͵½Ò»¸öÄÚ´æ¶ÓÁУ¨ÏȽøÏȳö£©ºÍ´¦Àíµ¥Ôª£¬½»¸øÒµÎñ´úÂë½øÐÐʵ¼ÊÏû·Ñ¡£
²»Í¬TxType+idµÄÏûÏ¢»á±»·ÖÅäµ½²»Í¬µÄÄÚ´æ¶ÓÁÐ/´¦Àíµ¥Ôª£¬´¦Àíµ¥ÔªÖ®¼ä»¥²»×èÈû£¬²¢ÐУ¨»ò²¢·¢£©Ö´ÐУ¬²¢ÐУ¨²¢·¢£©¶È¿ÉÒÔµ÷Õû¡£
ÓÉÓÚpartition±»Ôٴλ®·Ö£¬¶¨ÒåÔÚÏû·Ñ×éºÍpartitionÉϵÄÏû·Ñ½ø¶ÈÐèÒªÔö¼ÓÒ»²½¾ÛºÏ´¦Àí£¬È·±£ÔÚKafka·¢ËÍackµÄʱºò£¬¸ø¶¨Æ«ÒÆÁ¿Ö®Ç°µÄÏûÏ¢¶¼ÒÑ´¦ÀíÍê±Ï¡£
¿ÉÒÔÅäÖÃÄÚ´æ¶ÓÁÐ/´¦Àíµ¥ÔªµÄ×î´ó³¤¶ÈºÍ×î´ó²¢Ðжȣ¬²¢ÇÒÔÚ¿ÕÏÐÒ»¶Îʱ¼äºó»á½øÐÐ×ÊÔ´»ØÊÕ£¬±ÜÃâÄÚ´æ¶Ñ»ý¡£
ÂäµØÊµ¼ù
²¿Êðϸ½Ú
ÒÔ´úÂë¿â·½Ê½·¢²¼£º²»ÒýÈë¶ÀÁ¢µÄ·þÎñ£¬½«SagaºÍKafkaÏà¹ØµÄÂß¼³éÈ¡³É¹«¹²´úÂë¿â°´°æ±¾·¢²¼£¬Ëæ×ÅλÓÚ×éºÏ±àÅÅÆ÷²ãµÄ·þÎñÒ»Æð²¿ÊðºÍÉý¼¶¡£
Éú²úÕߺÍÏû·ÑÕßÒÔ1:1¹²´æÓÚͬһ¸ö½ø³Ì£ºÐèÒª·¢ÆðºÍ¹ÜÀí·Ö²¼Ê½ÊÂÎñµÄ·þÎñ£¬Ã¿¸ö½Úµã¶¼»áÆô¶¯Ò»¸öÉú²úÕߺÍÒ»¸öÏû·ÑÕߣ¬²¢ÇÒ½èÖúÏÖÓеļ¯Èº²¿Ê𹤾ߣ¨Amazon
EKS£©£¬±£Ö¤¸Ã·þÎñµÄËùÓнڵ㶼¿ÉÒÔ»¥ÏàÁ¬Í¨£¬²¢ÇÒ¿ÉÒÔÁ¬½ÓKafka¡£ÕâÖÖ²¿Êð·½Ê½ÔÊÐíÎÒÃÇ´ÓÏû·ÑÕß½ÚµãÖ±½Ó»Øµ÷Éú²úÕ߽ڵ㣬ÎÞÐèÒýÈë¶îÍâµÄÏûÏ¢×ÜÏß»òÆäËûÊý¾Ý¹²Ïí»úÖÆ¡£ºóÐø¿ÉÒÔ¸ù¾ÝÐèÒª£¬½«Éú²úÕߺÍÏû·ÑÕß²¿ÊðÔÚ²»Í¬µÄ·þÎñÉÏ£¬Ö»ÒªËüÃǵĽڵãÖ®¼ä¿ÉÒÔÏ໥Á¬Í¨¡£
Ö§³ÖKafkaºÍGo channelÁ½ÖÖ¶ÓÁÐģʽ£ºKafka¶ÓÁÐģʽ·ûºÏACIDµÄ¶¨Ò壬Go channel¶ÓÁÐģʽֻÄܱ£Ö¤ACIDÖеÄA£¬²»Äܱ£Ö¤IºÍD¡£¿ª·¢ºÍµ¥Ôª²âÊԽ׶οÉÒÔʹÓÃGo
channelģʽ£¬·þÎñ¼¯³É²âÊÔºÍÏßÉϲ¿Êðʱһ°ãʹÓÃKafkaģʽ¡£ÏßÉÏKafka·þÎñÕûÌå²»¿ÉÓÃʱ£¬·¢Æð·Ö²¼Ê½ÊÂÎñµÄ·þÎñ¿É½µ¼¶ÎªGo
channelģʽ¡£
¹²ÏíKafka topicºÍpartition£º¶à¸ö·þÎñ»òÁ÷³Ì¿ÉÒÔ¹²ÏíKafkaµÄtopicºÍpartition£¬Ê¹ÓÃÏû·ÑÕß×éÀ´½øÐÐÇø·ÖÏû·Ñ½ø¶È£¬Ê¹ÓÃTxTypeÀ´×öʼþ·ÖÁ÷¡£
ϵͳ¿ÉÓÃÐÔ·ÖÎö
·Ö²¼Ê½ÏµÍ³µÄ¸ß¿ÉÓÃÐÔ£¬ÐèÒªÒÀÀµ²ÎÓëÆäÖеÄÿ¸ö·þÎñ×ã¹»½¡×³¡£ÏÂÃæ¶Ô·Ö²¼Ê½ÊÂÎñÖеĸ÷ÖÖ·þÎñ½øÐзÖÀà̽ÌÖ£¬ÃèÊöµ±²¿·Ö·þÎñ½Úµã³öÏÖ¹ÊÕÏʱϵͳµÄ¿ÉÓÃÐÔ¡£
Éú²úÕß¹ÊÕÏ£ºÉú²úÕßËæÄ³¸ö×éÖ¯/±àÅÅÆ÷·þÎñ²¿Ê𣬽ڵãÈßÓà¡£¼ÙÈçÉú²úÕßËùÔÚ·þÎñµÄ²¿·Ö½Úµã¹ÊÕÏ£¬¶ÔÓڸýڵãÉÏ·¢³ö¶ÓÁÐÏûÏ¢¡¢ÉÐδÊÕµ½»Øµ÷µÄËùÓÐÊÂÎñ£¬¿Í»§½«¿´µ½ÇëÇóʧ°Ü»ò³¬Ê±£¬ÖØÊÔµ¼Á÷µ½Õý³£½Úµãºó¿ÉÒԳɹ¦Ìá½»¡£
Ïû·ÑÕß¹ÊÕÏ£ºÏû·ÑÕߺÍÉú²úÕßÒ»Ñù£¬ËæÍ¬×éÖ¯/±àÅÅÆ÷·þÎñ²¿Ê𣬽ڵãÈßÓà¡£¼ÙÈçÏû·ÑÕßËùÔڵIJ¿·Ö½Úµã¹ÊÕÏ£¬¶ÔÓڸýڵãÉϽӵ½¶ÓÁÐÏûÏ¢¡¢ÉÐδ·¢Ëͻص÷ºÍµÄËùÓÐÊÂÎñ£¬¿Í»§½«¿´µ½ÇëÇó³¬Ê±¡£KafkaÔÚÅäÖõÄÏû·ÑÕ߻Ự³¬Ê±£¨Ä¬ÈÏÊÇ10Ã룬¿ÉÒÔ°´Ïû·ÑÕß¶¨ÖÆ£©Ö®ºó£¬»á±ê¼Ç¸ÃÏû·ÑÕßÏÂÏߣ¬È»ºó¶ÔtopicºÍpartition½øÐиºÔص÷Õû£¬°´Ò»¶¨Ëã·¨¾¡¿ÉÄÜÆ½¾ùµØ·ÖÅ䏸µ±Ç°Ïû·ÑÕß×éÊ£ÓàµÄÔÚÏß³ÉÔ±£¬¸ºÔص÷ÕûµÄºÄʱһ°ãÔÚÃë¼¶¡£´ÓÏû·ÑÕßËùÔÚ½Úµã¹ÊÕÏ¿ªÊ¼£¬µ½Kafka¸ºÔص÷Õû½áÊø£¬Õâ¶Îʱ¼äÀï·¢Éú¹ÊÕϵÄÏû·ÑÕ߸ºÔðµÄtopicºÍpartitionÉϵÄÏûÏ¢¶¼ÎÞ·¨´¦Àí¡£¿Í»§½«¿´µ½²¿·ÖÇëÇó³öÏÖ³¬Ê±´íÎó¡£Èç¹ûÌá½»µÄÊý¾ÝºÍÉú³ÉµÄ¶ÓÁÐÏûÏ¢µÄpartitionÓÐÖ±½ÓÓ³Éä¹ØÏµµÄ»°£¬Õâ¶Îʱ¼äÄÚͬһ·ÝÊý¾ÝÖØÊÔÒ²»áʧ°Ü¡£
»ù´¡·þÎñ¹ÊÕÏ£º¸ø¶¨µÄ·Ö²¼Ê½ÊÂÎñ»áÒÀÀµ¶à¸ö»ù´¡·þÎñ£¬Ã¿¸ö·þÎñ¶ÀÁ¢²¿Ê𣬽ڵãÈßÓà¡£¼ÙÈçij»ù´¡·þÎñ²¿·Ö½Úµã¹ÊÕÏ£¬·Ö²¼Ê½ÊÂÎñµÄÏàÓ¦ÇëÇó»áÔÚÏàÓ¦µÄ²½Öè»á³öÏÖ²¿·Öʧ°Ü£¬Ç°Ðò²½ÖèÒÀ´ÎÖ´Ðв¹³¥½Ó¿Ú¡£¿Í»§¿´µ½µÄ³¬Ê±»òÕßÒµÎñ¶¨ÖƵÄʧ°ÜÐÅÏ¢£¬²¢ÇÒÖØÊÔÓпÉÄܳɹ¦¡£ÒµÎñ¿ÉÒÔÒýÈë·þÎñÈÛ¶Ï»úÖÆ£¬À´±ÜÃâÏûÏ¢¶Ñ»ý¡£
ÏûÏ¢¶ÓÁйÊÕÏ£ºKafka±¾Éí¾ß±¸Ö÷´Ó¸´ÖÆ¡¢½ÚµãÈßÓàºÍÊý¾Ý·ÖÇøÀ´ÊµÏֵĸ߿ÉÓÃÐÔ£¬Ôڴ˲»×öÉîÈëÌÖÂÛ¡£
ÏßÉÏÎÊÌâ¼°´¦Àí
·Ö²¼Ê½ÊÂÎñ¿ò¼ÜËæ·þÎñ·¢²¼Ö®ºó£¬¾¹ýÒ»¶Îʱ¼äµÄÏßÉÏÔËÐУ¬»ù±¾·ûºÏÉè¼ÆÔ¤ÆÚ¡£ÆÚ¼ä³öÏÖÁËһЩÎÊÌ⣬ÁоÙÈçÏ¡£
Éú²úÕߺÍÏû·ÑÕßµÄÁ¬Í¨ÐÔÎÊÌâ
ʹÓ÷ֲ¼Ê½ÊÂÎñµÄij·þÎñÔÚ²¿·ÖÊý¾ÝÉϳöÏÖ³¬Ê±£¬¿Í»§ÖØÊÔÎÞЧ£¬¶øÔÚÁíһЩÊý¾ÝÉÏÕý³£·µ»Ø¡£Í¨¹ý·ÖÎöÈÕÖ¾·¢ÏÖ£¬ÕâЩÏûÏ¢µÄ·¢Ëͺʹ¦Àí¶¼³É¹¦ÁË£¬µ«ÊÇÏû·ÑÕ߻ص÷Éú²úÕßʧ°Ü¡£½øÒ»²½Ñо¿ÈÕÖ¾·¢ÏÖ£¬Ïû·ÑÕßËùÔڵĽڵãºÍÉú²úÕßËùÔڵĽڵãλÓÚ²»Í¬µÄ¼¯Èº£¬³öÏÖÁËÍøÂç·Ö¸ô¡£²é¿´ÅäÖã¬Á½¸ö¼¯ÈºµÄͬÃû·þÎñÅäÖÃÁËÏàͬµÄ
Kafkabrokers¡¢topics ºÍÏû·ÑÕß×飬Á½¸ö¼¯ÈºµÄÏû·ÑÕßÁ¬µ½Í¬Ò»¸ö Kafka£¬±»Ëæ»ú·ÖÅä´¦Àíͬһ¸ö
topic ϶à¸ö partitions¡£

ÈçÉÏͼËùʾ£¬Î»ÓÚ¼¯Èº C µÄ·þÎñ A£¨Éú²úÕߣ©ºÍ¼¯Èº D µÄ·þÎñ A£¨Ïû·ÑÕߣ©Ê¹ÓÃÁËÏàͬµÄ Kafka
ÅäÖá£ËûÃǵĽڵãËäÈ»¶¼ÄÜÁ¬µ½ Kafka£¬µ«ÊDZ˴ËÎÞ·¨Ö±Á¬£¬Òò´ËµÚ 7 ²½»Øµ÷ʧ°ÜÁË¡£Ö®ËùÒÔÓÐЩÊý¾Ý³¬Ê±ÇÒÖØÊÔÎÞЧ£¬ÓÐЩȴûÓÐÎÊÌ⣬ÊÇÒòÎªÌØ¶¨Êý¾ÝµÄÖµ»áÓ³Éäµ½ÌØ¶¨µÄ
partition£¬Èç¹ûÏûÏ¢Éú²úÕßºÍ partition µÄÏû·ÑÕß²»ÔÚͬһ¸ö¼¯Èº£¬¾Í»á»Øµ÷ʧ°Ü£»·´Ö®Èç¹ûÔÚͬһ¸ö¼¯ÈºÔòûÓÐÎÊÌâ¡£½â¾ö·½·¨ÊÇͨ¹ýÐÞ¸ÄÅäÖã¬Èò»Í¬¼¯ÈºµÄ·þÎñʹÓò»Í¬µÄ
Kafka¡£
¶ÓÁÐÏûÏ¢ÀàÐͲ»·ûºÏÔ¤ÆÚ
·þÎñ A ³öÏÖÒµÎñÒì³£±¨¾¯£¬ÄÚÈÝÊÇ·Ö²¼Ê½ÊÂÎñµÄÏû·ÑÕß½Óµ½¶ÓÁÐÏûÏ¢µÄÀàÐͲ»·ûºÏÔ¤ÆÚ¡£Í¨¹ý·ÖÎöÈÕÖ¾ºÍ²é¿´´úÂ룬·¢ÏÖ¸ÃÏûÏ¢ÀàÐÍÊôÓÚ·þÎñ
B£¬¶øÇÒͬÑùµÄÏûÏ¢ÒѾ±»·þÎñ B µÄÏû·ÑÕß´¦ÀíÁË¡£²é¿´ÅäÖ÷¢ÏÖ·þÎñ A ºÍ B µÄ·Ö²¼Ê½ÊÂÎñʹÓÃÁËͬһ¸ö
Kafkatopic£¬Í¨¹ýÅäÖò»Í¬µÄÏû·ÑÕß×éÀ´Çø·Ö¸÷×ÔµÄÏû·Ñ½ø¶È¡£

ÈçÉÏͼËùʾ£¬·þÎñ A ºÍ B ¹²ÏíÁË Kafka µÄ topic ºÍ partition£¬µ¼ÖÂÒì³£µÄÏûÏ¢À´×Ô·þÎñ
B µÄÉú²úÕߣ¨²½Öè 1£©£¬Òì³£±¨¾¯³öÏÖÔÚ A µÄÏû·ÑÕߣ¨²½Öè 2£©£¬¶øÇÒ B µÄÏû·ÑÕßÒ²ÊÕµ½²¢´¦ÀíÁËÕâÌõÏûÏ¢£¨²½Öè
3£©£¬²½Öè 2 ºÍ 3 Ö®¼äÊDz¢Ðеġ£·þÎñ A µÄÉú²úÕßÔÚÕâ´ÎÒ쳣ʼþÖÐûÓз¢»Ó×÷Ó᣽â¾öÕâ¸öÎÊÌâÓÐÁ½ÖÖ˼·£ºÒ»ÖÖÊÇÐÞ¸ÄÅäÖã¬È¡Ïû
Kafkatopic ¹²Ïí£»Ò»ÖÖÊÇÐÞ¸ÄÈÕÖ¾£¬ºöÂÔ²»ÈÏʶµÄ·Ö²¼Ê½ÊÂÎñÏûÏ¢ÀàÐÍ¡£ÓÉÓÚ¶ÌÆÚÄÚÔڸà topic
ÉÏ·þÎñ A+B µÄÉú²úÄÜÁ¦Ð¡ÓÚÏû·ÑÄÜÁ¦£¬Èç¹ûÈ¡Ïû¹²ÏíµÄ»°»á½øÒ»²½ÀË·Ñ Kafka ×ÊÔ´£¬ËùÒÔÔÝʱ²ÉÓÃÁËÐÞ¸ÄÈÕÖ¾µÄ·½Ê½¡£
·þÎñ¿É¼ûÐԵĸĽø
·Ö²¼Ê½ÏµÍ³µÄÌôÕ½Ö®Ò»¾ÍÊÇÔÚ RPC µ÷ÓùØÏµ¸´ÔÓµÄʱºòÄÑÒÔ×·×ٺͶ¨Î»ÎÊÌâ¡£·Ö²¼Ê½ÊÂÎñÓÉÓÚÒýÈëÒì²½¶ÓÁУ¬Éú²úÕߺÍÏû·ÑÕßÓпÉÄÜλÓÚ²»Í¬µÄ½Úµã£¬¶Ô·þÎñ¿É¼ûÐÔ£¬ÌرðÊÇÁ´Â·µÄ×·×ÙÌá³öÁ˸ü¸ßµÄÒªÇó¡£Í¨¹ýÓë
FreeWheel µÄÁ´Â·×·×Ùϵͳ½øÐм¯³É£¬¹¤³Ìʦ¿ÉÒÔÖ±¹ÛµØ¿´µ½·Ö²¼Ê½ÊÂÎñÊý¾ÝÔÚ¸÷·þÎñµÄÁ÷תÇé¿ö£¬¸üºÃµØ×·²éºÍ¶¨Î»¹¦ÄܺÍÐÔÄÜÉϵÄÎÊÌ⣬ÈçÏÂͼËùʾ£º

´ËÍ⣬»¹¿ÉÀûÓà Kafka ÏûÏ¢¶à²¥µÄÄÜÁ¦£¬Ê¹ÓÃÁÙʱµÄÏû·ÑÕß×éËæÊ±ä¯ÀÀ¡¢»ØËÝ topic ÉϵÄÏûÏ¢Êý¾Ý£¬Ö»Òª²»Ê¹ÓÃÏßÉÏÒµÎñµÄÏû·ÑÕß×飬¾Í²»»á·Á°Êý¾ÝµÄÕý³£Ïû·Ñ¡£
Ò쳣ϸ½Ú¶ªÊ§
ʹÓ÷ֲ¼Ê½ÊÂÎñµÄij·þÎñ·¢ÏÖ£¬¿Í»§ÔÚÌá½»ÌØ¶¨Êý¾ÝµÄʱºòÎȶ¨³öÏÖ 5xx ´íÎó£¬ÖØÊÔÎÞЧ¡£¾¹ý·ÖÎöÈÕÖ¾·¢ÏÖ£¬Ä³¸ö»ù´¡·þÎñ¶Ô¸ÃÊý¾Ý·µ»ØÁË
4xx µÄ´íÎó£¨ÒµÎñÈÏΪÊý¾Ý²»ºÏÀí£©£¬µ«ÊǾ¹ý·Ö²¼Ê½ÊÂÎñ¿ò¼ÜµÄÒì³£²¶»ñºÍ´¦Àí£¬Ôʼϸ½Ú¶ªÊ§£¬Òì³£ÔÚ·¢Ë͸ø¿Í»§Ç°±»¸Äд³ÉÁË
5xx µÄ´íÎó¡£½â¾ö°ì·¨ÊÇÐ޸Ŀò¼ÜµÄÒì³£´¦Àí»úÖÆ£¬ÔÚÏû·ÑÕß½ø³ÌÖн«Ã¿¸ö²½ÖèÓöµ½µÄÔʼÒì³£ÐÅÏ¢½øÐлã×Ü£¬´ò°ü½ø»Øµ÷Êý¾Ý·¢Ë͸øÉú²úÕߣ¬ÔÊÐíÒµÎñ´úÂë×ö½øÒ»²½µÄÒì³£´¦Àí¡£
»ù´¡·þÎñÖØ¸´´´½¨¶àÌõÊý¾Ý
ʹÓ÷ֲ¼Ê½ÊÂÎñµÄ·þÎñ A ·¢ÏÖ£¬Å¼¶û»á³öÏÖÇëÇó³É¹¦£¬µ«ÊÇÔÚ»ù´¡·þÎñ B ¹ÜÀíµÄÊý¾Ý¿âÀï´´½¨³öÁ˶àÌõͬÑùµÄÊý¾ÝµÄÇé¿ö¡£Í¨¹ý
FreeWheel µÄÁ´Â·×·×Ùϵͳ·¢ÏÖ£¬·þÎñ A µ÷Óà B µÄ´´½¨½Ó¿ÚµÄʱºòÒòΪ³¬Ê±¶ø½øÐÐÁËÖØÊÔ£¬µ«ÊÇÁ½´Îµ÷ÓÃÔÚ·þÎñ
B ¶¼³É¹¦ÁË£¬¶øÇҸýӿڲ»¾ßÓÐÃݵÈÐÔ£¨idempotency£¬¼´¶à´Îµ÷ÓõÄЧ¹ûµÈÓÚÒ»´Îµ÷ÓõÄЧ¹û£©£¬µ¼ÖÂͬÑùµÄÊý¾Ý±»¶à´Î´´½¨¡£ÀàËÆµÄÎÊÌâÔÚ΢·þÎñʵ¼ùÖо³£³öÏÖ£¬½â¾ö˼·ÓÐÁ½ÖÖ£ºÒ»ÖÖÊÇÖαêµÄ·½·¨£¬¼´
A ºÍ B ¹²Ïí³¬Ê±ÅäÖã¬A ½«×Ô¼ºµÄ³¬Ê±ÉèÖà tA ´«¸ø B£¬È»ºó B °´ÕÕÒ»¸ö±È tA ¸ü¶ÌµÄ³¬Ê±
tB£¨¿¼Âǵ½ A ºÍ B Ö®¼äµÄÍøÂ翪Ïú£©À´ÊÂÎñÐÔÌá½»Êý¾Ý¡£ÁíÒ»ÖÖÊÇÖα¾µÄ·½·¨£¬Ò²¾ÍÊÇ·þÎñ B µÄ½Ó¿ÚʵÏÖÃݵÈÐÔ£¨·½·¨¿ÉÒÔÊÇÊý¾Ý¿âÉèÖÃΨһË÷Òý£¬´´½¨Êý¾ÝÇëÇóÒªÇ󱨴«Î¨Ò»Ë÷Òý£¬ºöÂÔË÷Òý³åÍ»µÄÇëÇ󣩡£ÎÞÂÛÊÇ·ñʹÓ÷ֲ¼Ê½ÊÂÎñ£¬¿Í»§¶ËÒòÎªÍøÂçÎÊÌâÖØÊÔ¶øµ¼Ö¶à´ÎÇëÇóÖØ¸´Êý¾ÝµÄÎÊÌ⣬¶¼ÊÇÿ¸ö΢·þÎñÃæÁÙµÄÏÖ×´£¬¶øÊµÏÖ½Ó¿ÚÃݵÈÐÔÔòÊÇ¿ÉÒÔÓÅÏÈ¿¼Âǵķ½°¸¡£
ÏÂÒ»²½¹¤×÷
½«À´»áÔÚÒÔϼ¸¸ö·½Ã棬¶Ô·Ö²¼Ê½ÊÂÎñ·½°¸½øÐгÖÐøÓÅ»¯£º
Ö§³Ö¾Ö²¿Ê¹ÓÿçÒì¹¹Êý¾Ý¿âµÄǿһÖÂÐÔÊÂÎñ·½°¸
×Ô¶¯Éú³ÉÒÑÓзþÎñ½Ó¿Ú¶ÔÓ¦µÄ²¹³¥½Ó¿Ú´úÂë
ͨ¹ýÖмä¼þΪÒÑÓзþÎñ½Ó¿Ú×¢ÈëÃݵÈÐÔ
½áÓï
Á¢×ã FreeWheel ºËÐÄÒµÎñϵͳµÄ¼Ü¹¹±äǨºÍÊÂÎñÐÔÐèÇ󣬱¾ÎĽéÉÜÁËÒ»ÖÖÖ§³ÖÒì¹¹Êý¾Ý¿â¡¢ÊµÏÖ×îÖÕÒ»ÖÂÐԵķֲ¼Ê½ÊÂÎñ·½°¸ÒÔ¼°Ïà¹ØµÄÂäµØÊµ¼ù£¬Ï£ÍûÄÜÎªÃæÁÙÀàËÆÎÊÌâµÄ¶ÁÕßÌṩһЩ˼·ºÍÆô·¢¡£ |