ǰÑÔ
ΪÁ˽â¾ö´«Í³µÄµ¥ÌåÓ¦Óã¨Monolithic Application£©ÔÚ¿ÉÀ©Õ¹ÐÔ¡¢¿É¿¿ÐÔ¡¢ÊÊÓ¦ÐÔ¡¢¸ß²¿Êð³É±¾µÈ·½ÃæµÄÎÊÌ⣬Ðí¶à¹«Ë¾£¨±ÈÈçAmazon¡¢eBayºÍNetFlixµÈ£©¿ªÊ¼Ê¹ÓÃ΢·þÎñ¼Ü¹¹£¨Microservice
Architecture£©¹¹½¨×Ô¼ºµÄÓ¦Óá£
΢·þÎñ¼Ü¹¹£¨Î¬»ù°Ù¿Æ£©£º
΢·þÎñ (Microservices) ÊÇÒ»ÖÖÈí¼þ¼Ü¹¹·ç¸ñ (Software Architecture
Style)£¬ËüÊÇÒÔרעÓÚµ¥Ò»ÔðÈÎÓ빦ÄܵÄСÐ͹¦ÄÜÇø¿é (Small Building Blocks)
Ϊ»ù´¡£¬ÀûÓÃÄ£×黯µÄ·½Ê½×éºÏ³ö¸´ÔӵĴóÐÍÓ¦ÓóÌÐò£¬¸÷¹¦ÄÜÇø¿éʹÓÃÓëÓïÑÔÎÞ¹Ø (Language-Independent/Language
agnostic) µÄ API ¼¯Ï໥ͨѶ¡£
µ«ÊÇ£¬Î¢·þÎñ¼Ü¹¹ÔÚ´øÀ´Ò»ÏµÁкô¦µÄͬʱ£¬Ò²´øÀ´ÁËÈô¸ÉÌôÕ½¡£³ýÁË·Ö²¼Ê½ÏµÍ³¹ÌÓеĸ´ÔÓÐÔÒÔÍ⣬΢·þÎñ¼Ü¹¹Ò²Éî¿ÌÓ°ÏìÁËÓ¦ÓúÍÊý¾Ý¿âÖ®¼äµÄ¹ØÏµ£¬Ó봫ͳ¶à¸ö·þÎñ¹²ÏíÒ»¸öÊý¾Ý¿âµÄ·½Ê½²»Í¬£¬Î¢·þÎñ¼Ü¹¹Ã¿¸ö·þÎñ¶¼ÓÐ×Ô¼ºµÄÊý¾Ý¿â¡£¶ÔÓÚ¿ª·¢ÕßÀ´Ëµ£¬Õâ¾ÍΪ΢·þÎñÖеÄÊý¾Ý¹ÜÀíÌá³öÁ˸ü¸ßµÄÒªÇó¡£
΢·þÎñ¼Ü¹¹ÖеÄÊý¾Ý¹ÜÀí
ÔÚ´«Í³µÄµ¥ÌåÓ¦ÓÃÖУ¬Í¨³£Ê¹Óõ¥¸öµÄ¹ØÏµÐÍÊý¾Ý¿â¡£ÕâÀàÊý¾Ý¿âËùÌṩµÄÊÂÎñÓïÒ壬¾ß±¸ACIDÌØÐÔ¡£
ACID£º
- Atomicity£¨Ô×ÓÐÔ£©£ºÒ»¸öÊÂÎñÖеIJÙ×÷ÊÇÔ×ӵ쬯äÖÐÈκÎÒ»²½Ê§°Ü£¬ÏµÍ³¶¼Äܹ»ÍêÈ«»Øµ½ÊÂÎñǰµÄ״̬
- Consistency£¨Ò»ÖÂÐÔ£©£ºÊý¾Ý¿âµÄ״̬ʼÖÕ±£³ÖÒ»ÖÂ
- Isolation£¨¸ôÀëÐÔ£©£º¶à¸ö²¢·¢Ö´ÐеÄÊÂÎñ²»»á»¥ÏàÓ°Ïì
- Durability£¨³Ö¾ÃÐÔ£©£ºÊÂÎñ´¦Àí½áÊøºó£¬¶ÔÊý¾ÝµÄÐÞ¸ÄÊÇÓÀ¾ÃµÄ
Ó¦ÓõÃÒæÓÚÊý¾Ý¿âµÄÕâÐ©ÌØÐÔ£¬Äܹ»Óüòµ¥µÄ·½Ê½¶ÔÊý¾Ý½øÐÐÐÞ¸ÄÓë¶ÁÈ¡£¬¶øÎÞÐ軨·ÑÌ«¶à¾«Á¦¿¼ÂÇÊý¾ÝÒ»ÖÂÐÔÎÊÌâ¡£
µ«ÊÇ£¬ÔÚ΢·þÎñ¼Ü¹¹Ï£¬ÎªÁËÔÚ΢·þÎñÖ®¼ä½¨Á¢ËÉñîºÏµÄ¹ØÏµ£¬Í¨³£Ã¿Ò»¸ö΢·þÎñ¶¼»áÓµÓÐ×Ô¼º¶ÀÁ¢µÄÊý¾Ý¿â£¬½ö½öͨ¹ý¶ÔÍⱩ¶µÄAPIÀ´½øÐÐÊý¾Ý½»»»¡£ÕâÖÖÇé¿öÏ£¬ÎÒÃǾÍÒªÃæÁÙ·Ö²¼Ê½Êý¾Ý¹ÜÀí´øÀ´µÄÌôÕ½¡£Ò²¾ÍÊÇ˵£¬ÔÚʵÏÖÒµÎñÂ߼ʱ£¬ÈçºÎ±£Ö¤·þÎñÖ®¼äµÄÊý¾ÝÒ»ÖÂÐÔ¡£
ʵʱһÖÂÐÔ
ÎÒÃÇÊ×ÏÈ¿¼ÂÇÔÚϵͳÖÐʵÏÖʵʱһÖÂÐÔµÄÇé¿ö¡£±ÈÈçÒÔÒ»¸öÒøÐÐϵͳΪÀý£¬¿Í»§Í¨³£»áÓÐÒ»¸ö´¢ÐîÕË»§ºÍÒ»¸öÀí²ÆÕË»§¡£ÏÖÔÚ£¬¿¼Âǿͻ§´Ó×Ô¼ºµÄ´¢ÐîÕË»§ÏòÀí²ÆÕË»§×ªÕË10000ÔªµÄ³¡¾°¡£
¼ÙÉèÏÖÔÚÓÐÁ½Õűí deposit_account ºÍ finance_account£¬·Ö±ðÓÃÓÚ´æ´¢´¢ÐîÕË»§ºÍÀí²ÆÕË»§µÄÐÅÏ¢£¬Óû§µÄIDÊÇ201¡£ÄÇô£¬ÔÚµ¥Ò»Êý¾Ý¿â³¡¾°Ï£¬Í¨¹ýÊý¾Ý¿âÊÂÎñ¿ÉÒÔºÜÈÝÒ×Íê³ÉÕâ¸ö²Ù×÷£º
Begin transaction
update deposit_account_table set amount=amount-10000
where userId=201;
update finance_account amount=amount+10000 where
userId=1;
End transaction
commit; |
ÕâÑùÔÚµ¥ÌåÓ¦ÓÃÖУ¬ÓÉÓÚËùÓÐÊý¾Ý¶¼ÊDZ£´æÔÚͬһ¸öÊý¾Ý¿âÖУ¬Í¨¹ýÊý¾Ý¿âÌṩµÄACIDÌØÐÔ£¬¾Í¿ÉÒÔÇáËÉʵÏÖÊý¾ÝµÄʵʱһÖÂÐÔ¡£
µ«ÊÇ£¬ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬¿ÉÄܵÄÉè¼ÆÊÇ´æÔÚÁ½¸ö·þÎñ£º´¢Ðî·þÎñ£¨Deposit Service£©ºÍÀí²Æ·þÎñ£¨Finance
Service£©£¬¼ÙÉèÓÉ´¢Ðî·þÎñ¸ºÔð´¦Àí¿Í»§µÄתÕËÇëÇó¡£¶øÈçÏÂͼËùʾ£¬ÕâÁ½¸ö·þÎñ¶¼·Ö±ðά»¤×Ô¼ºµÄÊý¾Ý£¬Òò´Ë´¢Ðî·þÎñÎÞ·¨Ö±½Ó·ÃÎÊÀí²Æ·þÎñµÄÊý¾Ý£¬¶øÖ»ÄÜͨ¹ýAPIÈ¥Ð޸Ŀͻ§µÄÓà¶î¡£

´Ëʱ£¬ÎªÁËÂú×ã¶©µ¥·þÎñÓë¿Í»§·þÎñÖ®¼äµÄʵʱһÖÂÐÔÒªÇ󣬿ÉÒÔ²ÉÓ÷ֲ¼Ê½ÊÂÎñ£¬±ÈÈç»ùÓÚÁ½½×¶ÎÌá½»ÐÒé(Two-phase
commit, 2PC£©µÄʵÏÖÀ´×öµ½ÕâÒ»µã¡££¨¹ØÓÚ2PC£¬ÒѾÓдóÁ¿µÄÑо¿³É¹ûºÍ³É¹¦Êµ¼ù¾Ñ飬±¾ÎĽ«²»ÔÙ×öÌ«¶à²ûÊö£¬¾ßÌå¿É×ÔÐвμûÏà¹ØÎÄÏ׺Í×ÊÁÏ£©
¸ù¾ÝCAP¶¨Àí£¬ÎÒÃÇ×·ÇóʵʱһÖÂÐÔʱ£¬Í¨³£ÐèÒªÎþÉüµô²¿·Ö¿ÉÓÃÐÔ¡£±ÈÈçÒÔÉϳ¡¾°ÖУ¬µ± Finance
Service ÓÉÓÚÈíÓ²¼þ¹ÊÕÏ»òÍøÂçÎÊÌâ¶ø²»¿ÉÓõÄʱºò£¬ÏµÍ³½«ÎÞ·¨ÎªÓû§ÌṩÄÚ²¿×ªÕË·þÎñ¡£
´ËÍ⣬×÷ΪµäÐ͵Äͬ²½²Ù×÷£¬2PCÒ²´æÔÚ×űȽϱȽÏÑÏÖØµÄÐÔÄÜÎÊÌ⣬²¢²»Êʺϸ߲¢·¢³¡¾°¡£Òò´Ë£¬ÔÚÊý¾ÝÒ»ÖÂÐÔÉÏÎÒÃÇÐèҪѰÇóÆäËûµÄ½â¾ö·½°¸¡£
×îÖÕÒ»ÖÂÐÔ
Èç¹ûÎÒÃÇ¿¼ÂÇÖ»±£Ö¤ÏµÍ³µÄ×îÖÕÒ»ÖÂÐÔ£¬ÄÇô¾Í¿ÉÒÔ±ÜÃâʹÓÃ2PC£¬´Ó¶øÌá¸ßϵͳ¿ÉÓÃÐÔºÍÐÔÄÜ¡£
ÈÔÈ»ÒÔÒÔÉϵÄÓû§ÄÚ²¿ÕË»§Ö®¼äµÄתÕË·þÎñΪÀý¡£µ±Óû§´Ó´¢ÐîÕË»§ÏòÀí²ÆÕË»§×ªÕËʱ£¬¼õÉÙ´¢ÐîÕË»§µÄ½ð¶îÓëÔö¼ÓÀí²ÆÕË»§µÄ½ð¶îÕâÁ½¸ö¶¯×÷£¬¿ÉÒÔÎÞÐèÔÚÒ»¸öÊÂÎñÀïÃæÍê³É£¬¶øÊÇ·Ö³ÉÁ½²½£º
0. ´¢Ðî·þÎñ¼õÈ¥´¢ÐîÕË»§ÖеĽð¶î£¬²¢Éú³ÉÒ»¸öƾ֤£¨ÏûÏ¢£©·¢Ë͸øÀí²Æ·þÎñ£»
0. Àí²Æ·þÎñÊÕµ½Æ¾Ö¤ºó£¬ÔÚÀí²ÆÕË»§ÖÐÔö¼ÓÏàÓ¦µÄ½ð¶î¡£
ÎÒÃǻᷢÏÖÒÔÉϹý³ÌÔÚµÚ1²½Íê³ÉÖ®ºó£¬µÚ2²½Íê³É֮ǰ£¬´¢ÐîÕË»§ÓëÀí²ÆÕË»§Ö®¼äʵ¼ÊÉÏÊÇ´æÔÚ¶Ìʱ¼äµÄÊý¾Ý²»Ò»Öµġ£µ«ÊÇ£¬Ö»Òª×îÖÕµÚ2²½Äܹ»Íê³É£¬ÏµÍ³µÄÊý¾Ý¾ÍÈÔÈ»Äܹ»±£³ÖÒ»ÖÂÐÔ£¬Õâ¾ÍÊÇÎÒÃÇËù˵µÄ×îÖÕÒ»ÖÂÐÔ¡£
ÔÚ×îÖÕÒ»ÖÂÐÔÕâ¸öǰÌáÏ£¬¼´Ê¹Àí²Æ·þÎñÔÚij¶Îʱ¼äÄÚ²»¿ÉÓã¬ÏµÍ³ÈÔÈ»Äܹ»ÄÜΪÓû§ÌṩÄÚ²¿×ªÕË·þÎñ£¬´Ó¶øÌá¸ßÁËϵͳµÄ¿ÉÓÃÐÔ¡£
¶øÕâÑùÒ»ÖÖ»ùÓÚ×îÖÕÒ»ÖÂÐԵĽâ¾ö·½°¸£¬¾ÍÊDZ¾ÎĽ«Òª½éÉܵÄʼþÇý¶¯µÄ¼Ü¹¹£¨Event-driven Architecture£©¡£
ʼþÇý¶¯µÄ¼Ü¹¹
ËùνʼþÇý¶¯µÄ¼Ü¹¹£¬Ò²¾ÍÊÇʹÓÃʼþÀ´ÊµÏÖ¿ç¶à¸ö·þÎñµÄÒµÎñÂß¼¡£
ÔÚÕâÒ»¼Ü¹¹Àµ±ÓÐÖØÒªÊ¼þ·¢Éúʱ£¬±ÈÈç¸üÐÂÒµÎñÊý¾Ý£¬Ä³¸ö΢·þÎñ»á·¢²¼Ê¼þ£¬ÆäËü΢·þÎñÔò¶©ÔÄÕâЩʼþ£»µ±Ä³Ò»Î¢·þÎñ½ÓÊÕµ½Ê¼þ¾Í¿ÉÒÔ¸üÐÂ×Ô¼ºµÄÒµÎñÊý¾Ý£¬Í¬Ê±·¢²¼ÐµÄʼþ´¥·¢ÏÂÒ»²½¸üС£¶øÊ¼þµÄ·¢²¼Óë¶©ÔÄ£¬ÔòÒÀÀµÓÚÒ»¸ö¿É¿¿µÄÏûÏ¢´úÀí£¨Message
Broker£©¡£
ÒÔÉÏÎĵij¡¾°ÎªÀý£¬ÔÚʼþÇý¶¯µÄ¼Ü¹¹ÖУ¬´Ó´¢ÐîÕË»§×ªÕ˵½Àí²ÆÕË»§µÄ¹ý³ÌÈçÏ£º
0. ´¢Ðî·þÎñ½«Óû§µÄ´¢ÐîÕË»§ÖеĽð¶î¼õÉÙ10000£¬²¢·¢²¼¡°ÏòÀí²ÆÕË»§×ªÕË¡±Ê¼þ£»
0. Àí²Æ·þÎñ»ñÈ¡¡°×ªÕ˵½Àí²ÆÕË»§¡±Ê¼þ£¬ ¸üÐÂÀí²ÆÕË»§£¬½«Àí²ÆÕË»§µÄ½ð¶îÔö¼Ó10000£¬²¢·¢²¼¡°Àí²ÆÕË»§×ªÈ롱ʼþ£»
0. ´¢Ðî·þÎñ»ñÈ¡¡°Àí²ÆÕË»§×ªÈ롱ʼþ£¬½áÊø±¾´ÎתÕ˽»Òס£

ÔÚÕâÀïÐèÒª¿¼ÂǵÄÒ»¸öÎÊÌ⣬¾ÍÊÇתÕËʧ°Ü´¦Àí¡£±ÈÈçÒÔÉϵÚ2²½Èç¹ûÒòΪ¡°Àí²ÆÕË»§±»¶³½áÎÞ·¨×ªÈë×ʽð¡±Ö®ÀàµÄÔÒòʧ°ÜÁË£¬Àí²Æ·þÎñ¾ÍÓ¦¸Ã·¢²¼¡°Àí²ÆÕË»§×ªÈëʧ°Ü¡±Ê¼þ£¬´¢Ðî·þÎñ»ñÈ¡µ½¸Ãʼþºó£¬ÐèÒª¶Ô´¢ÐîÕË»§½øÐлعö£¬½«¼õÉٵĽð¶îÖØÐÂÔö¼Ó»ØÈ¥¡£
ÒÔÉϵĹý³ÌÓ봫ͳµÄÊý¾Ý¹ÜÀí»ùÓÚACIDÄ£ÐͲ»Ò»ÑùµÄÊÇ£¬ËüÊÇ»ùÓÚBASEÄ£Ð͵ġ£
BASE£º
- Basically Available£¨»ù±¾¿ÉÓã©£ºÏµÍ³ÔÚ³öÏÖ²»¿ÉÔ¤ÖªµÄ¹ÊÕϵÄʱºò£¬ÔÊÐíËðʧ²¿·Ö¿ÉÓÃÐÔ£¬µ«²»µÈÓÚϵͳ²»¿ÉÓÃ
- Soft State£¨Èí״̬£©£ºÔÊÐíϵͳÖеÄÊý¾Ý´æÔÚÖмä״̬£¬²¢ÈÏΪ¸ÃÖмä״̬µÄ´æÔÚ²»»áÓ°ÏìϵͳµÄÕûÌå¿ÉÓÃÐÔ
- Eventually Consistent£¨×îÖÕÒ»ÖÂÐÔ£©£ºÏµÍ³±£Ö¤×îÖÕÊý¾ÝÄܹ»´ïµ½Ò»ÖÂ
ʼþ·¢²¼
ÔÚʼþÇý¶¯µÄ¼Ü¹¹ÖУ¬¿ç·þÎñÍê³ÉÒµÎñÂß¼µÄÒ»¸ö¹Ø¼üµãÊÇÿ¸ö·þÎñ×Ô¶¯¸üÐÂÊý¾Ý¿âºÍ·¢²¼Ê¼þ£¬Ò²¾ÍÊÇÒªÒÔÔ×ÓÁ£¶È¸üÐÂÊý¾Ý¿âºÍ·¢²¼Ê¼þ¡£ÀýÈ磬´¢Ðî·þÎñ±ØÐëÔÚ¶Ô´¢ÐîÕË»§±í½øÐиüУ¬È»ºó·¢²¼¡°ÏòÀí²ÆÕË»§×ªÕË¡±Ê¼þ£¬ÕâÁ½¸ö²Ù×÷ÐèÒªÔ×Ó»¯ÊµÏÖ¡£Èç¹û·þÎñÔÚ¸üÐÂÊý¾Ý¿âÖ®ºó¡¢·¢²¼Ê¼þ֮ǰ±ÀÀ££¬ÏµÍ³»á±äµÃ²»Ò»Ö¡£
±£Ö¤Êý¾Ý¸üÐÂÓëʼþ·¢²¼Ô×Ó»¯µÄ·½·¨£¬ÓÐÒÔϼ¸ÖÖ£º
- ʹÓñ¾µØÊÂÎñ·¢²¼Ê¼þ
- ÍÚ¾òÊý¾Ý¿âÊÂÎñÈÕÖ¾
- ʹÓÃʼþÔ´
ʹÓñ¾µØÊÂÎñ·¢²¼Ê¼þ
Ò»¸öʵÏÖÔ×Ó»¯µÄ·½·¨ÊÇʹÓñ¾µØÊÂÎñÀ´¸üÐÂÒµÎñʵÌåºÍʼþÁÐ±í£¬ÓÉÒ»¸ö¶ÀÁ¢½ø³ÌÀ´·¢²¼Ê¼þ¡£¾ßÌåÀ´Ëµ£¬¾ÍÊÇÔÚ´æ´¢ÒµÎñʵÌå״̬µÄÊý¾Ý¿âÖУ¬Ê¹ÓÃÒ»¸öʼþ±íÀ´³äµ±ÏûÏ¢¶ÓÁС£Ó¦ÓÃÆô¶¯Ò»¸ö£¨±¾µØ£©Êý¾Ý¿âÊÂÎñ£¬¸üÐÂÒµÎñʵÌåµÄ״̬£¬ÔÚʼþ±íÖвåÈëÒ»¸öʼþ£¬²¢Ìá½»¸ÃÊÂÎñ¡£Ò»¸ö¶ÀÁ¢µÄÏûÏ¢·¢²¼Ï̻߳ò½ø³Ì²éѯ¸Ãʼþ±í£¬½«Ê¼þ·¢²¼µ½ÏûÏ¢´úÀí£¬²¢±ê×¢¸ÃʼþΪÒÑ·¢²¼¡£ÏÂͼչʾÁËÕâÒ»Éè¼Æ¡£

´¢Ðî·þÎñ¸üд¢ÐîÕË»§µÄÓà¶î£¬È»ºóÔÚʼþ±íÖвåÈ롰תÕ˵½Àí²ÆÕË»§¡±µÄʼþ¡£Ê¼þ·¢²¼Ï̻߳ò½ø³ÌÔÚʼþ±íÖвéѯδ·¢²¼µÄʼþ²¢·¢²¼£¬È»ºó¸üÐÂʼþ±í£¬½«¸Ãʼþ±ê¼ÇΪÒÑ·¢²¼¡£
ÕâÖÖ·½·¨µÄÓŵãÊÇ£º
- ʹÓñ¾µØÊÂÎñ£¬±£Ö¤ÁËÊý¾Ý±»¸üÐÂʱʼþÒ»¶¨Äܹ»±»·¢²¼
- ʵÏÖ¼òµ¥£¬Ö»ÐèҪϵͳ¾ß±¸±¾µØÊÂÎñµÄÄÜÁ¦¼´¿ÉʵÏÖ
ÕâÖÖ·½·¨µÄÒ»¸öȱµãÊÇ£¬Êý¾Ý¸üвÙ×÷ÓëËùÒª·¢²¼µÄʼþÖ®¼äµÄ¶ÔÓ¦¹ØÏµ£¬ÊÇÓÉÓ¦ÓõĿª·¢ÕßʵÏֵģ¬Òò´ËÓкܴó¿ÉÄܳö´í¡£
ÍÚ¾òÊý¾Ý¿âÊÂÎñÈÕÖ¾
ʵÏÖÔ×Ó»¯µÄÁíÒ»ÖÖ·½Ê½ÊÇÓÉÏ̻߳òÕß½ø³Ìͨ¹ýÍÚ¾òÊý¾Ý¿âÊÂÎñ»òÌá½»ÈÕÖ¾À´·¢²¼Ê¼þ¡£Ó¦ÓøüÐÂÊý¾Ý¿â£¬Êý¾Ý¿âµÄÊÂÎñÈÕÖ¾»á¼Ç¼ÕâЩ±ä¸ü¡£ÊÂÎñÈÕÖ¾ÍÚ¾òÏ̻߳ò½ø³Ì¶ÁÈ¡ÕâЩÈÕÖ¾£¬²¢°Ñʼþ·¢²¼µ½ÏûÏ¢´úÀí¡£
±ÈÈçÒ»¸öB2CµÄµçÉÌÍøÕ¾£¬¾Í¿ÉÒÔͨ¹ýÍÚ¾ò¶©µ¥Êý¾ÝµÄ¸üÐÂÈÕÖ¾£¬À´½øÐÐʼþ·¢²¼¡£ÈçÏÂͼËùʾ£º

ÕâÒ»·½·¨µÄ·¶ÀýÊÇ¿ªÔ´µÄ LinkedIn Databus ÏîÄ¿¡£Databus ÍÚ¾ò Oracle
ÊÂÎñÈÕÖ¾²¢·¢²¼ÓëÖ®¶ÔÓ¦µÄʼþ£¬LinkedIn ÔòʹÓà Databus ά³Ö¸÷ÖÖÀ´Ô´µÄÊý¾Ý´æ´¢Óë¼Ç¼ϵͳһÖ¡£
ÁíÒ»¸ö·¶ÀýÔòÊÇ AWS DynamoDB ²ÉÓõÄÁ÷»úÖÆ¡£AWS DynamoDB ÊÇÒ»¸ö¿É¹ÜÀíµÄ
NoSQL Êý¾Ý¿â£¬ÆäÖÐÿ¸ö DynamoDB Á÷°üÀ¨ DynamoDB ±íÔÚ¹ýÈ¥ 24 Сʱ֮ÄÚµÄʱÐò±ä»¯£¬°üÀ¨´´½¨¡¢¸üкÍɾ³ý²Ù×÷¡£Ó¦ÓÃÄܹ»¶ÁÈ¡ÕâЩ±ä¸ü£¬½«Æä×÷Ϊʼþ·¢²¼¡£
ÕâÖÖ·½·¨µÄÓŵãÊÇ£º
- Òª·¢²¼µÄʼþÖ±½ÓÀ´Ô´ÓÚÊý¾Ý¿âµÄÊÂÎñÈÕÖ¾£¬Òò´Ë²»»á³ö´í
- Ó¦ÓÃÎÞÐè¹Ø×¢Ê¼þµÄ·¢²¼£¬¼ò»¯ÁËÓ¦Óÿª·¢ÕߵŤ×÷
µ«ÊÇÕâÖÖ·½·¨Ò²ÓÐһЩȱµã£º
- ÊÂÎñÈÕÖ¾µÄ¸ñʽÓëËùʹÓõÄÊý¾Ý¿âÏà¹Ø£¬Òò´ËʼþÍÚ¾ò µÄʵÏÖ»áÓÉÓÚÊý¾Ý¿âµÄÖÖÀà»ò°æ±¾µÄ±ä»¯¶øËæÖ®ÐèÒªÐÞ¸Ä
- ÓÉÓÚÊÇÖ±½Ó´ÓÊý¾Ý¿âµÄ¸üмǼÉú³Éʼþ£¬Òò´Ë¿ÉÄÜ»áÎÞ·¨ÄæÏòÍÆ¶Ï³öÒµÎñÂß¼£¬Òò´Ë²¢²»ÊʺÏÓÚËùÓг¡¾°£¨±ÈÈçǰÎÄËùÊöµÄתÕ˳¡¾°£©
ʹÓÃʼþÔ´
ʼþÔ´²ÉÓÃÒ»ÖÖ½ØÈ»²»Í¬µÄ¡¢ÒÔʼþΪÖÐÐĵķ½·¨À´±£´æÒµÎñʵÌ塪¡ª²»Í¬Óڴ洢ʵÌåµÄµ±Ç°×´Ì¬£¬Ó¦Óô洢µÄÊÇ״̬¸Ä±äµÄʼþÐòÁС£Ã¿µ±ÒµÎñʵÌåµÄ״̬¸Ä±ä£¬ÐÂʼþ¾Í±»¸½¼Óµ½Ê¼þÁÐ±í£¬²¢ÇÒÓ¦ÓÿÉÒÔͨ¹ýʼþ»Ø·ÅÀ´Öع¹ÊµÌåµÄµ±Ç°×´Ì¬¡£¼øÓÚ±£´æÊ¼þÊÇÒ»¸öµ¥Ò»µÄ²Ù×÷£¬Òò´Ë±¾ÖÊÉÏÒ²ÊÇÔ×Ó»¯µÄ¡£
ÒªÁ˽âʼþÔ´ÈçºÎÔËÐУ¬¿ÉÒÔÒÔ´¢Ðî·þÎñΪÀý¡£ÔÚ´«Í³µÄ·½·¨ÖУ¬Ã¿´ÎתÕ˽»Ò×¶¼»á¸üд¢ÐîÕË»§±íµÄ¼Ç¼¡£¶øÊ¹ÓÃʼþÔ´µÄʱºò£¬´¢Ðî·þÎñÒÔ״̬¸ü¸ÄʼþµÄ·½Ê½´æ´¢Óû§µÄ´¢ÐîÕË»§£¬Ã¿¸öʼþ¶¼°üº¬×ã¹»µÄÊý¾ÝÈ¥ÖØ½¨´¢ÐîÕË»§×´Ì¬¡£

ʼþ³¤ÆÚ±£´æÔÚʼþ²Ö¿â£¨Event Store£©£¬Ê¹Óà API Ìí¼ÓºÍ¼ìË÷ʵÌåµÄʼþ¡£Í¬Ê±£¬Ê¼þ²Ö¿âÆðµ½ÀàËÆÉÏÎÄÌá¼°µÄÏûÏ¢´úÀíµÄ×÷Óã¬Í¨¹ý
API È÷þÎñ¶©ÔÄʼþ£¬½«ËùÓÐʼþ´«´ïµ½ËùÓиÐÐËȤµÄ¶©ÔÄÕß¡£ËùÒÔ£¬Ê¼þ²Ö¿â¿ÉÒÔÈÏΪÊÇÊý¾Ý¿âÓëÏûÏ¢´úÀíµÄ×ÛºÏÌ壬ÊÇʼþÔ´·½·¨µÄÖ§Öù¡£

ʼþÔ´·½·¨ÓÐÈçϵÄÓŵ㣺
- ʼþ¼´×´Ì¬£¬·¢²¼Ê¼þ¾ÍÊÇÔÚ¸üÐÂ״̬£¬Òò´ËÌìÈ»¾ßÓÐÔ×ÓÐÔ£¬²¢ÇÒ²»»á³ö´í
- ÓÉÓÚ´æ´¢µÄÊÇʼþ£¬¶ø²»ÊÇÓò¶ÔÏó£¬Òò´Ë±ÜÃâÁ˶ÔÏó¹ØÏµ¿¹×費ƥÅäµÄÎÊÌ⣨object?relational
impedance mismatch problem£©
- ÓÉÓÚ´æ´¢ÁËËùÓеÄÒµÎñ״̬¸üÐÂʼþ£¬Òò´Ë¿ÉÒÔͨ¹ýʼþ»Ø·ÅÍÆ¶Ï³öÈÎһʱ¼äµãµÄÒµÎñʵÌå״̬
ʼþÔ´·½·¨Ò²ÓÐÒÔÏÂÕâЩȱµã£º
- ҪʵÏÖÒ»¸ö¿É¿¿ºÍ¸ßÐÔÄܵÄʼþ²Ö¿â²¢²»ÊÇÒ»¼þÈÝÒ×µÄÊÂÇé
- Ó¦ÓôúÂëÐèÒª¸ù¾Ýʼþ²Ö¿âµÄ API ½øÐÐÖØÐ´
- ʼþ²Ö¿âÖ»Ö±½ÓÖ§³Öͨ¹ýÖ÷¼ü²éѯҵÎñʵÌ壬Òò´Ë¶ÔÓÚ¸´ÔÓÊÓͼµÄ²éѯ±È½ÏÀ§ÄÑ£¨¿ÉÒÔͨ¹ýCQRS·½·¨½â¾ö£¬¾ßÌå²Î¼ûÏÂÎÄ£©
ÃüÁî²éѯ·ÖÀ루CQRS£©
ÔÚʼþÔ´·½·¨ÖУ¬²»ÔÙÖ±½Ó´æ´¢ÈκÎÒµÎñʵÌåµÄ״̬£¬¶øÊÇ´úÖ®ÒÔ״̬±ä¸üʼþ¡£ÔÚ½øÐи´ÔÓÊÓͼµÄ²éѯʱ£¬Èç¹û»¹°´ÕÕÓëÃüÁî²Ù×÷ͬÑùµÄ·½Ê½£¬½«»áÓöµ½Ò»Ð©À§ÄÑ¡£±ÈÈçÒª·¢ÆðÈçϵÄÒ»¸öÍ¬Ê±Éæ¼°´¢ÐîÕË»§ºÍÀí²ÆÕË»§µÄ²éѯ²Ù×÷£º
SELECT *
FROM DEPOSIT_ACCOUNT deposit, FINANCE_ACCOUNT
finance
WHERE
deposit.user_id = finance.user_id
AND finance.state = 'active'
AND deposit.amount > 100000
AND finance.amount > 5000 |
ÔÚ·ÇʼþÔ´µÄ·½Ê½Ï£¬¿ÉÒÔºÜÈÝÒ׵ĴӴ¢ÐîÕË»§±íºÍÀí²ÆÕË»§±í²éѯµ½ÏàÓ¦Êý¾Ý¡£µ«ÊÇÔÚʼþÔ´·½Ê½Ï£¬Ê¼þ²Ö¿âÖд洢µÄÊÇһϵÁÐʼþ£¬²¢ÇÒÖ»ÄÜͨ¹ýÖ÷¼ü£¨±ÈÈç
deposit_account.id »ò finance_account.id£©È¥²éѯÏàÓ¦µÄÒµÎñʵÌ壬´ËʱҪ´¦ÀíÀàËÆ
deposit.amount > 100000 ÕâÑùµÄ²éѯÌõ¼þÒÔ¼°Ìõ¼þ×éºÏʱ£¬ÊǷdz£¸´ÔӺ͵ÍЧµÄ¡£
ΪÁ˽â¾öÕâÒ»ÎÊÌ⣬¿ÉÒÔ²ÉÓÃCQRS·½·¨£¬½«ÃüÁîÓë²éѯ·ÖÀë¡£ÃüÁî²Ù×÷ÈÔȻͨ¹ý¸÷·þÎñµÄ API ÒÔ¸üÐÂʼþÁбíµÄ·½Ê½½øÐУ¬¶ø²éѯ²Ù×÷Ôòͨ¹ýÒ»¸öͳһµÄÊÓͼ²éѯ·þÎñ£¨View
Query Service£©Íê³É¡£

¸ù¾Ý´æ´¢ÔÚʼþ²Ö¿âÖеÄʼþ¼¯ºÏ£¬¿ÉÒÔ¼ÆËãµÃµ½Ã¿¸öÒµÎñʵÌåµÄ״̬£¬ÕâЩ״̬ÒÔÎﻯÊÓͼ£¨Materialized
View£©µÄ·½Ê½´æ´¢ÔÚÒ»¸öÊý¾Ý¿âÖС£µ±ÓÐеÄʼþ²úÉúʱ£¬Ò²Í¬Ñù»á×Ô¶¯¸üÐÂÊÓͼ¡£ÕâÑù£¬ÊÓͼ²éѯ·þÎñ¾Í¿ÉÒÔÏñ²éѯÆÕͨµÄÊý¾Ý¿âÊý¾ÝÒ»ÑùʵÏÖ¸÷ÖÖ²éѯ³¡¾°¡£¾ßÌåµÄÉè¼Æ¿É²Î¿¼ÏÂͼËùʾ£º

½áÂÛ
ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬Ã¿¸ö΢·þÎñ¶¼ÓÐÆä˽ÓÐÊý¾Ý´æ´¢£¬²»Í¬µÄ΢·þÎñ¿ÉÄÜʹÓò»Í¬µÄÊý¾Ý¿â¡£ÕâÖּܹ¹´øÀ´±ãÀûµÄͬʱ£¬Ò²¸ø·Ö²¼Ê½Êý¾Ý¹ÜÀí´øÀ´ÌôÕ½£¬ÆäÖÐ×î´óµÄÌôÕ½¾ÍÊÇÔÚʵÏÖ¿ç·þÎñµÄÒµÎñÂ߼ʱ£¬ÈçºÎ±£³Ö·þÎñÖ®¼äµÄÊý¾ÝÒ»ÖÂÐÔ¡£
¶ÔÓÚÐí¶àÓ¦Ó㬽â¾ö·½°¸¾ÍÊÇʹÓÃʼþÇý¶¯µÄ¼Ü¹¹¡£Ê¼þÇý¶¯µÄ¼Ü¹¹´øÀ´µÄÌôÕ½ÊÇÈçºÎÔ×Ó»¯µØ¸üÐÂ״̬ºÍ·¢²¼Ê¼þ¡£Óм¸¸ö·½·¨¿ÉÒÔ×öµ½ÕâÒ»µã£¬°üÀ¨°ÑÊý¾Ý¿âÓÃ×÷ÏûÏ¢¶ÓÁС¢ÊÂÎñÈÕÖ¾ÍÚ¾òºÍʼþÔ´¡£ |