ǰ²»¾Ã£¬¿´µ½²©¿Í԰һλ԰ÓÑдÁËһƪÎÄÕ£¬ÆäÖеĹ۵ãÊÇ£¬ÒªÏë¸ßÐÔÄÜ£¬ÐèÒª¾¡Á¿£º±Ü¿ªÍøÂ翪Ïú£¨IO£©£¬±Ü¿ªº£Á¿Êý¾Ý£¬±Ü¿ª×ÊÔ´Õù¶á¡£¶ÔÓÚÕâ3µã£¬ÎÒ¾õµÃºÜÓеÀÀí¡£ËùÒÔÒ²Ïë̸һÏ£¬CQRS¼Ü¹¹ÏÂÊÇÈçºÎʵÏÖ¸ßÐÔÄܵġ£
¹ØÓÚCQRS£¨Command Query Responsibility
Segration£©¼Ü¹¹£¬´ó¼ÒÓ¦¸Ã²»»áİÉúÁË¡£¼òµ¥µÄ˵£¬¾ÍÊÇÒ»¸öϵͳ£¬´Ó¼Ü¹¹ÉϰÑËü²ð·ÖΪÁ½²¿·Ö£ºÃüÁî´¦Àí£¨Ð´ÇëÇó£©+²éѯ´¦Àí£¨¶ÁÇëÇ󣩡£È»ºó¶ÁдÁ½±ß¿ÉÒÔÓò»Í¬µÄ¼Ü¹¹ÊµÏÖ£¬ÒÔʵÏÖCQÁ½¶Ë£¨¼´Command
Side£¬¼ò³ÆC¶Ë£»Query Side£¬¼ò³ÆQ¶Ë£©µÄ·Ö±ðÓÅ»¯¡£CQRS×÷Ϊһ¸ö¶Áд·ÖÀë˼ÏëµÄ¼Ü¹¹£¬ÔÚÊý¾Ý´æ´¢·½Ã棬ûÓÐ×ö¹ý¶àµÄÔ¼Êø¡£ËùÒÔ£¬ÎÒ¾õµÃCQRS¿ÉÒÔÓв»Í¬²ã´ÎµÄʵÏÖ£¬±ÈÈ磺
1.CQÁ½¶ËÊý¾Ý¿â¹²Ïí£¬CQÁ½¶ËÖ»ÊÇÔÚÉϲã´úÂëÉÏ·ÖÀ룻ÕâÖÖ×ö·¨£¬´øÀ´µÄºÃ´¦ÊÇ¿ÉÒÔÈÃÎÒÃǵĴúÂë¶Áд·ÖÀ룬¸üºÃά»¤£¬ÇÒûÓÐCQÁ½¶ËµÄÊý¾ÝÒ»ÖÂÐÔÎÊÌ⣬ÒòΪÊǹ²ÏíÒ»¸öÊý¾Ý¿âµÄ¡£ÎÒ¸öÈËÈÏΪ£¬ÕâÖּܹ¹ºÜʵÓ㬼ȼæ¹ËÁËÊý¾ÝµÄǿһÖÂÐÔ£¬ÓÖÄÜÈôúÂëºÃά»¤¡£
2.CQÁ½¶ËÊý¾Ý¿âºÍÉϲã´úÂë¶¼·ÖÀ룬ȻºóQµÄÊý¾ÝÓÉC¶Ëͬ²½¹ýÀ´£¬Ò»°ãÊÇͨ¹ýDomain
Event½øÐÐͬ²½¡£Í¬²½·½Ê½ÓÐÁ½ÖÖ£¬Í¬²½»òÒì²½£¬Èç¹ûÐèÒªCQÁ½¶ËµÄǿһÖÂÐÔ£¬ÔòÐèÒªÓÃͬ²½£»Èç¹ûÄܽÓÊÜCQÁ½¶ËÊý¾ÝµÄ×îÖÕÒ»ÖÂÐÔ£¬Ôò¿ÉÒÔʹÓÃÒì²½¡£²ÉÓÃÕâÖÖ·½Ê½µÄ¼Ü¹¹£¬¸öÈ˾õµÃ£¬C¶ËÓ¦¸Ã²ÉÓÃEvent
Sourcing£¨¼ò³ÆES£©Ä£Ê½²ÅÓÐÒâÒ壬·ñÔò¾ÍÊÇ×Ô¼º¸ø×Ô¼ºÕÒÂé·³¡£ÒòΪÕâÑù×öÄã»á·¢ÏÖ»á³öÏÖÈßÓàÊý¾Ý£¬Í¬ÑùµÄÊý¾Ý£¬ÔÚC¶ËµÄdbÖÐÓУ¬¶øÔÚQ¶ËµÄdbÖÐÒ²ÓС£ºÍÉÏÃæµÚÒ»ÖÖ×ö·¨Ïà±È£¬ÎÒÏë²»µ½Ê²Ã´ºÃ´¦¡£¶ø²ÉÓÃES£¬ÔòËùÓÐC¶ËµÄ×îÐÂÊý¾ÝÈ«²¿ÓÃDomain
Event±í´ï¼´¿É£»¶øÒª²éѯÏÔʾÓõÄÊý¾Ý£¬Ôò´ÓQ¶ËµÄReadDB£¨¹ØÏµÐÍÊý¾Ý¿â£©²éѯ¼´¿É¡£
ÎÒ¾õµÃҪʵÏÖ¸ßÐÔÄÜ£¬¿ÉÒÔ̸µÄ¶«Î÷»¹ÓкܶࡣÏÂÃæÎÒÏëÖØµã˵˵ÎÒÏëµ½µÄһЩÉè¼ÆË¼Â·£º
±Ü¿ª×ÊÔ´Õù¶á
Ãëɱ»î¶¯µÄÀý×Ó·ÖÎö
ÎÒ¾õµÃÕâÊǺÜÖØÒªµÄÒ»µã¡£Ê²Ã´ÊÇ×ÊÔ´Õù¶á£¿ÎÒÏë¾ÍÊǶà¸öÏß³ÌͬʱÐÞ¸Äͬһ¸öÊý¾Ý¡£¾ÍÏñ°¢ÀïÃëɱ»î¶¯Ò»Ñù£¬Ãëɱ¿ªÇÀʱ£¬ºÜ¶àÈËͬʱÇÀÒ»¸öÉÌÆ·£¬µ¼ÖÂÉÌÆ·µÄ¿â´æ»á±»²¢·¢¸üмõ¿â´æ£¬Õâ¾ÍÊÇÒ»¸ö×ÊÔ´Õù¶áµÄÀý×Ó¡£Ò»°ãÈç¹û×ÊÔ´¾ºÕù²»¼¤ÁÒ£¬ÄÇÎÞËùν£¬²»»áÓ°ÏìÐÔÄÜ£»µ«ÊÇÈç¹ûÏñÃëɱÕâÖÖ³¡¾°£¬ÄÇdb¾Í»á¿¹²»×¡ÁË¡£ÔÚÃëɱÕâÖÖ³¡¾°Ï£¬´óÁ¿Ïß³ÌÐèҪͬʱ¸üÐÂͬһÌõ¼Ç¼£¬½ø¶øµ¼ÖÂMySQLÄÚ²¿´óÁ¿Ï̶߳ѻý£¬¶Ô·þÎñÐÔÄÜ¡¢Îȶ¨ÐÔÔì³ÉºÜ´óÉ˺¦¡£ÄÇÔõô°ìÄØ£¿ÎҼǵð¢ÀïµÄ¶¡ÆæÐ´¹ýÒ»¸ö·ÖÏí£¬Ë¼Â·¾ÍÊǵ±MySQLµÄ·þÎñ¶Ë¶à¸öÏß³ÌͬʱÐÞ¸ÄÒ»Ìõ¼Ç¼ʱ£¬¿ÉÒÔ¶ÔÕâЩÐÞ¸ÄÇëÇó½øÐÐÅŶӣ¬È»ºó¶ÔÓÚInnoDBÒýÇæ²ã£¬¾ÍÊÇ´®Ðеġ£ÕâÑùÅŶӺ󣬲»¹ÜÉϲãÓ¦Ó÷¢¹ýÀ´¶àÉÙ²¢ÐеÄÐÞ¸ÄͬһÐеÄÇëÇ󣬶ÔÓÚMySQL
Server¶ËÀ´Ëµ£¬ÄÚ²¿×ÜÊÇ»á´ÏÃ÷µÄ¶ÔͬһÐеÄÐÞ¸ÄÇëÇó¶¼ÅŶӴ¦Àí£»ÕâÑù¾ÍÄÜÈ·±£²»»áÓв¢·¢²úÉú£¬´Ó¶ø²»»áµ¼ÖÂÏß³ÌÀ˷Ѷѻý£¬µ¼ÖÂÊý¾Ý¿âÐÔÄÜϽµ¡£Õâ¸ö·½°¸¿ÉÒÔ¼ûÏÂͼËùʾ£º

ÈçÉÏͼËùʾ£¬µ±ºÜ¶àÇëÇó¶¼ÒªÐÞ¸ÄA¼Ç¼ʱ£¬MySQL ServerÄÚ²¿»á¶ÔÕâЩÇëÇó½øÐÐÅŶӣ¬È»ºóÒ»¸ö¸ö½«¶ÔAµÄÐÞ¸ÄÇëÇóÌá½»µ½InnoDBÒýÇæ²ã¡£ÕâÑù¿´ËÆÔÚÅŶӣ¬Êµ¼ÊÉÏ»áÈ·±£MySQL
Server²»»áËÀµô£¬¿ÉÒÔ±£Ö¤¶ÔÍâÌṩÎȶ¨µÄTPS¡£
µ«ÊÇ£¬¶ÔÓÚÉÌÆ·ÃëɱÕâ¸ö³¡¾°£¬»¹ÓÐÓÅ»¯µÄ¿Õ¼ä£¬¾ÍÊÇGroup Commit¼¼Êõ¡£Group Commit¾ÍÊǶԶà¸öÇëÇóºÏ²¢ÎªÒ»´Î²Ù×÷½øÐд¦Àí¡£Ãëɱʱ£¬´ó¼Ò¶¼ÔÚ¹ºÂòÕâ¸öÉÌÆ·£¬AÂò2¼þ£¬BÂò3¼þ£¬CÂò1¼þ£»ÆäʵÎÒÃÇ¿ÉÒÔ°ÑA,B,CµÄÕâÈý¸öÇëÇóºÏ²¢ÎªÒ»´Î¼õ¿â´æ²Ù×÷£¬¾ÍÊÇÒ»´ÎÐÔ¼õ6¼þ¡£ÕâÑù£¬¶ÔÓÚA,B,CµÄÕâÈý¸öÇëÇó£¬ÔÚInnoDB²ãÎÒÃÇÖ»ÐèÒª×öÒ»´Î¼õ¿â´æ²Ù×÷¼´¿É¡£¼ÙÉèÎÒÃÇGroup
CommitµÄÿһÅúµÄsizeÊÇ50£¬ÄǾÍÊÇ¿ÉÒÔ½«50¸ö¼õ²Ù×÷ºÏ²¢ÎªÒ»´Î¼õ²Ù×÷£¬È»ºóÌá½»µ½InnoDB¡£ÕâÑù£¬½«´ó´óÌá¸ßÃëɱ³¡¾°Ï£¬ÉÌÆ·¼õ¿â´æµÄTPS¡£µ«ÊÇÕâ¸öGroup
CommitµÄÿÅú´óС²»ÊÇÔ½´óÔ½ºÃ£¬¶øÊÇÒª¸ù¾Ý²¢·¢Á¿ÒÔ¼°·þÎñÆ÷µÄʵ¼ÊÇé¿ö×ö²âÊÔÀ´µÃµ½Ò»¸ö×îÓŵÄÖµ¡£Í¨¹ýGroup
Commit¼¼Êõ£¬¸ù¾Ý¶¡ÆæµÄPPT£¬ÉÌÆ·¼õ¿â´æµÄTPSÐÔÄÜ´ÓÔÀ´µÄ1.5WÌá¸ßµ½ÁË8.5W¡£
´ÓÉÏÃæÕâ¸öÀý×Ó£¬ÎÒÃÇ¿ÉÒÔ¿´µ½°¢ÀïÊÇÈçºÎÔÚʵ¼Ê³¡¾°ÖУ¬Í¨¹ýÓÅ»¯MySQL ServerÀ´ÊµÏָ߲¢·¢µÄÉÌÆ·¼õ¿â´æµÄ¡£µ«ÊÇ£¬Õâ¸ö¼¼ÊõÒ»°ãÈË»¹ÕæµÄ²»»á£¡ÒòΪû¶àÉÙÈËÓÐÄÜÁ¦È¥ÓÅ»¯MySQLµÄ·þÎñ¶Ë£¬ÅŶÓÒ²²»ÐУ¬¸ü±ð˵Group
CommitÁË¡£Õâ¸ö¹¦Äܲ¢²»ÊÇMySQL Server×Ô´øµÄ£¬¶øÊÇÐèÒª×Ô¼ºÊµÏֵġ£µ«ÊÇ£¬Õâ¸ö˼·ÎÒÏëÎÒÃǶ¼¿ÉÒÔ½è¼ø¡£
CQRSÈçºÎʵÏÖ±ÜÃâ×ÊÔ´¾ºÕù
ÄÇô¶ÔÓÚCQRS¼Ü¹¹£¬ÈçºÎ°´ÕÕÕâ¸ö˼·À´Éè¼ÆÄØ£¿ÎÒÏëÖØµã˵һÏÂÎÒÉÏÃæÌáµ½µÄµÚ¶þÖÖCQRS¼Ü¹¹¡£¶ÔÓÚC¶Ë£¬ÎÒÃǵÄÄ¿±êÊǾ¡¿ÉÄܵÄÔÚ1sÄÚ´¦Àí¸ü¶àµÄCommand£¬Ò²¾ÍÊÇÊý¾ÝдÇëÇó¡£ÔÚ¾µäDDDµÄËIJã¼Ü¹¹ÖУ¬ÎÒÃÇ»áÓÐÒ»¸öģʽ½Ð¹¤×÷µ¥ÔªÄ£Ê½£¬¼´Unit
of Work£¨¼ò³ÆUoW£©Ä£Ê½¡£Í¨¹ý¸Ãģʽ£¬ÎÒÃÇÄÜÔÚÓ¦Óò㣬һ´ÎÐÔÒÔÊÂÎñµÄ·½Ê½½«µ±Ç°ÇëÇóËùÉæ¼°µÄ¶à¸ö¶ÔÏóµÄÐÞ¸ÄÌá½»µ½DB¡£Î¢ÈíµÄEFʵÌå¿ò¼ÜµÄDbContext¾ÍÊÇÒ»¸öUoWģʽµÄʵÏÖ¡£ÕâÖÖ×ö·¨µÄºÃ´¦ÊÇ£¬Ò»¸öÇëÇó¶Ô¶à¸ö¾ÛºÏ¸ùµÄÐ޸ģ¬ÄÜ×öµ½Ç¿Ò»ÖÂÐÔ£¬ÒòΪÊÇÊÂÎñµÄ¡£µ«ÊÇÕâÖÖ×ö·¨£¬Êµ¼ÊÉÏ£¬Ã»ÓкܺõÄ×ñÊØ±Ü¿ª×ÊÔ´¾ºÕùµÄÔÔò¡£ÊÔÏ룬ÊÂÎñAÒªÐÞ¸Äa1,a2,a3Èý¸ö¾ÛºÏ¸ù£»ÊÂÎñBÒªÐÞ¸Äa2,a3,a4£»ÊÂÎñCÒªÐÞ¸Äa3,a4,a5Èý¸ö¾ÛºÏ¸ù¡£ÄÇÕâÑù£¬ÎÒÃǺÜÈÝÒ×Àí½â£¬ÕâÈý¸öÊÂÎñÖ»ÄÜ´®ÐÐÖ´ÐУ¬ÒòΪËüÃÇÒªÐÞ¸ÄÏàͬµÄ×ÊÔ´¡£±ÈÈçÊÂÎñAºÍÊÂÎñB¶¼ÒªÐÞ¸Äa2,a3ÕâÁ½¸ö¾ÛºÏ¸ù£¬ÄÇͬһʱ¿Ì£¬Ö»ÄÜÓÉÒ»¸öÊÂÎñÄܱ»Ö´ÐС£Í¬Àí£¬ÊÂÎñBºÍÊÂÎñCÒ²ÊÇÒ»Ñù¡£Èç¹ûA,B,CÕâÖÖÊÂÎñÖ´ÐеIJ¢·¢ºÜ¸ß£¬ÄÇÊý¾Ý¿â¾Í»á³öÏÖÑÏÖØµÄ²¢·¢³åÍ»£¬ÉõÖÁËÀËø¡£ÄÇÒªÈçºÎ±ÜÃâÕâÖÖ×ÊÔ´¾ºÕùÄØ£¿ÎÒ¾õµÃÎÒÃÇ¿ÉÒÔ²ÉÈ¡Èý¸ö´ëÊ©£º
ÈÃÒ»¸öCommand×ÜÊÇÖ»ÐÞ¸ÄÒ»¸ö¾ÛºÏ¸ù
Õâ¸ö×ö·¨Æäʵ¾ÍÊÇËõСÊÂÎñµÄ·¶Î§£¬È·±£Ò»¸öÊÂÎñÒ»´Îֻɿ¼°Ò»Ìõ¼Ç¼µÄÐ޸ġ£Ò²¾ÍÊÇ×öµ½£¬Ö»Óе¥¸ö¾ÛºÏ¸ùµÄÐ޸IJÅÊÇÊÂÎñµÄ£¬Èþۺϸù³ÉΪÊý¾ÝǿһÖÂÐÔµÄ×îСµ¥Î»¡£ÕâÑùÎÒÃǾÍÄÜ×î´ó»¯µÄʵÏÖ²¢ÐÐÐ޸ġ£µ«ÊÇÄã»áÎÊ£¬µ«ÊÇÎÒÒ»¸öÇëÇó¾ÍÊÇ»áÉæ¼°¶à¸ö¾ÛºÏ¸ùµÄÐ޸ĵģ¬ÕâÖÖÇé¿öÔõô°ìÄØ£¿ÔÚCQRS¼Ü¹¹ÖУ¬ÓÐÒ»¸ö¶«Î÷½ÐSaga¡£SagaÊÇÒ»ÖÖ»ùÓÚʼþÇý¶¯µÄ˼ÏëÀ´ÊµÏÖÒµÎñÁ÷³ÌµÄ¼¼Êõ£¬Í¨¹ýSaga£¬ÎÒÃÇ¿ÉÒÔÓÃ×îÖÕÒ»ÖÂÐԵķ½Ê½×îÖÕʵÏÖ¶Ô¶à¸ö¾ÛºÏ¸ùµÄÐ޸ġ£¶ÔÓÚÒ»´ÎÉæ¼°¶à¸ö¾ÛºÏ¸ùÐ޸ĵÄÒµÎñ³¡¾°£¬Ò»°ã×ÜÊÇ¿ÉÒÔÉè¼ÆÎªÒ»¸öÒµÎñÁ÷³Ì£¬Ò²¾ÍÊÇ¿ÉÒÔ¶¨Òå³öÒªÏÈ×öʲôºó×öʲô¡£±ÈÈçÒÔÒøÐÐתÕ˵ij¡¾°ÎªÀý×Ó£¬Èç¹ûÊǰ´ÕÕ´«Í³ÊÂÎñµÄ×ö·¨£¬ÄÇ¿ÉÄÜÊÇÏÈ¿ªÆôÒ»¸öÊÂÎñ£¬È»ºóÈÃAÕ˺ſۼõÓà¶î£¬ÔÙÈÃBÕ˺żÓÉÏÓà¶î£¬×îºóÌá½»ÊÂÎñ£»Èç¹ûAÕ˺ÅÓà¶î²»×㣬ÔòÖ±½ÓÅ׳öÒì³££¬Í¬ÀíBÕ˺ÅÈç¹û¼ÓÉÏÓà¶îÒ²Óöµ½Òì³££¬ÄÇÒ²Å׳öÒì³£¼´¿É£¬ÊÂÎñ»á±£Ö¤Ô×ÓÐÔÒÔ¼°×Ô¶¯»Ø¹ö¡£Ò²¾ÍÊÇ˵£¬Êý¾ÝÒ»ÖÂÐÔÒѾÓÉDB°ïÎÒÃÇ×öµôÁË¡£
µ«ÊÇ£¬Èç¹ûÊÇSagaµÄÉè¼Æ£¬ÄǾͲ»ÊÇÕâÑùÁË¡£ÎÒÃÇ»á°ÑÕû¸öתÕ˹ý³Ì¶¨ÒåΪһ¸öÒµÎñÁ÷³Ì¡£È»ºó£¬Á÷³ÌÖлá°üÀ¨¶à¸ö²ÎÓë¸ÃÁ÷³ÌµÄ¾ÛºÏ¸ùÒÔ¼°Ò»¸öÓÃÓÚе÷¾ÛºÏ¸ù½»»¥µÄÁ÷³Ì¹ÜÀíÆ÷£¨ProcessManager£¬ÎÞ״̬£©£¬Á÷³Ì¹ÜÀíÆ÷¸ºÔðÏìÓ¦Á÷³ÌÖеÄÿ¸ö¾ÛºÏ¸ù²úÉúµÄÁìÓòʼþ£¬È»ºó¸ù¾Ýʼþ·¢ËÍÏàÓ¦µÄCommand£¬´Ó¶ø¼ÌÐøÇý¶¯ÆäËûµÄ¾ÛºÏ¸ù½øÐвÙ×÷¡£
תÕ˵ÄÀý×Ó£¬Éæ¼°µ½µÄ¾ÛºÏ¸ùÓУºÁ½¸öÒøÐÐÕ˺žۺϸù£¬Ò»¸ö½»Ò×£¨Transaction£©¾ÛºÏ¸ù£¬ËüÓÃÓÚ¸ºÔð´æ´¢Á÷³ÌµÄµ±Ç°×´Ì¬£¬Ëü»¹»áά»¤Á÷³Ì״̬±ä¸üʱµÄ¹æÔòÔ¼Êø£»È»ºóµ±È»»¹ÓÐÒ»¸öÁ÷³Ì¹ÜÀíÆ÷¡£×ªÕË¿ªÊ¼Ê±£¬ÎÒÃÇ»áÏÈ´´½¨Ò»¸öTransaction¾ÛºÏ¸ù£¬È»ºóËü²úÉúÒ»¸öTransactionStartedµÄʼþ£¬È»ºóÁ÷³Ì¹ÜÀíÆ÷ÏìӦʼþ£¬È»ºó·¢ËÍÒ»¸öCommandÈÃAÕ˺žۺϸù×ö¼õÓà¶îµÄ²Ù×÷£»AÕ˺ŲÙ×÷Íê³Éºó£¬²úÉúÁìÓòʼþ£»È»ºóÁ÷³Ì¹ÜÀíÆ÷ÏìӦʼþ£¬È»ºó·¢ËÍÒ»¸öCommand֪ͨTransaction¾ÛºÏ¸ùÈ·ÈÏAÕ˺ŵIJÙ×÷£»È·ÈÏÍê³ÉºóÒ²»á²úÉúʼþ£¬È»ºóÁ÷³Ì¹ÜÀíÆ÷ÔÙÏìÓ¦£¬È»ºó·¢ËÍÒ»¸öCommand֪ͨBÕ˺Å×ö¼ÓÉÏÓà¶îµÄ²Ù×÷£»ºóÐøµÄ²½Öè¾Í²»Ïêϸ½²ÁË¡£´ó¸ÅÒâ˼ÎÒÏëÒѾ±í´ïÁË¡£×ÜÖ®£¬Í¨¹ýÕâÑùµÄÉè¼Æ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýʼþÇý¶¯µÄ·½Ê½£¬À´Íê³ÉÕû¸öÒµÎñÁ÷³Ì¡£Èç¹ûÁ÷³ÌÖеÄÈκÎÒ»²½³öÏÖÁËÒì³££¬ÄÇÎÒÃÇ¿ÉÒÔÔÚÁ÷³ÌÖж¨Òå²¹³¥»úÖÆÊµÏÖ»ØÍ˲Ù×÷¡£»òÕß²»»ØÍËҲû¹ØÏµ£¬ÒòΪTransaction¾ÛºÏ¸ù¼Ç¼ÁËÁ÷³ÌµÄµ±Ç°×´Ì¬£¬ÕâÑùÎÒÃÇ¿ÉÒԺܷ½±ãµÄºóÐøÅŲéÓÐ״̬ûÓÐÕý³£½áÊøµÄתÕ˽»Òס£¾ßÌåµÄÉè¼ÆºÍ´úÂ룬ÓÐÐËȤµÄ¿ÉÒÔÈ¥¿´Ò»ÏÂENodeÔ´´úÂëÖеÄÒøÐÐתÕ˵ÄÀý×Ó£¬ÀïÃæÓÐÍêÕûµÄʵÏÖ¡£
¶ÔÐÞ¸Äͬһ¸ö¾ÛºÏ¸ùµÄCommand½øÐÐÅŶÓ
ºÍÉÏÃæÃëɱµÄÉè¼ÆÒ»Ñù£¬ÎÒÃÇ¿ÉÒÔ¶ÔҪͬʱÐÞ¸Äͬһ¸ö¾ÛºÏ¸ùµÄCommand½øÐÐÅŶӡ£Ö»²»¹ýÕâÀïµÄÅŶӲ»ÊÇÔÚMySQL
Server¶Ë£¬¶øÊÇÔÚÎÒÃÇ×Ô¼º³ÌÐòÀï×öÕâ¸öÅŶӡ£Èç¹ûÎÒÃÇÊǵ¥Ì¨·þÎñÆ÷´¦ÀíËùÓеÄCommand£¬ÄÇÅŶӺÜÈÝÒ××ö¡£¾ÍÊÇÖ»ÒªÔÚÄÚ´æÖУ¬µ±Òª´¦Àíij¸öCommandʱ£¬Åжϵ±Ç°CommandÒªÐ޸ĵľۺϸùÊÇ·ñÇ°ÃæÒѾÓÐCommandÔÚ´¦Àí£¬Èç¹ûÓУ¬ÔòÅŶӣ»Èç¹ûûÓУ¬ÔòÖ±½ÓÖ´ÐС£È»ºóµ±Õâ¸ö¾ÛºÏ¸ùµÄǰһ¸öCommandÖ´ÐÐÍêºó£¬ÎÒÃǾÍÄÜ´¦Àí¸Ã¾ÛºÏ¸ùµÄÏÂÒ»¸öCommandÁË£»µ«ÊÇÈç¹ûÊǼ¯ÈºµÄÇé¿öÏÂÄØ£¬Ò²¾ÍÊÇÄã²»Ö¹ÓÐһ̨·þÎñÆ÷ÔÚ´¦ÀíCommand£¬¶øÊÇÓÐʮ̨£¬ÄÇÒªÔõô°ìÄØ£¿ÒòΪͬһʱ¿Ì£¬ÍêÈ«ÓпÉÄÜÓÐÁ½¸ö²»Í¬µÄCommandÔÚÐÞ¸Äͬһ¸ö¾ÛºÏ¸ù¡£Õâ¸öÎÊÌâÒ²¼òµ¥£¬¾ÍÊÇÎÒÃÇ¿ÉÒÔ¶ÔÒªÐ޸ľۺϸùµÄCommand¸ù¾Ý¾ÛºÏ¸ùµÄID½øÐзÓÉ£¬¸ù¾Ý¾ÛºÏ¸ùµÄIDµÄhashcode£¬È»ºóºÍµ±Ç°´¦ÀíCommandµÄ·þÎñÆ÷ÊýĿȡ죬¾ÍÄÜÈ·¶¨µ±Ç°CommandÒª±»Â·Óɵ½Äĸö·þÎñÆ÷ÉÏ´¦ÀíÁË¡£ÕâÑùÎÒÃÇÄÜÈ·±£ÔÚ·þÎñÆ÷ÊýÄ¿²»±äµÄÇé¿öÏ£¬Õë¶Ôͬһ¸ö¾ÛºÏ¸ùʵÀýÐ޸ĵÄËùÓÐCommand¶¼ÊDZ»Â·Óɵ½Í¬Ò»Ì¨·þÎñÆ÷´¦Àí¡£È»ºó¼ÓÉÏÎÒÃÇÇ°ÃæÔÚµ¥¸ö·þÎñÆ÷ÀïÃæÄÚ²¿×öµÄÅŶÓÉè¼Æ£¬¾ÍÄÜ×îÖÕ±£Ö¤£¬¶Ôͬһ¸ö¾ÛºÏ¸ùµÄÐ޸ģ¬Í¬Ò»Ê±¿ÌÖ»ÓÐÒ»¸öÏß³ÌÔÚ½øÐС£
ͨ¹ýÉÏÃæÕâÁ½¸öÉè¼Æ£¬ÎÒÃÇ¿ÉÒÔÈ·±£C¶ËËùÓеÄCommand£¬¶¼²»»á³öÏÖ²¢·¢³åÍ»¡£µ«ÊÇÒ²Òª¸¶³ö´ú¼Û£¬ÄǾÍÊÇÒª½ÓÊÜ×îÖÕÒ»ÖÂÐÔ¡£±ÈÈçSagaµÄ˼Ï룬¾ÍÊÇÔÚ×îÖÕÒ»ÖÂÐԵĻù´¡É϶øÊµÏÖµÄÒ»ÖÖÉè¼Æ¡£È»ºó£¬»ùÓÚÒÔÉÏÁ½µãµÄÕâÖּܹ¹µÄÉè¼Æ£¬ÎÒ¾õµÃ×î¹Ø¼üµÄÊÇÒª×öµ½£º1£©·Ö²¼Ê½ÏûÏ¢¶ÓÁеĿɿ¿£¬²»ÄܶªÏûÏ¢£¬·ñÔòSagaÁ÷³Ì¾Í¶ÏÁË£»2£©ÏûÏ¢¶ÓÁÐÒª¸ßÐÔÄÜ£¬Ö§³Ö¸ßÍÌÍÂÁ¿£»ÕâÑù²ÅÄÜÔڸ߲¢·¢Ê±£¬ÊµÏÖÕû¸öϵͳµÄÕûÌåµÄ¸ßÐÔÄÜ¡£ÎÒ¿ª·¢µÄEQueue¾ÍÊÇΪÁËÕâ¸öÄ¿±ê¶øÉè¼ÆµÄÒ»¸ö·Ö²¼Ê½ÏûÏ¢¶ÓÁУ¬ÓÐÐËȤµÄÅóÓÑ¿ÉÒÔÈ¥Á˽âÏÂŶ¡£
CommandºÍEventµÄÃݵȴ¦Àí
CQRS¼Ü¹¹ÊÇ»ùÓÚÏûÏ¢Çý¶¯µÄ£¬ËùÒÔÎÒÃÇÒª¾¡Á¿±ÜÃâÏûÏ¢µÄÖØ¸´Ïû·Ñ¡£·ñÔò£¬¿ÉÄܻᵼÖÂij¸öÏûÏ¢±»Öظ´Ïû·Ñ¶øµ¼ÖÂ×îÖÕÊý¾ÝÎÞ·¨Ò»Ö¡£¶ÔÓÚCQRS¼Ü¹¹£¬ÎÒ¾õµÃÖ÷Òª¿¼ÂÇÈý¸ö»·½ÚµÄÏûÏ¢Ãݵȴ¦Àí¡£
CommandµÄÃݵȴ¦Àí
ÕâÒ»µã£¬ÎÒÏë²»ÄÑÀí½â¡£±ÈÈçתÕ˵ÄÀý×ÓÖУ¬¼ÙÈçAÕ˺ſۼõÓà¶îµÄÃüÁî±»ÖØ¸´Ö´ÐÐÁË£¬ÄǻᵼÖÂAÕ˺ſÛÁËÁ½´ÎÇ®¡£ÄÇ×îºó¾ÍÊý¾ÝÎÞ·¨Ò»ÖÂÁË¡£ËùÒÔ£¬ÎÒÃÇÒª±£Ö¤Command²»Äܱ»Öظ´Ö´ÐС£ÄÇÔõô±£Ö¤ÄØ£¿ÏëÏëÎÒÃÇÆ½Ê±Ò»Ð©ÅжÏÖØ¸´µÄ²Ù×÷Ôõô×öµÄ£¿Ò»°ãÓÐÁ½¸ö×ö·¨£º1£©db¶ÔijһÁн¨Î¨Ò»Ë÷Òý£¬ÕâÑù¿ÉÒÔÑϸñ±£Ö¤Ä³Ò»ÁÐÊý¾ÝµÄÖµ²»»áÖØ¸´£»2£©Í¨¹ý³ÌÐò±£Ö¤£¬±ÈÈç²åÈëǰÏÈͨ¹ýselect²éѯÅжÏÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔÚ£¬Ôòinsert£¬·ñÔò¾ÍÈÏÎªÖØ¸´£»ÏÔȻͨ¹ýµÚ¶þÖÖÉè¼Æ£¬ÔÚ²¢·¢µÄÇé¿öÏ£¬ÊDz»Äܱ£Ö¤¾ø¶ÔµÄΨһÐԵġ£È»ºóCQRS¼Ü¹¹£¬ÎÒÈÏΪÎÒÃÇ¿ÉÒÔͨ¹ý³Ö¾Ã»¯CommandµÄ·½Ê½£¬È»ºó°ÑCommandId×÷ΪÖ÷¼ü£¬È·±£Command²»»áÖØ¸´¡£ÄÇÎÒÃÇÊÇ·ñҪÿ´ÎÖ´ÐÐCommandǰÏßÅжϸÃCommandÊÇ·ñ´æÔÚÄØ£¿²»Óá£ÒòΪ³öÏÖCommandÖØ¸´µÄ¸ÅÂʺܵͣ¬Ò»°ãÖ»ÓÐÊÇÔÚÎÒÃÇ·þÎñÆ÷»úÆ÷ÊýÁ¿±ä¶¯Ê±²Å»á³öÏÖ¡£±ÈÈçÔö¼ÓÁËһ̨·þÎñÆ÷ºó£¬»áÓ°Ïìµ½CommandµÄ·ÓÉ£¬´Ó¶ø×îÖջᵼÖÂij¸öCommand»á±»Öظ´´¦Àí£¬¹ØÓÚÕâÀïµÄϸ½Ú£¬ÎÒÕâÀï²»Ïë¶àÕ¹¿ªÁË£¬ºÇºÇ¡£ÓÐÎÊÌâµ½»Ø¸´ÀïÌÖÂÛ°É¡£Õâ¸öÎÊÌ⣬ÎÒÃÇÒ²¿ÉÒÔ×î´ó³Ì¶ÈÉϱÜÃ⣬±ÈÈçÎÒÃÇ¿ÉÒÔÔÚijһÌìϵͳ×î¿ÕµÄʱºòÔ¤ÏÈÔö¼ÓºÃ·þÎñÆ÷£¬ÕâÑù¿ÉÒ԰ѳöÏÖÖØ¸´Ïû·ÑÏûÏ¢µÄÇé¿ö½µÖÁ×îµÍ¡£×ÔȻҲ¾Í×î´ó»¯µÄ±ÜÃâÁËCommandµÄÖØ¸´Ö´ÐС£ËùÒÔ£¬»ùÓÚÕâ¸öÔÒò£¬ÎÒÃÇûÓбØÒªÔÚÿ´ÎÖ´ÐÐÒ»¸öCommandʱÏÈÅжϸÃCommandÊÇ·ñÒÑÖ´ÐС£¶øÊÇÖ»ÒªÔÚCommandÖ´ÐÐÍêÖ®ºó£¬Ö±½Ó³Ö¾Ã»¯¸ÃCommand¼´¿É£¬È»ºóÒòΪdbÖÐÒÔCommandIdΪÖ÷¼ü£¬ËùÒÔÈç¹û³öÏÖÖØ¸´£¬»áÖ÷¼üÖØ¸´µÄÒì³£¡£ÎÒÃÇÖ»Òª²¶»ñ¸ÃÒì³££¬È»ºó¾ÍÖªµÀÁ˸ÃCommandÒѾ´æÔÚ£¬Õâ¾Í˵Ã÷¸ÃCommand֮ǰÒѾ±»´¦Àí¹ýÁË£¬ÄÇÎÒÃÇÖ»ÒªºöÂÔ¸ÃCommand¼´¿É£¨µ±È»Êµ¼ÊÉϲ»ÄÜÖ±½ÓºöÂÔ£¬ÕâÀïÎÒÓÉÓÚÆª·ùÎÊÌ⣬ÎҾͲ»Ïêϸչ¿ªÁË£¬¾ßÌåÎÒÃÇ¿ÉÒÔÔÙÌÖÂÛ£©¡£È»ºó£¬Èç¹û³Ö¾Ã»¯Ã»ÓÐÎÊÌ⣬˵Ã÷¸ÃCommand֮ǰûÓб»Ö´Ðйý£¬ÄǾÍOKÁË¡£ÕâÀ»¹ÓиöÎÊÌâÒ²²»ÄܺöÊÓ£¬¾ÍÊÇij¸öCommandµÚÒ»´ÎÖ´ÐÐÍê³ÉÁË£¬Ò²³Ö¾Ã»¯³É¹¦ÁË£¬µ«ÊÇËüÓÉÓÚijÖÖÔÒòûÓдÓÏûÏ¢¶ÓÁÐÖÐɾ³ý¡£ËùÒÔ£¬µ±ËüÏ´ÎÔÙ±»Ö´ÐÐʱ£¬Command
HandlerÀï¿ÉÄܻᱨÒì³££¬ËùÒÔ£¬½¡×³µÄ×ö·¨Ê±£¬ÎÒÃÇÒª²¶»ñÕâ¸öÒì³£¡£µ±³öÏÖÒ쳣ʱ£¬ÎÒÃÇÒª¼ì²é¸ÃCommandÊÇ·ñ֮ǰÒÑÖ´Ðйý£¬Èç¹ûÓУ¬¾ÍÒªÈÏΪµ±Ç°CommandÖ´ÐÐÕýÈ·£¬È»ºóÒª°Ñ֮ǰCommand²úÉúµÄʼþÄóöÀ´×öºóÐøµÄ´¦Àí¡£Õâ¸öÎÊÌâÓеãÉîÈëÁË£¬ÎÒÔÝʱ²»Ï¸»¯ÁË¡£ÓÐÐËȤµÄ¿ÉÒÔÕÒÎÒ˽ÁÄ¡£
Event³Ö¾Ã»¯µÄÃݵȴ¦Àí
È»ºó£¬ÒòΪÎÒÃǵļܹ¹ÊÇ»ùÓÚESµÄ£¬ËùÒÔ£¬Õë¶ÔÐÂÔö»òÐ޸ľۺϸùµÄCommand£¬×ÜÊÇ»á²úÉúÏàÓ¦µÄÁìÓòʼþ£¨Domain
Event£©¡£ÎÒÃǽÓÏÂÀ´µÄÒª×öµÄÊÂÇé¾ÍÊÇÒªÏȳ־û¯Ê¼þ£¬ÔÙ·Ö·¢ÕâЩʼþ¸øËùÓеÄÍⲿʼþ¶©ÔÄÕß¡£´ó¼ÒÖªµÀ£¬¾ÛºÏ¸ùÓÐÉúÃüÖÜÆÚ£¬ÔÚËüµÄÉúÃüÖÜÆÚÀ»á¾Àú¸÷ÖÖʼþ£¬¶øÊ¼þµÄ·¢Éú×ÜÓÐÈ·¶¨µÄʱ¼ä˳Ðò¡£ËùÒÔ£¬ÎªÁËÃ÷È·ÄĸöʼþÏÈ·¢Éú£¬Äĸöʼþºó·¢Éú£¬ÎÒÃÇ¿ÉÒÔ¶Ôÿ¸öʼþÉèÖÃÒ»¸ö°æ±¾ºÅ£¬¼´version¡£¾ÛºÏ¸ùµÚÒ»¸ö²úÉúµÄʼþµÄversionΪ1£¬µÚ¶þ¸öΪ2£¬ÒÔ´ËÀàÍÆ¡£È»ºó¾ÛºÏ¸ù±¾ÉíÒ²ÓÐÒ»¸ö°æ±¾ºÅ£¬ÓÃÓڼǼµ±Ç°×Ô¼ºµÄ°æ±¾ÊÇʲô£¬Ëüÿ´Î²úÉúÏÂÒ»¸öʼþʱ£¬Ò²Äܸù¾Ý×Ô¼ºµÄ°æ±¾ºÅÍÆµ¼³öÏÂÒ»¸öÒª²úÉúµÄʼþµÄ°æ±¾ºÅÊÇʲô¡£±ÈÈç¾ÛºÏ¸ùµ±Ç°µÄ°æ±¾ºÅΪ5£¬ÄÇÏÂÒ»¸öʼþµÄ°æ±¾ºÅÔòΪ6¡£Í¨¹ýΪÿ¸öʼþÉè¼ÆÒ»¸ö°æ±¾ºÅ£¬ÎÒÃǾÍÄܷܺ½±ãµÄʵÏ־ۺϸù²úÉúʼþʱµÄ²¢·¢¿ØÖÆÁË£¬ÒòΪһ¸ö¾ÛºÏ¸ù²»¿ÉÄܲúÉúÁ½¸ö°æ±¾ºÅÒ»ÑùµÄʼþ£¬Èç¹û³öÏÖÕâÖÖÇé¿ö£¬ÄÇ˵Ã÷Ò»¶¨ÊdzöÏÖ²¢·¢³åÍ»ÁË¡£Ò²¾ÍÊÇÒ»¶¨ÊdzöÏÖÁËͬһ¸ö¾ÛºÏ¸ùͬʱ±»Á½¸öCommandÐ޸ĵÄÇé¿öÁË¡£ËùÒÔ£¬ÒªÊµÏÖʼþ³Ö¾Ã»¯µÄÃݵȴ¦Àí£¬Ò²ºÜºÃ×öÁË£¬¾ÍÊÇdbÖеÄʼþ±í£¬¶Ô¾ÛºÏ¸ùID+¾ÛºÏ¸ùµ±Ç°µÄversion½¨Î¨Ò»Ë÷Òý¡£ÕâÑù¾ÍÄÜÔÚdb²ãÃæ£¬È·±£Event³Ö¾Ã»¯µÄÃݵȴ¦Àí¡£ÁíÍ⣬¶ÔÓÚʼþµÄ³Ö¾Ã»¯£¬ÎÒÃÇÒ²¿ÉÒÔÏñÃëɱÄÇÑù£¬ÊµÏÖGroup
Commit¡£¾ÍÊÇCommand²úÉúµÄʼþ²»ÓÃÁ¢Âí³Ö¾Ã»¯£¬¶øÊÇ¿ÉÒÔÏÈ»ýÀÛµ½Ò»¶¨µÄÁ¿£¬±ÈÈç50¸ö£¬È»ºóÔÙÒ»´ÎÐÔGroup
CommitËùÓеÄʼþ¡£È»ºóʼþ³Ö¾Ã»¯Íê³Éºó£¬ÔÙÐÞ¸Äÿ¸ö¾ÛºÏ¸ùµÄ״̬¼´¿É¡£Èç¹ûGroup CommitʼþʱÓöµ½²¢·¢³åÍ»£¨ÓÉÓÚij¸ö¾ÛºÏ¸ùµÄʼþµÄ°æ±¾ºÅÓÐÖØ¸´£©£¬ÔòÍË»ØÎªµ¥¸öÒ»¸ö¸ö³Ö¾Ã»¯Ê¼þ¼´¿É¡£ÎªÊ²Ã´¿ÉÒÔ·ÅÐĵÄÕâÑù×ö£¿ÒòΪÎÒÃÇÒѾ»ù±¾×öµ½È·±£Ò»¸ö¾ÛºÏ¸ùͬһʱ¿ÌÖ»»á±»Ò»¸öCommandÐ޸ġ£ÕâÑù¾ÍÄÜ»ù±¾±£Ö¤£¬ÕâЩGroup
CommitµÄʼþÒ²²»»á³öÏÖ°æ±¾ºÅ³åÍ»µÄÇé¿ö¡£ËùÒÔ£¬´ó¼ÒÊÇ·ñ¾õµÃ£¬ºÜ¶àÉè¼ÆÆäʵÊÇÒ»»·Ì×Ò»»·µÄ¡£Group
CommitºÎʱ³ö·¢£¿ÎÒ¾õµÃ¿ÉÒÔÖ»ÒªÂú×ãÁ½¸öÌõ¼þÁ˾ͿÉÒÔ´¥·¢£º1£©Ä³¸ö¶¨Ê±µÄÖÜÆÚµ½Á˾ͿÉÒÔ´¥·¢£¬Õâ¸ö¶¨Ê±ÖÜÆÚ¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÒµÎñ³¡¾°½øÐÐÅäÖ㬱ÈÈçÿ¸ô50ms´¥·¢Ò»´Î£»2£©ÒªCommitµÄʼþµ½´ïij¸ö×î´óÖµ£¬¼´Ã¿Åú¿ÉÒԳ־û¯µÄʼþ¸öÊýµÄ×î´óÖµ£¬±ÈÈçÿ50¸öʼþΪһÅú£¬Õâ¸öBatchSizeÒ²ÐèÒª¸ù¾Ýʵ¼ÊÒµÎñ³¡¾°ºÍÄãµÄ´æ´¢dbµÄÐÔÄÜ×ۺϲâÊÔÆÀ¹ÀÀ´µÃµ½Ò»¸ö×îÊʺϵÄÖµ£»ºÎʱ¿ÉÒÔʹÓÃGroup
Commit£¿ÎÒ¾õµÃÖ»ÓÐÊÇÔÚ²¢·¢·Ç³£¸ß£¬µ±µ¥¸ö³Ö¾Ã»¯Ê¼þÓöµ½ÐÔÄÜÆ¿¾±Ê±£¬²ÅÐèҪʹÓ᣷ñÔò·´¶ø»á½µµÍʼþ³Ö¾Ã»¯µÄʵʱÐÔ£¬Group
CommitÌá¸ßµÄÊǸ߲¢·¢Ïµ¥Î»Ê±¼äÄڳ־û¯µÄʼþÊý¡£Ä¿µÄÊÇΪÁ˽µµÍÓ¦ÓúÍDBÖ®¼ä½»»¥µÄ´ÎÊý£¬´Ó¶ø¼õÉÙIOµÄ´ÎÊý¡£²»Öª²»¾õ¾Í˵µ½ÁË×ʼ˵µÄÄÇ3µãÐÔÄÜÓÅ»¯Öе쬾¡Á¿¼õÉÙIOÁË£¬ºÇºÇ¡£
EventÏû·ÑʱµÄÃݵȴ¦Àí
CQRS¼Ü¹¹Í¼ÖУ¬Ê¼þ³Ö¾Ã»¯Íê³Éºó£¬½ÓÏÂÀ´¾ÍÊÇ»á°ÑÕâЩʼþ·¢²¼³öÈ¥£¨·¢Ë͵½·Ö²¼Ê½ÏûÏ¢¶ÓÁУ©£¬¸øÏû·ÑÕßÏû·ÑÁË£¬Ò²¾ÍÊǸøËùÓеÄEvent
Handler´¦Àí¡£ÕâЩEvent Handler¿ÉÄÜÊǸüÐÂQ¶ËµÄReadDB£¬Ò²¿ÉÄÜÊÇ·¢ËÍÓʼþ£¬Ò²¿ÉÄÜÊǵ÷ÓÃÍⲿϵͳµÄ½Ó¿Ú¡£×÷Ϊ¿ò¼Ü£¬Ó¦¸ÃÓÐÖ°Ôð¾¡Á¿±£Ö¤Ò»¸öʼþ¾¡Á¿²»Òª±»Ä³¸öEvent
HandlerÖØ¸´Ïû·Ñ£¬·ñÔò£¬¾ÍÐèÒªEvent Handler×Ô¼º±£Ö¤ÁË¡£ÕâÀïµÄÃݵȴ¦Àí£¬ÎÒÄÜÏëµ½µÄ°ì·¨¾ÍÊÇÓÃÒ»ÕÅ±í£¬´æ´¢Ä³¸öʼþÊÇ·ñ±»Ä³¸öEvent
Handler´¦ÀíµÄÐÅÏ¢¡£Ã¿´Îµ÷ÓÃEvent Handler֮ǰ£¬ÅжϸÃEvent HandlerÊÇ·ñÒÑ´¦Àí¹ý£¬Èç¹ûû´¦Àí¹ý£¬¾Í´¦Àí£¬´¦ÀíÍêºó£¬²åÈëÒ»Ìõ¼Ç¼µ½Õâ¸ö±í¡£Õâ¸ö·½·¨ÏàÐÅ´ó¼ÒÒ²¶¼ºÜÈÝÒ×Ïëµ½¡£Èç¹û¿ò¼Ü²»×öÕâ¸öÊÂÇ飬ÄÇEvent
HandlerÄÚ²¿¾ÍÒª×Ô¼º×öºÃÃݵȴ¦Àí¡£Õâ¸ö˼·¾ÍÊÇselect if not exist, then
handle, and at last insertµÄ¹ý³Ì¡£¿ÉÒÔ¿´µ½Õâ¸ö¹ý³Ì²»ÏñÇ°ÃæÄÇÁ½¸ö¹ý³ÌÄÇÑùºÜÑϽ÷£¬ÒòΪÔÚ²¢·¢µÄÇé¿öÏ£¬ÀíÂÛÉÏ»¹ÊÇ»á³öÏÖÖØ¸´Ö´ÐÐEvent
HandlerµÄÇé¿ö¡£»òÕß¼´±ã²»ÊDz¢·¢Ê±Ò²¿ÉÄÜ»áÔì³É£¬ÄǾÍÊǼÙÈçevent handlerÖ´Ðгɹ¦ÁË£¬µ«ÊÇlast
insertʧ°ÜÁË£¬ÄÇ¿ò¼Ü»¹ÊÇ»áÖØÊÔÖ´ÐÐevent handler¡£ÕâÀÄã»áºÜÈÝÒ×Ïëµ½£¬ÎªÁË×öÕâ¸öÃݵÈÖ§³Ö£¬Event
HandlerµÄÒ»´ÎÍêÕûÖ´ÐУ¬ÐèÒªÔö¼Ó²»ÉÙʱ¼ä£¬´Ó¶ø»á×îºóµ¼ÖÂQuery SideµÄÊý¾Ý¸üеÄÑÓ³Ù¡£²»¹ýCQRS¼Ü¹¹µÄ˼Ïë¾ÍÊÇQ¶ËµÄÊý¾ÝÓÉC¶Ëͨ¹ýʼþͬ²½¹ýÀ´£¬ËùÒÔQ¶ËµÄ¸üб¾Éí¾ÍÊÇÓÐÒ»¶¨µÄÑӳٵġ£ÕâÒ²ÊÇCQRS¼Ü¹¹Ëù˵µÄÒª½ÓÊÕ×îÖÕÒ»ÖÂÐÔµÄÔÒò¡£
¹ØÓÚÃݵȴ¦ÀíµÄÐÔÄÜÎÊÌâµÄ˼¿¼
¹ØÓÚCommandStoreµÄÐÔÄÜÆ¿¾±·ÖÎö
´ó¼ÒÖªµÀ£¬Õû¸öCQRS¼Ü¹¹ÖУ¬Command£¬EventµÄ²úÉúÒÔ¼°´¦ÀíÊǷdz£Æµ·±µÄ£¬Êý¾ÝÁ¿Ò²ÊǷdz£´óµÄ¡£ÄÇÈçºÎ±£Ö¤Õ⼸²½Ãݵȴ¦ÀíµÄ¸ßÐÔÄÜÄØ£¿¶ÔÓÚCommandµÄÃݵȴ¦Àí£¬Èç¹û¶ÔÐÔÄÜÒªÇó²»ÊǺܸߣ¬ÄÇÎÒÃÇ¿ÉÒÔ¼òµ¥Ê¹ÓùØÏµÐÍDB¼´¿É£¬±ÈÈçSql
Server, MySQL¶¼¿ÉÒÔ¡£ÒªÊµÏÖÃݵȴ¦Àí£¬Ö»ÐèÒª°ÑÖ÷¼üÉè¼ÆÎªCommandId¼´¿É¡£ÆäËû²»ÐèÒª¶îÍâµÄΨһË÷Òý¡£ËùÒÔÕâÀïµÄÐÔÄÜÆ¿¾±Ï൱ÓÚÊǶԵ¥±í×ö´óÁ¿insert²Ù×÷µÄ×î´óTPS¡£Ò»°ãMySQLÊý¾Ý¿â£¬SSDÓ²ÅÌ£¬Òª´ïµ½2W
TPSÓ¦¸ÃûʲôÎÊÌâ¡£¶ÔÓÚÕâ¸ö±í£¬ÎÒÃÇ»ù±¾Ö»ÓÐдÈë²Ù×÷£¬²»ÐèÒª¶ÁÈ¡²Ù×÷¡£Ö»ÓÐÊÇÔÚCommand²åÈëÓöµ½Ö÷¼ü³åÍ»£¬È»ºó²Å¿ÉÄÜÐèҪż¶û¸ù¾ÝÖ÷¼ü¶ÁȡһÏÂÒѾ´æÔÚµÄCommandµÄÐÅÏ¢¡£È»ºó£¬Èç¹ûµ¥±íÊý¾ÝÁ¿Ì«´ó£¬ÄÇÔõô°ì£¬¾ÍÊÇ·Ö±í·Ö¿âÁË¡£Õâ¾ÍÊÇ×ʼ̸µ½µÄ£¬Òª±Ü¿ªº£Á¿Êý¾ÝÕâ¸öÔÔòÁË£¬ÎÒÏë¾ÍÊÇͨ¹ýsharding±Ü¿ª´óÊý¾ÝÀ´ÊµÏÖÈÆ¹ýIOÆ¿¾±µÄÉè¼ÆÁË¡£²»¹ýÒ»µ©Éæ¼°µ½·Ö¿â£¬·Ö±í£¬¾ÍÓÖÉæ¼°µ½¸ù¾Ýʲô·Ö¿â·Ö±íÁË£¬¶ÔÓÚ´æ´¢CommandµÄ±í£¬ÎÒ¾õµÃ±È½Ï¼òµ¥£¬ÎÒÃÇ¿ÉÒÔÏȸù¾ÝCommandµÄÀàÐÍ£¨Ï൱ÓÚ¸ù¾ÝÒµÎñ×ö´¹Ö±²ð·Ö£©×öµÚÒ»¼¶Â·ÓÉ£¬È»ºóÏàͬCommandÀàÐ͵ÄCommand£¬¸ù¾ÝCommandIdµÄhashcode·ÓÉ£¨Ë®Æ½²ð·Ö£©¼´¿É¡£ÕâÑù¾ÍÄܽâ¾öCommandͨ¹ý¹ØÏµÐÍDB´æ´¢µÄÐÔÄÜÆ¿¾±ÎÊÌâ¡£ÆäʵÎÒÃÇ»¹¿ÉÒÔͨ¹ýÁ÷ÐеĻùÓÚkey/valueµÄNoSQLÀ´´æ´¢£¬±ÈÈç¿ÉÒÔÑ¡Ôñ±¾µØÔËÐеÄleveldb£¬»òÕßÖ§³Ö·Ö²¼Ê½µÄssdb£¬»òÕ߯äËûµÄ£¬¾ßÌåÑ¡ÔñÄĸö£¬¿ÉÒÔ½áºÏ×Ô¼ºµÄÒµÎñ³¡¾°À´Ñ¡Ôñ¡£×ÜÖ®£¬CommandµÄ´æ´¢¿ÉÒÔÓкܶàÑ¡Ôñ¡£
¹ØÓÚEventStoreµÄÐÔÄÜÆ¿¾±·ÖÎö
ͨ¹ýÉÏÃæµÄ·ÖÎö£¬ÎÒÃÇÖªµÀEventµÄ´æ´¢Î¨Ò»ÐèÒªµÄÊÇAggregateRootId+VersionµÄΨһË÷Òý£¬ÆäËû¾ÍÎÞÈκÎÒªÇóÁË¡£ÄÇÕâÑù¾ÍºÍCommandStoreÒ»ÑùºÃ°ìÁË¡£Èç¹ûÒ²ÊDzÉÓùØÏµÐÍDB£¬ÄÇÖ»ÒªÓÃAggregateRootId+VersionÕâÁ½¸ö×÷ΪÁªºÏÖ÷¼ü¼´¿É¡£È»ºóÈç¹ûÒª·Ö¿â·Ö±í£¬ÎÒÃÇ¿ÉÒÔÏȸù¾ÝAggregateRootType×öµÚÒ»¼¶´¹Ö±²ð·Ö£¬¼´°Ñ²»Í¬µÄ¾ÛºÏ¸ùÀàÐͲúÉúµÄʼþ·Ö¿ª´æ´¢¡£È»ºóºÍCommandÒ»Ñù£¬Ïàͬ¾ÛºÏ¸ù²úÉúµÄʼþ£¬¿ÉÒÔ¸ù¾ÝAggregateRootIdµÄhashcodeÀ´²ð·Ö£¬Í¬Ò»¸öAggregateRootIdµÄËùÓÐʼþ¶¼·ÅÒ»Æð¡£ÕâÑù¼ÈÄܱ£Ö¤AggregateRootId+VersionµÄΨһÐÔ£¬ÓÖÄܱ£Ö¤Êý¾ÝµÄˮƽ²ð·Ö¡£´Ó¶øÈÃÕû¸öEventStore¿ÉÒÔÎÞÏÞÖÆË®Æ½ÉìËõ¡£µ±È»£¬ÎÒÃÇÒ²ÍêÈ«¿ÉÒÔ²ÉÓûùÓÚkey/valueµÄNoSQLÀ´´æ´¢¡£ÁíÍ⣬ÎÒÃDzéѯʼþ£¬Ò²¶¼ÊÇ»áÈ·¶¨¾ÛºÏ¸ùµÄÀàÐÍÒÔ¼°¾ÛºÏ¸ùµÄID£¬ËùÒÔ£¬ÕâºÍ·ÓÉ»úÖÆÒ»Ö±£¬²»»áµ¼ÖÂÎÒÃÇÎÞ·¨ÖªµÀµ±Ç°Òª²éѯµÄ¾ÛºÏ¸ùµÄʼþÔÚÄĸö·ÖÇøÉÏ¡£
¾ÛºÏ¸ùµÄÄÚ´æÄ£Ê½£¨In-Memory£©
In-MemoryģʽҲÊÇÒ»ÖÖ¼õÉÙÍøÂçIOµÄÒ»ÖÖÉè¼Æ£¬Í¨¹ýÈÃËùÓÐÉúÃüÖÜÆÚ»¹Ã»½áÊøµÄ¾ÛºÏ¸ùÒ»Ö±³£×¤ÔÚÄڴ棬´Ó¶øÊµÏÖµ±ÎÒÃÇÒªÐÞ¸Äij¸ö¾ÛºÏ¸ùʱ£¬²»±ØÔÙÏñ´«Í³µÄ·½Ê½ÄÇÑù£¬ÏÈ´Ódb»ñÈ¡¾ÛºÏ¸ù£¬ÔÙ¸üУ¬Íê³ÉºóÔÙ±£´æµ½dbÁË¡£¶øÊǾۺϸùÒ»Ö±ÔÚÄڴ棬µ±Command
HandlerÒªÐÞ¸Äij¸ö¾ÛºÏ¸ùʱ£¬Ö±½Ó´ÓÄÚ´æÄõ½¸Ã¾ÛºÏ¸ù¶ÔÏó¼´¿É£¬²»ÐèÒªÈκÎÐòÁл¯·´ÐòÁл¯»òIOµÄ²Ù×÷¡£»ùÓÚESģʽ£¬ÎÒÃDz»ÐèÒªÖ±½Ó±£´æ¾ÛºÏ¸ù£¬¶øÊÇÖ»Òª¼òµ¥µÄ±£´æ¾ÛºÏ¸ù²úÉúµÄʼþ¼´¿É¡£µ±·þÎñÆ÷¶ÏµçÒª»Ö¸´¾ÛºÏ¸ùʱ£¬ÔòÖ»ÒªÓÃʼþËÝÔ´£¨Event
Sourcing, ES£©µÄ·½Ê½»Ö¸´¾ÛºÏ¸ùµ½×îÐÂ״̬¼´¿É¡£
Á˽â¹ýactorµÄÈËÓ¦¸ÃÒ²ÖªµÀactorÒ²ÊÇÕû¸ö¼¯ÈºÖоÍÒ»¸öʵÀý£¬È»ºóÿ¸öactor×Ô¼º¶¼ÓÐÒ»¸ömailbox£¬Õâ¸ömailboxÓÃÓÚ´æ·Åµ±Ç°actorÒª´¦ÀíµÄËùÓеÄÏûÏ¢¡£Ö»Òª·þÎñÆ÷²»¶Ïµç£¬ÄÇactor¾ÍÒ»Ö±´æ»îÔÚÄÚ´æ¡£ËùÒÔ£¬In-MemoryģʽҲÊÇactorµÄÒ»¸öÉè¼ÆË¼ÏëÖ®Ò»¡£Ïñ֮ǰºÜºä¶¯µÄ¹úÍâµÄÒ»¸öLMAX¼Ü¹¹£¬ºÅ³ÆÃ¿Ãëµ¥»úµ¥ºË¿ÉÒÔ´¦Àí600W¶©µ¥£¬Ò²ÊÇÍêÈ«»ùÓÚin-memoryģʽ¡£²»¹ýLMAX¼Ü¹¹ÎÒ¾õµÃÖ»Òª×÷Ϊѧϰ¼´¿É£¬Òª´ó·¶Î§Ê¹Ó㬻¹ÊÇÓкܶàÎÊÌâÒª½â¾ö£¬ÀÏÍâËûÃÇʹÓÃÕâÖּܹ¹À´´¦Àí¶©µ¥£¬Ò²ÊÇ»ùÓÚÌØ¶¨³¡¾°µÄ£¬²¢ÇÒ¶Ô±à³Ì£¨´úÂëÖÊÁ¿£©ºÍÔËάµÄÒªÇ󶼷dz£¸ß¡£¾ßÌåÓÐÐËȤµÄ¿ÉÒÔÈ¥ËÑÒ»ÏÂÏà¹Ø×ÊÁÏ¡£
¹ØÓÚin-memory¼Ü¹¹£¬Ïë·¨ÊǺõģ¬Í¨¹ý½«ËùÓÐÊý¾Ý¶¼·ÅÔÚÄڴ棬ËùÓг־û¯¶¼Òì²½½øÐС£Ò²¾ÍÊÇ˵£¬ÄÚ´æµÄÊý¾Ý²ÅÊÇ×îеģ¬dbµÄÊý¾ÝÊÇÒì²½³Ö¾Ã»¯µÄ£¬Ò²¾ÍÊÇij¸öʱ¿Ì£¬ÄÚ´æÖÐÓÐЩÊý¾Ý¿ÉÄÜ»¹Ã»Óб»³Ö¾Ã»¯µ½db¡£µ±È»£¬Èç¹ûÄã˵ÄãµÄ³ÌÐò²»ÐèÒª³Ö¾Ã»¯Êý¾Ý£¬ÄÇÁíµ±±ðÂÛÁË¡£ÄÇÈç¹ûÊÇÒì²½³Ö¾Ã»¯£¬Ö÷ÒªµÄÎÊÌâ¾ÍÊÇå´»ú»Ö¸´µÄÎÊÌâÁË¡£ÎÒÃÇ¿´Ò»ÏÂakka¿ò¼ÜÊÇÔõô³Ö¾Ã»¯akkaµÄ״̬µÄ°É¡£
1.¶à¸öÏûϢͬʱ·¢Ë͸øactorʱ£¬È«²¿»áÏÈ·ÅÈë¸ÃactorµÄmailboxÀïÅŶӣ»
2.È»ºóactorµ¥Ï̴߳Ómailbox˳ÐòÏû·ÑÏûÏ¢£»
3.Ïû·ÑÒ»¸öºó²úÉúʼþ£»
4.³Ö¾Ã»¯Ê¼þ£¬akka-persistenceÒ²ÊDzÉÓÃÁËESµÄ·½Ê½³Ö¾Ã»¯£»
5.³Ö¾Ã»¯Íê³Éºó£¬¸üÐÂactorµÄ״̬£»
6.¸üÐÂ״̬Íê³Éºó£¬ÔÙ´¦ÀímailboxÖеÄÏÂÒ»¸öÏûÏ¢£»
´ÓÉÏÃæµÄ¹ý³Ì£¬ÎÒÃÇ¿ÉÒÔ¿´³ö£¬akka¿ò¼Ü±¾ÖÊÉÏҲʵÏÖÁ˱ÜÃâ×ÊÔ´¾ºÕùµÄÔÔò£¬ÒòΪÿ¸öactorÊǵ¥Ï̴߳¦ÀíËüµÄmailboxÖеÄÿ¸öÏûÏ¢µÄ£¬´Ó¶ø¾Í±ÜÃâÁ˲¢·¢³åÍ»¡£È»ºóÎÒÃÇ¿ÉÒÔ¿´µ½akka¿ò¼ÜÒ²ÊÇÏȳ־û¯Ê¼þÖ®ºó£¬ÔÙ¸üÐÂactorµÄ״̬µÄ¡£Õâ˵Ã÷£¬akka²ÉÓõÄÒ²½Ð±£Êصķ½Ê½£¬¼´±ØÐëÏÈÈ·±£Êý¾ÝÂ䵨£¬ÔÙ¸üÐÂÄڴ棬ÔÙ´¦ÀíÏÂÒ»¸öÏûÏ¢¡£ÕæÕýÀíÏëµÄin-memory¼Ü¹¹£¬Ó¦¸ÃÊÇ¿ÉÒÔºöÂԳ־û¯£¬µ±actor´¦ÀíÍêÒ»¸öÏûÏ¢ºó£¬Á¢¼´ÐÞ¸Ä×Ô¼ºµÄ״̬£¬È»ºóÁ¢¼´´¦ÀíÏÂÒ»¸öÏûÏ¢¡£È»ºóactor²úÉúµÄʼþµÄ³Ö¾Ã»¯£¬ÍêÈ«ÊÇÒì²½µÄ£»Ò²¾ÍÊDz»Óõȴý³Ö¾Ã»¯Ê¼þÍê³ÉºóÔÙ¸üÐÂactorµÄ״̬£¬È»ºó´¦ÀíÏÂÒ»¸öÏûÏ¢¡£
ÎÒÈÏΪ£¬ÊDz»ÊÇÒì²½³Ö¾Ã»¯²»ÖØÒª£¬ÒòΪ¼ÈÈ»´ó¼Ò¶¼ÒªÃæÁÙÒ»¸öÎÊÌ⣬¾ÍÊÇÒªÔÚå´»úºó£¬»Ö¸´actorµÄ״̬£¬Ädz־û¯Ê¼þÊDz»¿É±ÜÃâµÄ¡£ËùÒÔ£¬ÎÒÒ²ÊÇÈÏΪ£¬Ê¼þ²»±ØÒì²½³Ö¾Ã»¯£¬ÍêÈ«¿ÉÒÔÏñakka¿ò¼ÜÄÇÑù£¬²úÉúµÄʼþÏÈͬ²½³Ö¾Ã»¯£¬Íê³ÉºóÔÙ¸üÐÂactorµÄ״̬¼´¿É¡£ÕâÑù×ö£¬ÔÚå´»ú»Ö¸´actorµÄ״̬µ½×îÐÂʱ£¬¾ÍÖ»Òª¼òµ¥µÄ´Ódb»ñÈ¡ËùÓÐʼþ£¬È»ºóͨ¹ýESµÃµ½actor×îÐÂ״̬¼´¿É¡£È»ºóÈç¹ûµ£ÐÄʼþͬ²½³Ö¾Ã»¯ÓÐÐÔÄÜÆ¿¾±£¬ÄÇÕâ¸ö×ÜÊDz»¿É±ÜÃ⣬Õâ¿é²»×öºÃ£¬ÄÇÕû¸öϵͳµÄÐÔÄܾÍÉϲ»È¥£¬ËùÒÔÎÒÃÇ¿ÉÒÔ²ÉÓÃSSD£¬sharding,
Group Commit, NoSQLµÈ·½·¨£¬ÓÅ»¯³Ö¾Ã»¯µÄÐÔÄܼ´¿É¡£µ±È»£¬Èç¹û²ÉÓÃÒì²½³Ö¾Ã»¯Ê¼þµÄ·½Ê½£¬È·ÊµÄÜ´ó´óÌá¸ßactorµÄ´¦ÀíÐÔÄÜ¡£µ«ÊÇÒª×öµ½Õâµã£¬»¹ÐèÒªÓÐһЩǰÌáµÄ¡£±ÈÈçҪȷ±£Õû¸ö¼¯ÈºÖÐÒ»¸öactorÖ»ÓÐÒ»¸öʵÀý£¬²»ÄÜÓÐÁ½¸öÒ»ÑùµÄactorÔÚ¹¤×÷¡£ÒòΪÈç¹û³öÏÖÕâÖÖÇé¿ö£¬ÄÇÕâÁ½¸öÒ»ÑùµÄactor¾Í»áͬʱ²úÉúʼþ£¬µ¼ÖÂ×îºóʼþ³Ö¾Ã»¯µÄʱºò±Ø¶¨»á³öÏÖ²¢·¢³åÍ»£¨Ê¼þ°æ±¾ºÅÏàͬ£©µÄÎÊÌâ¡£µ«Òª±£Ö¤¼±ÈºÖÚÒ»¸öactorÖ»ÓÐÒ»¸öʵÀý£¬ÊǺÜÀ§Äѵģ¬ÒòΪÎÒÃÇ¿ÉÄܻᶯ̬Íù¼¯ÈºÖÐÔö¼Ó·þÎñÆ÷£¬´Ëʱ±Ø¶¨»áÓÐһЩactorÒªÇ¨ÒÆµ½Ð·þÎñÆ÷¡£Õâ¸öÇ¨ÒÆ¹ý³ÌÒ²ºÜ¸´ÔÓ£¬Ò»¸öactor´ÓÔÀ´µÄ·þÎñÆ÷Ç¨ÒÆµ½ÐµķþÎñÆ÷£¬Òâζ×ÅÒªÏÈÍ£Ö¹Ô·þÎñÆ÷µÄactorµÄ¹¤×÷¡£È»ºó»¹Òª°ÑactorÔÙзþÎñÆ÷ÉÏÆô¶¯£»È»ºóÔ·þÎñÆ÷ÉϵÄactorµÄmailboxÖеÄÏûÏ¢»¹Òª·¢¸øÐµÄactor£¬È»ºóºóÐø¿ÉÄÜ»¹ÔÚ·¢¸øÔactorµÄÏûϢҲҪת·¢µ½ÐµÄactor¡£È»ºóеÄactorÖØÆôÒ²ºÜ¸´ÔÓ£¬ÒòΪҪȷ±£Æô¶¯Ö®ºóµÄactorµÄ״̬һ¶¨ÊÇ×îÐµģ¬¶øÎÒÃÇÖªµÀÕâÖÖ´¿in-memoryģʽÏ£¬Ê¼þµÄ³Ö¾Ã»¯Ê±Òì²½µÄ£¬ËùÒÔ¿ÉÄÜ»¹ÓÐһЩʼþ»¹ÔÚÏûÏ¢¶ÓÁУ¬»¹Ã»±»³Ö¾Ã»¯¡£ËùÒÔÖØÆôactorʱ»¹Òª¼ì²éÏûÏ¢¶ÓÁÐÖÐÊÇ·ñ»¹ÓÐδÏû·ÑµÄʼþ¡£Èç¹û»¹ÓУ¬¾ÍÐèÒªµÈ´ý¡£·ñÔò£¬ÎÒÃǻָ´µÄactorµÄ״̬¾Í²»ÊÇ×îеģ¬ÕâÑù¾ÍÎÞ·¨±£Ö¤ÄÚ´æÊý¾ÝÊÇ×îеÄÕâ¸öÄ¿µÄ£¬ÕâÑùin-memoryÒ²¾ÍʧȥÁËÒâÒå¡£ÕâЩ¶¼ÊÇÂé·³µÄ¼¼ÊõÎÊÌâ¡£×ÜÖ®£¬ÒªÊµÏÖÕæÕýµÄin-memory¼Ü¹¹£¬Ã»ÄÇôÈÝÒס£µ±È»£¬Èç¹ûÄã˵Äã¿ÉÒÔÓÃÊý¾ÝÍø¸ñÖ®ÀàµÄ²úÆ·£¬ÎÞ·Ö²¼Ê½£¬ÄÇÒ²Ðí¿ÉÐУ¬²»¹ýÕâÊÇÁíÍâÒ»Öּܹ¹ÁË¡£
ÉÏÃæËµÁË£¬akka¿ò¼ÜµÄºËÐŤ×÷ÔÀí£¬ÒÔ¼°ÆäËûһЩ·½Ã棬±ÈÈçakka»áÈ·±£Ò»¸öactorʵÀýÔÚ¼¯ÈºÖÐÖ»ÓÐÒ»¸ö¡£ÕâµãÆäʵҲÊǺͱ¾ÎÄ˵µÄÒ»Ñù£¬Ò²ÊÇΪÁ˱ÜÃâ×ÊÔ´¾ºÕù£¬°üÀ¨ËüµÄmailboxÒ²ÊÇÒ»Ñù¡£Ö®Ç°ÎÒÉè¼ÆENodeʱ£¬Ã»Á˽â¹ýakka¿ò¼Ü£¬ºóÀ´ÎÒѧϰºó£¬·¢ÏÖºÍENodeµÄ˼ÏëÊÇÈç´Ë½Ó½ü£¬ºÇºÇ¡£±ÈÈ磺1£©¶¼ÊǼ¯ÈºÖÐÖ»ÓÐÒ»¸ö¾ÛºÏ¸ùʵÀý£»2£©¶¼¶Ôµ¥¸ö¾ÛºÏ¸ùµÄ²Ù×÷µÄCommand×öÅŶӴ¦Àí£»3£©¶¼²ÉÓÃESµÄ·½Ê½½øÐÐ״̬³Ö¾Ã»¯£»4£©¶¼ÊÇ»ùÓÚÏûÏ¢Çý¶¯µÄ¼Ü¹¹¡£ËäȻʵÏÖ·½Ê½ÓÐËùÇø±ð£¬µ«Ä¿µÄ¶¼ÊÇÏàͬµÄ¡£
С½á
±¾ÎÄ£¬´ÓCQRS+Event SourcingµÄ¼Ü¹¹³ö·¢£¬½áºÏʵÏÖ¸ßÐÔÄܵöҪעÒâµÄµã£¨±Ü¿ªÍøÂ翪Ïú£¨IO£©£¬±Ü¿ªº£Á¿Êý¾Ý£¬±Ü¿ª×ÊÔ´Õù¶á£©£¬·ÖÎöÁËÕâÖּܹ¹Ï£¬ÎÒËùÏëµ½µÄһЩ¿ÉÄܵÄÉè¼Æ¡£Õû¸ö¼Ü¹¹ÖУ¬Ò»¸öCommandÔÚ±»´¦Àíʱ£¬Ò»°ãÊÇÐèÒª×öÁ½´ÎIO£¬1£©³Ö¾Ã»¯Command£»2£©³Ö¾Ã»¯Ê¼þ£»µ±È»£¬ÕâÀïûÓÐËãÉÏÏûÏ¢µÄ·¢ËͺͽÓÊÕµÄIO¡£Õû¸ö¼Ü¹¹ÍêÈ«»ùÓÚÏûÏ¢Çý¶¯£¬ËùÒÔÓµÓÐÒ»¸öÎȶ¨¿ÉÀ©Õ¹¸ßÐÔÄܵķֲ¼Ê½ÏûÏ¢¶ÓÁÐÖмä¼þÊDZȲ»¿ÉÉٵģ¬EQueueÕýÊÇÔÚÏòÕâ¸öÄ¿±êŬÁ¦µÄÒ»¸ö³É¹û¡£Ä¿Ç°EQueueµÄTCPͨÐŲ㣬¿ÉÒÔ×öµ½·¢ËÍ100WÏûÏ¢£¬ÔÚһ̨i7
CPUµÄÆÕͨ»úÆ÷ÉÏ£¬Ö»Ðè3s£»ÓÐÐËȤµÄͬѧ¿ÉÒÔ¿´Ò»Ï¡£×îºó£¬ENode¿ò¼Ü¾ÍÊǰ´ÕÕ±¾ÎÄÖÐËù˵µÄÕâЩÉè¼ÆÀ´ÊµÏֵģ¬ÓÐÐËȤµÄÅóÓÑ»¶ÓÈ¥ÏÂÔØ²¢ºÍÎÒ½»Á÷Ŷ£¡²»ÔçÁË£¬¸Ã˯ÁË¡£
|