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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
΢·þÎñ¼Ü¹¹Ïµķֲ¼Ê½Êý¾Ý´æ´¢
 
À´Ô´£º»¥ÁªÍø ×÷ÕߣºÐ¡¶÷ ·¢²¼ÓÚ£º 2017-5-27
  3842  次浏览      27
 

1.1 ·Ö²¼Ê½Êý¾Ý¹ÜÀí֮ʹµã

ΪÁËÈ·±£Î¢·þÎñÖ®¼äËÉñîºÏ£¬Ã¿¸ö·þÎñ¶¼ÓÐ×Ô¼ºµÄÊý¾Ý¿â, ÓеÄÊǹØÏµÐÍÊý¾Ý¿â(SQL)£¬ÓеÄÊǷǹØÏµÐÍÊý¾Ý¿â(NoSQL)¡£

¿ª·¢ÆóÒµÊÂÎñÍùÍùÇ£Éæµ½¶à¸ö·þÎñ£¬ÒªÏë×öµ½¶à¸ö·þÎñÊý¾ÝµÄÒ»ÖÂÐÔ²¢·ÇÒ×Ê£¬Í¬Ñù£¬ÔÚ¶à¸ö·þÎñÖ®¼ä½øÐÐÊý¾Ý²éѯҲ³äÂúÌôÕ½¡£

ÎÒÃÇÒÔÒ»¸öÔÚÏßB2BÉ̵êΪÀý£¬¿Í»§·þÎñ °üÀ¨Á˿ͻ§µÄ¸÷ÖÖÐÅÏ¢£¬ÀýÈç¿ÉÓÃÐÅÓõȡ£

¹ÜÀí¶©µ¥£¬Ìṩ¶©µ¥·þÎñ£¬ÔòÐèÒªÑé֤ij¸öж©µ¥Óë¿Í»§µÄÐÅÓÃÏÞÖÆÃ»ÓгåÍ»¡£

ÔÚµ¥ÌåÓ¦ÓÃÖУ¬¶©µ¥·þÎñÖ»ÐèҪʹÓô«Í³ÊÂÎñ½»Ò׾ͿÉÒÔÒ»´ÎÐÔ¼ì²é¿ÉÓÃÐÅÓúʹ´½¨¶©µ¥¡£

Ï෴΢·þÎñ¼Ü¹¹Ï£¬¶©µ¥ºÍ¿Í»§±í·Ö±ðÊÇÏàÓ¦·þÎñµÄ˽ÓÐ±í£¬ÈçÏÂͼËùʾ£º

¶©µ¥·þÎñ²»ÄÜÖ±½Ó·ÃÎʿͻ§±í£¬Ö»ÄÜͨ¹ý¿Í»§·þÎñ·¢²¼µÄAPIÀ´·ÃÎÊ»òÕßʹÓ÷ֲ¼Ê½ÊÂÎñ, Ò²¾ÍÊÇÖÚËùÖÜÖªµÄÁ½½×¶ÎÌá½» (2PC)À´·ÃÎʿͻ§±í£¬2PCÒâÒåͼÈçÏÂËùʾ£º

ÕâÀï´æÔÚÁ½¸öÌôÕ½£¬µÚÒ»¸öÌôÕ½ÊÇ2PC³ýÒªÇóÊý¾Ý¿â±¾ÉíÖ§³ÖÍ⣬»¹ÒªÇó·þÎñµÄÊý¾Ý¿âÀàÐÍÐèÒª±£³ÖÒ»Ö¡£

µ«ÊÇÏÖÔÚµÄ΢·þÎñ¼Ü¹¹ÖУ¬Ã¿¸ö·þÎñµÄÊý¾Ý¿âÀàÐÍ¿ÉÄÜÊDz»Ò»ÑùµÄ£¬ÓеĿÉÄÜÊÇMySQLÊý¾Ý¿â£¬ÓеÄÒ²¿ÉÄÜÊÇNoSQLÊý¾Ý¿â;

µÚ¶þ¸öÌôÕ½ÊÇÈçºÎʵÏÖ´Ó¶à¸ö·þÎñÖвéѯÊý¾Ý¡£¼ÙÉèÓ¦ÓóÌÐòÐèÒªÏÔʾһ¸ö¿Í»§ºÍËû×î½üµÄ¶©µ¥¡£Èç¹û¶©µ¥·þÎñÌṩÓÃÓÚ¼ìË÷¿Í»§¶©µ¥µÄAPI£¬ÄÇôӦÓóÌÐò¶Ë¿ÉÒÔͨ¹ýJOIN·½Ê½À´¼ìË÷´ËÊý¾Ý£¬¼´Ó¦ÓóÌÐòÊ×Ñ¡´Ó¿Í»§·þÎñ¼ìË÷¿Í»§£¬²¢´Ó¶©µ¥·þÎñ¼ìË÷¿Í»§µÄ¶©µ¥¡£

È»¶ø£¬Èç¹û¶©µ¥·þÎñ½öÖ§³Öͨ¹ýÆäÖ÷¼ü²éÕÒ¶©µ¥(Ò²ÐíËüʹÓýöÖ§³Ö»ùÓÚÖ÷¼üµÄ¼ìË÷µÄNoSQLÊý¾Ý¿â)£¬ ÔÚÕâÖÖÇé¿öÏ£¬¾ÍûÓз½·¨À´¼ìË÷²éѯËùÐèµÄÊý¾Ý¡£

Ϊ½â¾öÕâÁ½´óÍ´µã£¬¾ÍÐèÒªÎÒÃÇʹÓõ½·Ö²½Ê½Êý¾Ý¹ÜÀíÁË¡£

1.2 ·Ö²¼Ê½Êý¾Ý¹ÜÀíÖ®¾Ù´ë

ÔÚ½éÉÜ·Ö²¼Ê½Êý¾Ý¹ÜÀí(CRUD)½â¾ö·½°¸Ö®Ç°£¬ÓбØÒª½éÉÜÏÂCAPÔ­ÀíºÍ×îÖÕÒ»ÖÂÐÔÏà¹Ø¸ÅÄî¡£

1.2.1 CAPÔ­ÀíºÍ×îÖÕÒ»ÖÂÐÔ

1.2.1.1 CAPÔ­Àí(CAP Theorem)

ÔÚ×ãÇò±ÈÈüÀһ¸öÇòÔ±ÔÚÒ»³¡±ÈÈüÖнøÈý¸öÇò£¬³ÆÖ®ÎªÃ±×ÓÏ··¨(Hat-trick)¡£ÔÚ·Ö²¼Ê½Êý¾ÝϵͳÖУ¬Ò²ÓÐÒ»¸öñ×ÓÔ­Àí(CAP Theorem)£¬²»¹ý´Ëñ×ӷDZËñ×Ó¡£CAPÔ­ÀíÖУ¬ÓÐÈý¸öÒªËØ£º

1)Ò»ÖÂÐÔ(C onsistency)

2)¿ÉÓÃÐÔ(A vailability)

3)·ÖÇøÈÝÈÌÐÔ(P artition tolerance)

CAPÔ­ÀíÖ¸µÄÊÇ£¬ÕâÈý¸öÒªËØ×î¶àÖ»ÄÜͬʱʵÏÖÁ½µã£¬²»¿ÉÄÜÈýÕß¼æ¹Ë¡£

Òò´ËÔÚ½øÐзֲ¼Ê½¼Ü¹¹Éè¼ÆÊ±£¬±ØÐë×ö³öÈ¡Éá¡£¶ø¶ÔÓÚ·Ö²¼Ê½Êý¾Ýϵͳ£¬·ÖÇøÈÝÈÌÐÔÊÇ»ù±¾ÒªÇó £¬·ñÔò¾ÍʧȥÁ˼ÛÖµ£¬Òò´ËÉè¼Æ·Ö²¼Ê½Êý¾Ýϵͳ£¬¾ÍÊÇÔÚÒ»ÖÂÐԺͿÉÓÃÐÔÖ®¼äȡһ¸öƽºâ¡£

¶ÔÓÚ´ó¶àÊýwebÓ¦ Óã¬Æäʵ²¢²»ÐèҪǿһÖÂÐÔ£¬Òò´ËÎþÉüÒ»ÖÂÐÔ¶ø»»È¡¸ß¿ÉÓÃÐÔ£¬ÊÇĿǰ¶àÊý·Ö²¼Ê½Êý¾Ý¿â²úÆ·µÄ·½Ïò¡£

µ±È»£¬ÎþÉüÒ»ÖÂÐÔ£¬²¢²»ÊÇÍêÈ«²»¹ÜÊý¾ÝµÄÒ»ÖÂÐÔ£¬·ñÔòÊý¾ÝÊÇ»ìÂҵģ¬ÄÇôϵͳ¿ÉÓÃÐÔÔٸ߷ֲ¼Ê½ÔÙºÃҲûÓÐÁ˼ÛÖµ¡£

ÎþÉüÒ»ÖÂÐÔ£¬Ö»ÊDz»ÔÙÒªÇó¹ØÏµÐÍÊý ¾Ý¿âÖеÄǿһÖÂÐÔ£¬¶øÊÇֻҪϵͳÄÜ´ïµ½×îÖÕÒ»ÖÂÐÔ¼´¿É£¬¿¼Âǵ½¿Í»§ÌåÑ飬Õâ¸ö×îÖÕÒ»ÖµÄʱ¼ä´°¿Ú£¬Òª¾¡¿ÉÄܵĶÔÓû§Í¸Ã÷£¬Ò²¾ÍÊÇÐèÒª±£ÕÏ¡°Óû§¸ÐÖªµ½µÄÒ»ÖÂÐÔ¡±¡£

ͨ³£ÊÇͨ¹ýÊý¾ÝµÄ¶à·ÝÒì²½¸´ÖÆÀ´ÊµÏÖϵͳµÄ¸ß¿ÉÓúÍÊý¾ÝµÄ×îÖÕÒ»ÖÂÐԵ쬡°Óû§¸ÐÖªµ½µÄÒ»ÖÂÐÔ¡±µÄʱ¼ä´°¿ÚÔò È¡¾öÓÚÊý¾Ý¸´ÖƵ½Ò»ÖÂ״̬µÄʱ¼ä¡£

1.2.1.2 ×îÖÕÒ»ÖÂÐÔ(eventually consistent)

¶ÔÓÚÒ»ÖÂÐÔ£¬¿ÉÒÔ·ÖΪ´Ó¿Í»§¶ËºÍ·þÎñ¶ËÁ½¸ö²»Í¬µÄÊӽǡ£

´Ó¿Í»§¶ËÀ´¿´£¬Ò»ÖÂÐÔÖ÷ÒªÖ¸µÄÊǶಢ·¢·ÃÎÊʱ¸üйýµÄÊý¾ÝÈçºÎ»ñÈ¡µÄÎÊÌâ¡£

´Ó·þÎñ¶ËÀ´¿´£¬ÔòÊǸüÐÂÈçºÎ¸´ÖÆ·Ö²¼µ½Õû¸öϵͳ£¬ÒÔ±£Ö¤Êý¾Ý×îÖÕÒ»Ö¡£

Ò»ÖÂÐÔÊÇÒòΪÓв¢·¢¶Áд²ÅÓеÄÎÊÌ⣬Òò´ËÔÚÀí½âÒ»ÖÂÐÔµÄÎÊÌâʱ£¬Ò»¶¨Òª×¢Òâ½áºÏ¿¼ÂDz¢·¢¶ÁдµÄ³¡¾°¡£

´Ó¿Í»§¶Ë½Ç¶È£¬¶à½ø³Ì²¢·¢·ÃÎÊʱ£¬¸üйýµÄÊý¾ÝÔÚ²»Í¬½ø³ÌÈçºÎ»ñÈ¡µÄ²»Í¬²ßÂÔ£¬¾ö¶¨Á˲»Í¬µÄÒ»ÖÂÐÔ¡£

¶ÔÓÚ¹ØÏµÐÍÊý¾Ý¿â£¬ÒªÇó¸üйýµÄÊý¾ÝÄܱ»ºóÐøµÄ ·ÃÎʶ¼ÄÜ¿´µ½£¬ÕâÊÇǿһÖÂÐÔ ;Èç¹ûÄÜÈÝÈ̺óÐøµÄ²¿·Ö»òÕßÈ«²¿·ÃÎʲ»µ½£¬ÔòÊÇÈõÒ»ÖÂÐÔ ; Èç¹û¾­¹ýÒ»¶Îʱ¼äºóÒªÇóÄÜ·ÃÎʵ½¸üкóµÄÊý¾Ý£¬ÔòÊÇ×îÖÕÒ»ÖÂÐÔ¡£

´Ó·þÎñ¶Ë½Ç¶È£¬ÈçºÎ¾¡¿ì½«¸üкóµÄÊý¾Ý·Ö²¼µ½Õû¸öϵͳ£¬½µµÍ´ïµ½×îÖÕÒ»ÖÂÐÔµÄʱ¼ä´°¿Ú£¬ÊÇÌá¸ßϵͳµÄ¿ÉÓöȺÍÓû§ÌåÑé·Ç³£ÖØÒªµÄ·½Ãæ¡£

ÄÇôÎÊÌâÀ´ÁË£¬ÈçºÎʵÏÖÊý¾ÝµÄ×îÖÕÒ»ÖÂÐÔÄØ?´ð°¸¾ÍÔÚʼþÇý¶¯¼Ü¹¹¡£

1.2.2 ʼþÇý¶¯¼Ü¹¹¼ò½é

Chris Richardson×÷Ϊ΢·þÎñ¼Ü¹¹Éè¼ÆÁìÓòµÄȨÍþ£¬¸ø³öÁË·Ö²¼Ê½Êý¾Ý¹ÜÀíµÄ×î¼Ñ½â¾ö·½°¸¡£

¶ÔÓÚ´ó¶àÊýÓ¦ÓöøÑÔ£¬ÒªÊµÏÖ΢·þÎñµÄ·Ö²¼Ê½Êý¾Ý¹ÜÀí£¬ÐèÒª²ÉÓÃʼþÇý¶¯¼Ü¹¹(event-driven architecture)¡£

ÔÚʼþÇý¶¯¼Ü¹¹ÖУ¬µ±Ä³¼þÖØÒªÊÂÇé·¢Éúʱ£¬Î¢·þÎñ»á·¢²¼Ò»¸öʼþ£¬ÀýÈç¸üÐÂÒ»¸öÒµÎñʵÌå¡£

µ±¶©ÔÄÕâЩʼþµÄ΢·þÎñ½ÓÊÕ´Ëʼþʱ£¬¾Í¿ÉÒÔ¸üÐÂ×Ô¼ºµÄÒµÎñʵÌ壬Ҳ¿ÉÄÜ»áÒý·¢¸ü¶àµÄʼþ·¢²¼£¬ÈÃÆäËûÏà¹Ø·þÎñ½øÐÐÊý¾Ý¸üУ¬×îÖÕʵÏÖ·Ö²¼Ê½Êý¾Ý×îÖÕÒ»ÖÂÐÔ¡£

¿ÉÒÔʹÓÃʼþÀ´ÊµÏÖ¿ç¶à·þÎñµÄÒµÎñ½»Òס£½»Ò×Ò»°ãÓÉһϵÁв½Öè¹¹³É£¬Ã¿Ò»²½Öè¶¼ÓÉÒ»¸ö¸üÐÂÒµÎñʵÌåµÄ΢·þÎñºÍ·¢²¼¼¤»îÏÂÒ»²½ÖèµÄʼþ¹¹³É¡£

1.2.2.1 ʼþÇý¶¯Ê¾Àý1

ÏÂͼչÏÖÈçºÎʹÓÃʼþÇý¶¯·½·¨£¬ÔÚ´´½¨¶©µ¥Ê±¼ì²éÐÅÓÿÉÓöȣ¬Î¢·þÎñÖ®¼äͨ¹ýÏûÏ¢´úÀí(Messsage Broker)À´½»»»Ê¼þ¡£

1. ¶©µ¥·þÎñ´´½¨Ò»¸ö´øÓÐNEW״̬µÄOrder (¶©µ¥)£¬·¢²¼ÁËÒ»¸ö¡°Order Created Event(´´½¨¶©µ¥)¡±µÄʼþ¡£

2. ¿Í»§·þÎñ Ïû·ÑOrder Created Eventʼþ£¬Îª´Ë¶©µ¥Ô¤ÁôÐÅÓ㬷¢²¼¡°Credit Reserved Event(ÐÅÓÃÔ¤Áô)¡±Ê¼þ¡£

3. ¶©µ¥·þÎñÏû·ÑCredit Reserved Event£¬¸Ä±ä¶©µ¥µÄ״̬ΪOPEN¡£

1.2.2.2 ʼþÇý¶¯Ê¾Àý2

ÏÂͼչÏÖÈçºÎʹÓÃʼþÇý¶¯·½·¨£¬ÔÚ´´½¨¶©µ¥Ê±´¥·¢Ö§¸¶ÒµÎñµÄÊý¾Ý¸üУ¬Î¢·þÎñÖ®¼äͨ¹ýÏûÏ¢´úÀí(Messsage Broker)À´½»»»Ê¼þ¡£

1. ¶©µ¥·þÎñ´´½¨Ò»¸ö´ýÖ§¸¶µÄ¶©µ¥£¬·¢²¼Ò»¸ö¡°´´½¨¶©µ¥¡±µÄʼþ¡£

 

2. Ö§¸¶·þÎñÏû·Ñ¡°´´½¨¶©µ¥¡±Ê¼þ£¬Ö§¸¶Íê³Éºó·¢²¼Ò»¸ö¡°Ö§¸¶Íê³É¡±Ê¼þ¡£

3. ¶©µ¥·þÎñÏû·Ñ¡°Ö§¸¶Íê³É¡±Ê¼þ£¬¶©µ¥×´Ì¬¸üÐÂΪ´ý³ö¿â¡£

1.2.3 ʼþÇý¶¯¼Ü¹¹Ö®·Ö²¼Ê½Êý¾Ý¸üÐÂ

ÉϽÚͨ¹ýʾÀý¸ÅÒª½éÉÜÁËͨ¹ýʼþÇý¶¯·½Ê½£¬ÊµÏÖÁË·Ö²¼Ê½Êý¾Ý×îÖÕÒ»ÖÂÐÔ±£Ö¤¡£×ݹÛ΢·þÎñ¼Ü¹¹ÏµÄʼþÇý¶¯ÒµÎñ´¦ÀíÂß¼­£¬ÆäºËÐÄÒªµãÔÚÓÚ£¬¿É¿¿µÄʼþͶµÝºÍ±ÜÃâʼþµÄÖØ¸´Ïû·Ñ¡£

¿É¿¿Ê¼þͶµÝÓÐÒÔÏÂÁ½¸öÌØÐÔ£º

1) ÿ¸ö·þÎñÔ­×ÓÐÔµÄÍê³ÉÒµÎñ²Ù×÷ºÍ·¢²¼Ê¼þ;

2) ÏûÏ¢´úÀíÈ·±£Ê¼þͶµÝÖÁÉÙÒ»´Î(at least once);

¶ø±ÜÃâʼþÖØ¸´Ïû·ÑÔòÒªÇóÏû·ÑʼþµÄ·þÎñʵÏÖÃݵÈÐÔ£¬±ÈÈçÖ§¸¶·þÎñ²»ÄÜÒòÎªÖØ¸´ÊÕµ½Ê¼þ¶ø¶à´ÎÖ§¸¶¡£

BTW£ºµ±Ç°Á÷ÐеÄÏûÏ¢¶ÓÁÐÈçKafkaµÈ£¬¶¼ÒѾ­ÊµÏÖÁËʼþµÄ³Ö¾Ã»¯ºÍat least onceµÄͶµÝģʽ£¬ËùÒÔ¿É¿¿Ê¼þͶµÝµÄµÚ¶þÌõÌØÐÔÒѾ­Âú×㣬ÕâÀï¾Í²»Õ¹¿ª¡£½ÓÏÂÀ´Õ½ڽ²Öص㽲ÊöÈçºÎʵÏÖ¿É¿¿Ê¼þͶµÝµÄµÚÒ»ÌõÌØÐԺͱÜÃâʼþÖØ¸´Ïû·Ñ£¬¼´·þÎñµÄÒµÎñ²Ù×÷ºÍ·¢²¼Ê¼þµÄÔ­×ÓÐԺͱÜÃâÏû·ÑÕßÖØ¸´Ïû·ÑʼþÒªÇó·þÎñʵÏÖÃݵÈÐÔ¡£

1.2.3.1 ÈçºÎʵÏÖʼþͶµÝ²Ù×÷Ô­×ÓÐÔ?

ʼþÇý¶¯¼Ü¹¹»áÅöµ½Êý¾Ý¿â¸üкͷ¢²¼Ê¼þÔ­×ÓÐÔÎÊÌâ¡£ÀýÈ磬¶©µ¥·þÎñ±ØÐëÏòORDER±í²åÈëÒ»ÐУ¬È»ºó·¢²¼Order Created event£¬ÕâÁ½¸ö²Ù×÷ÐèÒªÔ­×ÓÐÔ¡£±ÈÈç¸üÐÂÊý¾Ý¿âºó£¬·þÎṉ̃ÁË(crashes)Ôì³ÉʼþδÄÜ·¢²¼£¬ÏµÍ³±ä³É²»Ò»ÖÂ״̬¡£ÄÇôÈçºÎʵÏÖ·þÎñµÄÒµÎñ²Ù×÷ºÍ·¢²¼Ê¼þµÄÔ­×ÓÐÔÄØ?

1.2.3.1.1 ʹÓñ¾µØÊÂÎñ·¢²¼Ê¼þ

»ñµÃÔ­×ÓÐÔµÄÒ»¸ö·½·¨Êǽ«·þÎñµÄÒµÎñ²Ù×÷ºÍ·¢²¼Ê¼þ·ÅÔÚÒ»¸ö±¾µØÊý¾Ý¿âÊÂÎñÀҲ¾ÍÊÇ˵£¬ÐèÒªÔÚ±¾µØ½¨Á¢Ò»¸öEVENT±í£¬´Ë±íÔÚ´æ´¢ÒµÎñʵÌåÊý¾Ý¿âÖÐÆðµ½ÏûÏ¢ÁÐ±í¹¦ÄÜ¡£µ±Ó¦Ó÷¢ÆðÒ»¸ö(±¾µØ)Êý¾Ý¿â½»Ò×£¬¸üÐÂÒµÎñʵÌå״̬ʱ£¬»áÏòEVENT±íÖвåÈëÒ»¸öʼþ£¬È»ºóÌá½»´Ë´Î½»Òס£ÁíÍâÒ»¸ö¶ÀÁ¢Ó¦Óýø³Ì»òÕßÏ̲߳éѯ´ËEVENT±í£¬ÏòÏûÏ¢´úÀí·¢²¼Ê¼þ£¬È»ºóʹÓñ¾µØ½»Ò×±êÖ¾´ËʼþΪÒÑ·¢²¼£¬ÈçÏÂͼËùʾ£º

¶©µ¥·þÎñÏòORDER±í²åÈëÒ»ÐУ¬È»ºóÏòEVENT±íÖвåÈëOrder Created event£¬Ê¼þ·¢²¼Ï̻߳òÕß½ø³Ì²éѯEVENT±í£¬ÇëÇóδ·¢²¼Ê¼þ£¬·¢²¼ËûÃÇ£¬È»ºó¸üÐÂEVENT±í±êÖ¾´ËʼþΪÒÑ·¢²¼¡£

´Ë·½·¨Ò²ÊÇÓÅȱµã¶¼ÓС£ÓŵãÊÇ¿ÉÒÔÈ·±£Ê¼þ·¢²¼²»ÒÀÀµÓÚ2PC£¬Ó¦Ó÷¢²¼ÒµÎñ²ã¼¶Ê¼þ¶ø²»ÐèÒªÍÆ¶ÏËûÃÇ·¢ÉúÁËʲô;¶øÈ±µãÔÚÓÚ´Ë·½·¨ÓÉÓÚ¿ª·¢ÈËÔ±±ØÐëÀμǷ¢²¼Ê¼þ£¬Òò´ËÓпÉÄܳöÏÖ´íÎó¡£

1.2.3.1.2 ʹÓÃʼþÔ´

Event sourcing (ʼþÔ´)ͨ¹ýʹÓÃÒÔʼþÖÐÐĵÄÊý¾Ý´æ´¢·½Ê½À´±£Ö¤ÒµÎñʵÌåµÄÒ»ÖÂÐÔ¡£Ê¼þÔ´±£´æÁËÿ¸öÒµÎñʵÌåËùÓÐ״̬±ä»¯µÄʼþ£¬¶ø²»ÊǴ洢ʵÌ嵱ǰµÄ״̬¡£Ó¦ÓÿÉÒÔͨ¹ýÖØ·ÅʼþÀ´Öؽ¨ÊµÌåÏÖÔÚµÄ״̬¡£Ö»ÒªÒµÎñʵÌå·¢Éú±ä»¯£¬ÐÂʼþ¾Í»áÌí¼Óµ½Ê¼þ±íÖС£ÒòΪ±£´æÊ¼þÊǵ¥Ò»²Ù×÷£¬Òò´Ë¿Ï¶¨ÊÇÔ­×ÓÐԵġ£

ΪÁËÀí½âʼþÔ´¹¤×÷·½Ê½£¬¿¼ÂÇÒÔʼþʵÌå×÷Ϊһ¸öÀý×Ó˵Ã÷¡£´«Í³·½Ê½ÖУ¬Ã¿¸ö¶©µ¥Ó³ÉäΪORDER±íÖÐÒ»ÐС£µ«ÊǶÔÓÚʼþÔ´·½Ê½£¬¶©µ¥·þÎñÒÔʼþ״̬¸Ä±ä·½Ê½´æ´¢Ò»¸ö¶©µ¥£º´´½¨µÄ£¬ÒÑÅú×¼µÄ£¬ÒÑ·¢»õµÄ£¬È¡ÏûµÄ;ÿ¸öʼþ°üÀ¨×ã¹»ÐÅÏ¢À´Öؽ¨¶©µ¥µÄ״̬¡£

ʼþÔ´·½·¨ÓкܶàÓŵ㣺½â¾öÁËʼþÇý¶¯¼Ü¹¹¹Ø¼üÎÊÌ⣬ʹµÃÒµÎñʵÌå¸üкÍʼþ·¢²¼Ô­×Ó»¯£¬µ«ÊÇÒ²´æÔÚȱµã£¬ÒòΪÊdz־û¯Ê¼þ¶ø²»ÊǶÔÏ󣬵¼ÖÂÊý¾Ý²éѯʱ£¬±ØÐëʹÓà Command Query Responsibility Segregation (CQRS) À´Íê³É²éѯҵÎñ£¬´Ó¿ª·¢½Ç¶È¿´£¬´æÔÚÒ»¶¨ÌôÕ½¡£

1.2.3.2 ÈçºÎ±ÜÃâʼþÖØ¸´Ïû·Ñ?

Òª±ÜÃâʼþÖØ¸´Ïû·Ñ£¬ÐèÒªÏû·ÑʼþµÄ·þÎñʵÏÖ·þÎñÃݵȣ¬ÒòΪ´æÔÚÖØÊԺʹíÎó²¹³¥»úÖÆ£¬²»¿É±ÜÃâµÄÔÚϵͳÖдæÔÚÖØ¸´ÊÕµ½ÏûÏ¢µÄ³¡¾°£¬·þÎñÃݵÈÄÜÌá¸ßÊý¾ÝµÄÒ»ÖÂÐÔ¡£ÔÚ±à³ÌÖÐ,Ò»¸öÃݵȲÙ×÷µÄÌØµãÊÇÆäÈÎÒâ¶à´ÎÖ´ÐÐËù²úÉúµÄÓ°Ïì¾ùÓëÒ»´ÎÖ´ÐеÄÓ°ÏìÏàͬ£¬Òò´ËÐèÒª¿ª·¢ÈËÔ±ÔÚ¹¦ÄÜÉè¼ÆÊµÏÖʱ£¬ÐèÒªÌØ±ð×¢Òâ·þÎñµÄÃݵÈÐÔ¡£

1.2.4 ʼþÇý¶¯¼Ü¹¹Ö®·Ö²¼Ê½Êý¾Ý²éѯ

΢·þÎñ¼Ü¹¹Ï£¬ÓÉÓÚ·Ö²¼Ê½Êý¾Ý¿âµÄ´æÔÚ£¬µ¼ÖÂÔÚÖ´ÐÐÓû§ÒµÎñÊý¾Ý²éѯʱ£¬Í¨³£ÐèÒª¿ç¶à¸ö΢·þÎñÊý¾Ý¿â½øÐÐÊý¾Ý²éѯ£¬Ò²¾ÍÊÇ·Ö²¼Ê½Êý¾Ý²éѯ¡£ÄÇôÎÊÌâÀ´ÁË£¬ÓÉÓÚÿ¸ö΢·þÎñµÄÊý¾Ý¶¼ÊÇ˽Óл¯µÄ£¬Ö»ÄÜͨ¹ý¸÷×ÔµÄREST½Ó¿Ú»ñÈ¡£¬Èç¹û¸ºÔðÒµÎñ²éѯµÄ¹¦ÄÜÄ£¿é£¬Í¨¹ýµ÷Óø÷¸ö΢·þÎñµÄREST½Ó¿ÚÀ´·Ö±ð»ñÈ¡»ù´¡Êý¾Ý£¬È»ºóÔÚÄÚ´æÖÐÔÙ½øÐÐÒµÎñÊý¾ÝÆ´×°ºó£¬ÔÙ·µ»Ø¸øÓû§¡£¸Ã·½·¨ÎÞÂÛ´Ó³ÌÐòÉè¼Æ»òÊDzéѯÐÔÄܽǶȿ´£¬¶¼²»ÊÇÒ»¸öºÜºÃµÄ·½·¨¡£ÄÇôÈçºÎ½â¾ö΢·þÎñ¼Ü¹¹Ïµķֲ¼Ê½Êý¾Ý²éѯÎÊÌâÄØ? ÔÚ¸ø³ö½â¾ö·½°¸Ö®Ç°£¬ÐèÒª¶ÁÕßÊ×ÏÈÁ˽âÏÂÎﻯÊÓͼºÍÃüÁî²éѯְÔð·ÖÀëµÈÏà¹Ø¸ÅÄî¡£

1.2.4.1 ʲôÊÇÎﻯÊÓͼ(merialized views)?

ÎﻯÊÓͼÊǰüÀ¨Ò»¸ö²éѯ½á¹ûµÄÊý¾Ý¿â¶ÔÏñ£¬ËüÊÇÔ¶³ÌÊý¾ÝµÄµÄ±¾µØ¸±±¾£¬»òÕßÓÃÀ´Éú³É»ùÓÚÊý¾Ý±íÇóºÍµÄ»ã×Ü±í¡£ÎﻯÊÓͼ´æ´¢»ùÓÚÔ¶³Ì±íµÄÊý¾Ý£¬Ò²¿ÉÒÔ³ÆÎª¿ìÕÕ¡£Õâ¸ö»ù±¾ÉϾÍ˵³öÁËÎﻯÊÓͼµÄ±¾ÖÊ£¬ËüÊÇÒ»×é²éѯµÄ½á¹û£¬ÕâÑùÊÆ±ØÎª½«À´ÔÙ´ÎÐèÒªÕâ×éÊý¾Ýʱ´ó´óÌá¸ß²éѯÐÔÄÜ¡£ÎﻯÊÓͼÓÐÁ½ÖÖË¢ÐÂģʽON DEMANDºÍON COMMIT£¬Óû§¿É¸ù¾Ýʵ¼ÊÇé¿ö½øÐÐÉèÖá£

ÎﻯÊÓͼ¶ÔÓÚÓ¦ÓòãÊÇ͸Ã÷µÄ£¬²»ÐèÒªÓÐÈκεĸ͝£¬ÖÕ¶ËÓû§ÉõÖÁ¶¼¸Ð¾õ²»µ½µ×²ãÊÇÓõÄÎﻯÊÓͼ¡£×ÜÖ®£¬Ê¹ÓÃÎﻯÊÓͼµÄÄ¿µÄÒ»¸öÊÇÌá¸ß²éѯÐÔÄÜ£¬ÁíÒ»¸öÊÇÓÉÓÚÎﻯÊÓͼ°üº¬µÄÊý¾ÝÊÇÔ¶³ÌÊý¾Ý¿âµÄÊý¾Ý¿ìÕÕ»ò¿½±´£¬Î¢·þÎñ¿Éͨ¹ýÎﻯÊÓͼºÍÃüÁî²éѯְÔð·ÖÀë(CQRS)¼¼Êõ(²Î¼ûÒÔÏÂÕ½Ú)ʵÏÖ·Ö²¼Ê½Êý¾Ý²éѯ¡£

1.2.4.2 ʲôÊÇÃüÁî²éѯְÔð·ÖÀë(CQRS)?

ÔÚ³£Óõĵ¥ÌåÓ¦Óüܹ¹ÖУ¬Í¨³£¶¼ÊÇͨ¹ýÊý¾Ý·ÃÎʲãÀ´Ð޸ĻòÕß²éѯÊý¾Ý£¬Ò»°ãÐ޸ĺͲéѯʹÓõÄÊÇÏàͬµÄʵÌå¡£ÔÚһЩҵÎñÂß¼­¼òµ¥µÄϵͳÖпÉÄÜûÓÐʲôÎÊÌ⣬µ«ÊÇËæ×ÅϵͳÂß¼­±äµÃ¸´ÔÓ£¬Óû§Ôö¶à£¬ÕâÖÖÉè¼Æ¾Í»á³öÏÖһЩÐÔÄÜÎÊÌâ;ÁíÍâ¸üÖØÒªµÄÊÇ£¬ÔÚ΢·þÎñ¼Ü¹¹Ï£¬Í¨³£ÐèÒª¿ç¶à¸ö΢·þÎñÊý¾Ý¿âÀ´²éѯÊý¾Ý£¬´Ëʱ£¬ÎÒÃǿɽèÖúÃüÁî²éѯְÔð·ÖÀë(CQRS)À´ÓÐЧ½â¾öÕâЩÎÊÌâ¡£

CQRSʹÓ÷ÖÀëµÄ½Ó¿Ú½«Êý¾Ý²éѯ²Ù×÷(Queries)ºÍÊý¾ÝÐ޸IJÙ×÷(Commands)·ÖÀ뿪À´£¬ÕâÒ²Òâζ×ÅÔÚ²éѯºÍ¸üйý³ÌÖÐʹÓõÄÊý¾ÝÄ£ÐÍÒ²ÊDz»Ò»ÑùµÄ¡£ÕâÑù¶ÁºÍдÂß¼­¾Í¸ôÀ뿪À´ÁË¡£Ê¹ÓÃCQRS·ÖÀëÁ˶ÁдְÔðÖ®ºó£¬¿ÉÒÔ¶ÔÊý¾Ý½øÐжÁд·ÖÀë²Ù×÷À´¸Ä½øÐÔÄÜ£¬Í¬Ê±Ìá¸ß¿ÉÀ©Õ¹ÐԺͰ²È«¡£ÈçÏÂͼ£º

Ö÷Êý¾Ý¿â´¦ÀíCUD£¬´Ó¿â´¦ÀíR£¬´Ó¿âµÄµÄ½á¹¹¿ÉÒÔºÍÖ÷¿âµÄ½á¹¹ÍêȫһÑù£¬Ò²¿ÉÒÔ²»Ò»Ñù£¬´Ó¿âÖ÷ÒªÓÃÀ´½øÐÐÖ»¶ÁµÄ²éѯ²Ù×÷¡£ÔÚÊýÁ¿ÉÏ´Ó¿âµÄ¸öÊýÒ²¿ÉÒÔ¸ù¾Ý²éѯµÄ¹æÄ£½øÐÐÀ©Õ¹£¬ÔÚÒµÎñÂß¼­ÉÏ£¬Ò²¿ÉÒÔ¸ù¾ÝרÌâ´ÓÖ÷¿âÖл®·Ö³ö²»Í¬µÄ´Ó¿â¡£´Ó¿âÒ²¿ÉÒÔʵÏÖ³ÉReportingDatabase£¬¸ù¾Ý²éѯµÄÒµÎñÐèÇ󣬴ÓÖ÷¿âÖгéȡһЩ±ØÒªµÄÊý¾ÝÉú³ÉһϵÁвéѯ±¨±íÀ´´æ´¢¡£

ʹÓÃReportingDatabaseµÄһЩÓŵãͨ³£¿ÉÒÔʹµÃ²éѯ±äµÃ¸ü¼Ó¼òµ¥¸ßЧ£º

¡¤ ReportingDatabaseµÄ½á¹¹ºÍÊý¾Ý±í»áÕë¶Ô³£ÓõIJéѯÇëÇó½øÐÐÉè¼Æ¡£

¡¤ ReportingDatabaseÊý¾Ý¿âͨ³£»áÈ¥Õý¹æ»¯£¬´æ´¢Ò»Ð©ÈßÓà¶ø¼õÉÙ±ØÒªµÄJoinµÈÁªºÏ²éѯ²Ù×÷£¬Ê¹µÃ²éѯ¼ò»¯ºÍ¸ßЧ£¬Ò»Ð©ÔÚÖ÷Êý¾Ý¿âÖÐÓò»µ½µÄÊý¾ÝÐÅÏ¢£¬ÔÚReportingDatabase¿ÉÒÔ²»Óô洢¡£

¡¤ ¿ÉÒÔ¶ÔReportingDatabaseÖØ¹¹ÓÅ»¯£¬¶ø²»ÓÃÈ¥¸Ä±ä²Ù×÷Êý¾Ý¿â¡£

¡¤ ¶ÔReportingDatabaseÊý¾Ý¿âµÄ²éѯ²»»á¸ø²Ù×÷Êý¾Ý¿â´øÀ´ÈκÎѹÁ¦¡£

¡¤ ¿ÉÒÔÕë¶Ô²»Í¬µÄ²éѯÇëÇó½¨Á¢²»Í¬µÄReportingDatabase¿â¡£

1.2.4.3 ÈçºÎʵÏÖʼþÇý¶¯¼Ü¹¹ÏµÄÊý¾Ý²éѯ·þÎñ?

ʼþÇý¶¯²»½ö¿ÉÒÔÓÃÓÚ·Ö²¼Ê½Êý¾ÝÒ»ÖÂÐÔ±£Ö¤£¬»¹¿ÉÒÔ½èÖúÎﻯÊÓͼºÍÃüÁî²éѯְÔð·ÖÀë¼¼Êõ£¬Ê¹ÓÃʼþÀ´Î¬»¤²»Í¬Î¢·þÎñÓµÓÐÊý¾ÝÔ¤Á¬½Ó(pre-join)µÄÎﻯÊÓͼ£¬´Ó¶øÊµÏÖ΢·þÎñ¼Ü¹¹Ïµķֲ¼Ê½Êý¾Ý²éѯ¡£Î¬»¤ÎﻯÊÓͼµÄ·þÎñ¶©ÔÄÁËÏà¹ØÊ¼þ²¢ÔÚʼþ·¢Éúʱ¸üÐÂÎﻯÊÓͼ¡£ÀýÈ磬¿Í»§¶©µ¥ÊÓͼ¸üзþÎñ(ά»¤¿Í»§¶©µ¥ÊÓͼ)»á¶©ÔÄÓɿͻ§·þÎñºÍ¶©µ¥·þÎñ·¢²¼µÄʼþ(Äú»¹¿ÉÒÔʹÓÃʼþÀ´Î¬»¤Óɶà¸ö΢·þÎñÓµÓеÄÊý¾Ý×é³ÉµÄÎﻯÊÓͼ¡£

ÀýÈçÉÏͼÖмäµÄ ¡°¿Í»§¶©µ¥ÊÓͼ¸üС±·þÎñ£¬Ö÷Òª¸ºÔð¿Í»§¶©µ¥ÊÓͼµÄ¸üС£¸Ã·þÎñ¶©ÔÄÁ˿ͻ§·þÎñºÍ¶©µ¥·þÎñ·¢²¼µÄʼþ¡£µ±¡°¿Í»§¶©µ¥ÊÓͼ¸üС±·þÎñÊÕµ½ÁËÉÏͼ×ó²àµÄ¿Í»§»òÕß¶©µ¥¸üÐÂʼþ£¬Ôò»á´¥·¢¸üпͻ§¶©µ¥ÎﻯÊÓͼÊý¾Ý¼¯¡£ÕâÀï¿ÉÒÔʹÓÃÎĵµÊý¾Ý¿â(ÀýÈçMongoDB)À´ÊµÏÖ¿Í»§¶©µ¥ÊÓͼ£¬ÎªÃ¿¸öÓû§´æ´¢Ò»¸öÎĵµ¡£¶øÉÏͼÓÒ²àµÄ¿Í»§¶©µ¥ÊÓͼ²éѯ·þÎñ¸ºÔðÏìÓ¦¶Ô¿Í»§ÒÔ¼°×î½ü¶©µ¥(ͨ¹ý²éѯ¿Í»§¶©µ¥ÊÓͼÊý¾Ý¼¯)µÄ²éѯ¡£

×ÜÖ®£¬ÉÏͼËùʾҵÎñÂß¼­£¬Óõ½ÁËʼþÇý¶¯¡¢ÎﻯÊÓͼºÍÃüÁî²éѯְÔð·ÖÀëµÈ¼¼Êõ£¬ÓÐЧ½â¾öÁË΢·þÎñ¼Ü¹¹Ï·ֲ¼Ê½Êý¾Ý²éѯµÄÎÊÌâ¡£

1.2.5 ʼþÇý¶¯¼Ü¹¹ÓÅȱµã

ʼþÇý¶¯¼Ü¹¹¼ÈÓÐÓŵãÒ²ÓÐȱµã£¬´Ë¼Ü¹¹¿ÉÒÔʵÏÖ¿ç¶à¸ö·þÎñµÄÊÂÎñʵÏÖ£¬ÇÒÌṩ×îÖÕÊý¾ÝÒ»ÖÂÐÔ£¬²¢ÇÒʹµÃ·þÎñÄܹ»×Ô¶¯Î¬»¤²éѯÊÓͼ;¶øÈ±µãÔÚÓÚ±à³Ìģʽ±È´«Í³»ùÓÚÊÂÎñµÄ½»Ò×ģʽ¸ü¼Ó¸´ÔÓ£¬±ØÐëʵÏÖ²¹³¥ÊÂÎñÒÔ±ã´ÓÓ¦ÓóÌÐò¼¶¹ÊÕÏÖлָ´£¬ÀýÈ磬Èç¹ûÐÅÓüì²é²»³É¹¦Ôò±ØÐëÈ¡Ïû¶©µ¥;ÁíÍ⣬ӦÓñØÐëÓ¦¶Ô²»Ò»ÖµÄÊý¾Ý£¬±ÈÈçµ±Ó¦ÓöÁȡδ¸üеÄ×îÖÕÊÓͼʱҲ»áÓö¼ûÊý¾Ý²»Ò»ÖÂÎÊÌâ¡£ÁíÍâÒ»¸öȱµãÔÚÓÚ¶©ÔÄÕß±ØÐë¼ì²âºÍºöÂÔÈßÓàʼþ£¬±ÜÃâʼþÖØ¸´Ïû·Ñ¡£

1.3 ×ܽá

ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬Ã¿¸ö΢·þÎñ¶¼ÓÐ×Ô¼ºË½ÓеÄÊý¾Ý¼¯¡£²»Í¬Î¢·þÎñ¿ÉÄÜʹÓò»Í¬µÄSQL»òÕßNoSQLÊý¾Ý¿â¡£¾¡¹ÜÊý¾Ý¿â¼Ü¹¹ÓкÜÇ¿µÄÓÅÊÆ£¬µ«ÊÇÒ²Ãæ¶ÔÊý¾Ý·Ö²¼Ê½¹ÜÀíµÄÌôÕ½¡£µÚÒ»¸öÌôÕ½¾ÍÊÇÈçºÎÔÚ¶à·þÎñÖ®¼äά»¤ÒµÎñÊý¾ÝÒ»ÖÂÐÔ;µÚ¶þ¸öÌôÕ½ÊÇÈçºÎ´Ó¶à·þÎñ»·¾³ÖлñȡһÖÂÐÔÊý¾Ý¡£

×î¼Ñ½â¾ö°ì·¨ÊDzÉÓÃʼþÇý¶¯¼Ü¹¹¡£ÆäÖÐÅöµ½µÄÒ»¸öÌôÕ½ÊÇÈçºÎÔ­×ÓÐԵĸüÐÂ״̬ºÍ·¢²¼Ê¼þ¡£Óм¸ÖÖ·½·¨¿ÉÒÔ½â¾ö´ËÎÊÌ⣬°üÀ¨½«Êý¾Ý¿âÊÓΪÏûÏ¢¶ÓÁкÍʼþÔ´µÈ¡£

´ÓĿǰ¼¼ÊõÓ¦Ó÷¶Î§ºÍ³ÉÊì¶È¿´£¬ÍƼöʹÓõÚÒ»ÖÖ·½Ê½(±¾µØÊÂÎñ·¢²¼Ê¼þ)£¬À´ÊµÏÖʼþͶµÝÔ­×Ó»¯£¬¼´¿É¿¿Ê¼þͶµÝ¡£

ÐèÒªÌáÐÑ£º!!!Êý¾ÝÒ»ÖÂÐÔÊÇ΢·þÎñ¼Ü¹¹Éè¼ÆÖÐΨ¿Ö±ÜÖ®²»¼°È´ÓÖ²»µÃ²»¿¼ÂǵϰÌ⡣ͨ¹ý±£Ö¤Ê¼þÇý¶¯ÊµÏÖ×îÖÕÊý¾ÝµÄÒ»ÖÂÐÔ£¬´Ë·½°¸µÄÓÅÁÓ£¬Ò²²»Äܼòµ¥µÄÒ»ÑÔ¶ø¸ÅÖ®£¬¶øÊÇÓ¦¸Ã¸ù¾Ý³¡¾°¶¨¶á£¬ÊʺϵIJÅÊÇ×îºÃµÄ¡£ÁíÍ⣬ÎÒÃÇÔÚ¶Ô΢·þÎñ½øÐÐÒµÎñ»®·ÖµÄʱºò¾Í¾¡¿ÉÄܵıÜÃâ¡°¿ÉÄÜ»á²úÉúÒ»ÖÂÐÔÎÊÌ⡱µÄÉè¼Æ¡£Èç¹ûÕâÖÖÉè¼Æ¹ý¶à£¬Ò²ÐíÊÇʱºò¿¼ÂǸĸÄÉè¼ÆÁË¡£

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

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù