
±¾ÎÄÊÇÎÒÔÚÔĶÁO'ReillyÃâ·ÑµÄµç×ÓÊé
Software Architecture Patterns¹ý³ÌÖÐ×öµÄ±Ê¼Ç¡£
Ê×ÏÈÕâ±¾Êé·Ç³£Ð£¬2015Äê3ÔÂ30ºÅ¶©Õýºó·¢²¼¡£Æä´Î½«Ä¿Ç°Á÷Ðеļ¸Öּܹ¹Ïêϸ½øÐÐÁËÆÊÎöºÍ±È½Ï£¬³ýÁË´«Í³µÄN²ã¼Ü¹¹Í⣬ÆäËü¼Ü¹¹Ï൱µÄÇ°ÑØ¡£²¢ÇÒ£¬ÕâÆªÐ¡ÊéÁ¬´ø·âÃæ²Å55Ò³£¬¶ÌС¾«º·£¬ÖµµÃÒ»¶Á¡£Õâ±¾ÊéµÄ×÷ÕßÊÇ
Mark Richards£¬ÓÐ30¶àÄêÐÐÒµ¾Ñ飬19ÄêÈí¼þ¼¯³É£¬ÆóÒµ¼¶¼Ü¹¹µÄ¾Ñ飬´ó²¿·ÖÊÇJavaƽ̨£¬Ò²³ö°æÁ˶౾ÊéºÍÂÛÎÄ¡£
Èç¹ûÄãûÓÐʱ¼äÈ¥ÔĶÁÕâ±¾Ê飬ÄÇô²»·Á¿´Ò»Ï±¾ÆªÎÄÕ¡£ ÎÒÔڱʼÇÖн«ÊéÖеÄÖ÷Ҫ֪ʶµã¶¼¼Ç¼ÏÂÀ´¡£
²»ÏȽøÐÐÕýʽµÄ¼Ü¹¹Éè¼Æ¾ÍÖ±½Ó¿ª·¢¶ÔÓÚ³ÌÐòÔ±À´ËµÔÙÆÕͨ²»¹ýÁË¡£Ã»ÓÐÇåÎúºÍºÜºÃµÄ¼Ü¹¹Éè¼Æ£¬´ó²¿·Ö³ÌÐòÔ±ºÍ¼Ü¹¹Ê¦Êµ¼ÊÉÏ»á²ÉÓô«Í³µÄ·Ö²ãµÄ¼Ü¹¹Ä£Ê½£¬
×ÔÈ»µØ½«´úÂëÄ£¿é·Ö¸ô³É¼¸¸ö°ü(package)¡£²»ÐÒµØÊÇ£¬ÕâÖÖ×ö·¨¾³£µ¼ÖÂδÄܺúÃ×éÖ¯´úÂëÄ£¿é£¬ÕâЩģ¿éȱ·¦ÇåÎúµÄ½ÇÉ«£¬ÔðÈÎÒÔ¼°Ï໥¹ØÏµ¡£Õâ¾³£±»³ÉΪ´óÄàÇò·´Ä£Ê½¡£
ûÓнøÐмܹ¹Éè¼ÆµÄÓ¦ÓóÌÐòͨ³£ÊǽôñîºÏµÄ£¬²£Á§ÐÄ£¬ÄÑÒԸı䣬ûÓÐÍ·Ð÷¡£Èç¹û²»Àí½âÓ¦Óõĸ÷¸ö×é¼þµÄÄÚ²¿¹¤×÷·½Ê½µÄ»°ºÜÄÑ¿´ÇåËüµÄ¼Ü¹¹ÌØÕ÷¡£¹ØÓÚ²¿ÊðºÍά»¤µÄÎÊÌâ¶¼ºÜÄѻش𣺼ܹ¹µÄ¹æÄ£ÈçºÎ£¿³ÌÐòµÄÐÔÄÜÈçºÎ£¿³ÌÐòÈÝÒ×ÐÞ¸ÄÂ𣿳ÌÐòµÄ²¿ÊðÄ£ÐÍÊÇÔõôÑù£¿³ÌÐòµÄÏìÓ¦ÈçºÎ£¿
¼Ü¹¹Ä£Ê½¿ÉÒÔ°ïÖúÄ㶨Òå³ÌÐòµÄ»ù±¾ÌØÕ÷ºÍÐÐΪ¡£ÀýÈçһЩ¼Ü¹¹Ä£Ê½ºÜ×ÔÈ»ÈóÌÐò³ÉΪ´ó¹æÄ£(scalable)µÄ³ÌÐò¡£ÓÐЩģʽÈóÌÐò±äµÃÁéÇÉÃô½Ý(agile)¡£ÖªµÀÕâЩ¼Ü¹¹µÄÌØÕ÷£¬ÓŵãºÍȱµã£¬Äã¾Í¿ÉÒÔ¸ù¾ÝÄãÌØ¶¨µÄÒµÎñÐèÇóºÍÄ¿±ê´ÓÈݵÄÑ¡ÔñÒ»Öּܹ¹Ä£Ê½¡£
×÷Ϊһλ¼Ü¹¹Ê¦£¬Äã×Ü»áΪ×Ô¼º¼Ü¹¹Ñ¡Ôñ×ö½âÊÍ£¬ÓÈÆäÄãÑ¡ÔñÒ»¸öÌØ±ðµÄ¼Ü¹¹Ä£Ê½µÄʱºò¡£O'ReillyµÄÕâ±¾ÊéÌṩÁ˳ä×ãµÄÐÅÏ¢À´ÎªÄãµÄ¼Ü¹¹Ñ¡ÔñÌṩ֤Ã÷¡£
·Ö²ã¼Ü¹¹ (Layered Architecture)
ËüÊÇ×îͨÓõļܹ¹£¬Ò²±»½Ð×öN²ã¼Ü¹¹Ä£Ê½(n-tier architecture pattern)¡£ÕâÒ²ÊÇJava
EEÓ¦Óþ³£²ÉÓõıê׼ģʽ¡£»ù±¾ÉÏÊǸö³ÌÐòÔ±¶¼ÖªµÀËü¡£ÕâÖּܹ¹Ä£Ê½·Ç³£Êʺϴ«Í³µÄITͨÐźÍ×éÖ¯½á¹¹£¬ºÜ×ÔÈ»µØ³ÉΪ´ó²¿·ÖÓ¦ÓõĵÚÒ»¼Ü¹¹Ñ¡Ôñ¡£
ģʽÃèÊö
ÔÚ·Ö²ã¼Ü¹¹ÖеÄ×é¼þ±»»®·Ö³É¼¸¸ö²ã£¬Ã¿¸ö²ã´ú±íÓ¦ÓõÄÒ»¸ö¹¦ÄÜ¡£·Ö²ã¼Ü¹¹±¾ÉíûÓй涨Ҫ·Ö³É¶àÉٲ㣬´ó²¿·ÖµÄÓ¦Óûá·Ö³É±íÏֲ㣬ҵÎñ²ã£¬³Ö¾Ã²ãºÍÊý¾Ý¿â²ã¡£Ð¡µÄÓ¦ÓÃÓÐʱºò»á½«ÒµÎñ²ãºÍ³Ö¾Ã²ãºÏÔÚÒ»Æð£¬¸ü´ó¹æÄ£µÄÓ¦ÓÿÉÄܻỮ·Ö¸ü¶àµÄ²ã£¬±ÈÈçµ÷ÓÃÍⲿ·þÎñµÄ²ã¡£
ÿһ²ã¶¼ÓÐÌØ¶¨µÄ½ÇÉ«ºÍÖ°ÄÜ¡£

·Ö²ã¼Ü¹¹µÄÒ»¸öÌØÐÔ¾ÍÊǹØ×¢·ÖÀë(separation of concerns)¡£ÔÚ²ãÖеÄ×é¼þÖ»¸ºÔð±¾²ãµÄÂß¼¡£×é¼þµÄ»®·ÖºÜÈÝÒ×ÈÃËüÃÇʵÏÖ×Ô¼ºµÄ½ÇÉ«ºÍÖ°Ôð£¬Ò²±È½ÏÈÝÒ׵ؿª·¢£¬²âÊÔ¹ÜÀíºÍά»¤¡£
¹Ø¼ü¸ÅÄî
×¢Òâÿһ²ã¶¼ÊÇ·â±ÕµÄ¡£ÕâÒâζ×ÅRequest±ØÐë¾¹ýÿһ²ã²ÅÄܵ½´ï×îµ×ÏÂÒ»²ã¡£

Ϊʲô²»ÔÊÐíչʾ²ãÖ±½Ó·ÃÎÊÊý¾Ý¿â²ãÄØ£¬ÕâÑù²»ÊǸü¿ìÂð£¿Õâ¾ÍÊÇ·Ö²ã¼Ü¹¹µÄÁíÒ»¸öÌØÕ÷£º²ã¸ôÀë(layers
of isolation)¡£
²ã¸ôÀëµÄ¸ÅÄîÒâζ×ÅÄã¶ÔÈκÎÒ»²ãµÄ¸Ä±ä¶¼²»»áÓ°ÏìÆäËü²ã¡£ÕâºÜºÃÀí½â¡£
²ã¸ôÀëÒ²Òâζ×ÅÒ»¸ö²ãµÄ×é¼þ²¢²»»áÁ˽âÆäËü²ãµÄʵÏÖ£¬»òÕßÖªµÀºÜÉÙ¡£ ±ÈÈçÒµÎñ²ã²»ÐèÖªµÀÄã³Ö¾Ã²ãÊÇÓÉhibernate»¹ÊÇmybatisʵÏֵġ£
·Ö²ã¼Ü¹¹Ò²ºÜÈÝÒ×Ôö¼ÓеIJ㡣 ±ÈÈçÄãÏ뽫һЩͨÓõķþÎñÖØ¹¹³ÉÒ»¸ö·þÎñ²ã£¬±ÈÈçͨÓÃͼƬ´¦Àí£¬Ô¶³ÌÕË»§Éó¼ÆµÈ£¬¿ÉÒÔÔÚÒµÎñ²ãÏÂÔö¼ÓÒ»¸ö·þÎñ²ã¡£Ëü²»»á¶Ôչʾ²ãÔì³ÉÓ°Ï죬Ҳ²»»á¸Ä±ä³Ö¾Ã²ãµÄ´úÂë¡£
ÉÏÃæµÄÕâ¸öÀý×Ó´øÀ´Ò»¸öÎÊÌ⣬ÒòΪÿһ²ã¶ªÊ§·â±ÕµÄ£¬ÒµÎñ²ã²»µÃ²»Í¨¹ý·þÎñ²ã·ÃÎʳ־ò㣬ÕâûÓÐÌìÀí°¡¡£
ËùÒÔÓÐʱºòÄã»á´´½¨Ò»¸ö¿ª·ÅµÄ²ã¡£ÕâÒâζ×ÅÉÏÒ»²ã¿ÉÒÔÈÆ¹ýÕâÒ»²ãÖ±½Ó·ÃÎÊÏÂÒ»²ã¡£

¼Ü¹¹Àý×Ó
ÎÒÃÇ¿´Ò»ÏÂÌÔ±¦Ç°¼¸ÄêµÄ¼Ü¹¹µÄÀý×Ó¡£

ÕâÊÇÒ»¸ö±ê×¼µÄ·Ö²ãµÄ¼Ü¹¹¡£Ã¿Ò»²ãÖÐÓÖ¿ÉÒÔÏêϸµÄ·Ö³É¸üϸµÄ²ã£¬±ÈÈç·þÎñ²ã¡£

Χ×Å×ÅÕâ¸öÖ÷¼Ü¹¹»¹ÓÐһЩÍâΧµÄ²úÆ·¡£±ÈÈç¼à¿ØºÍÉ󼯡£
¼Ü¹¹¿¼Á¿
·Ö²ã¼Ü¹¹ÊÇÒ»¸ö¿É¿¿µÄͨÓõļܹ¹£¬¶ÔºÜ¶àÓ¦ÓÃÀ´Ëµ£¬Èç¹ûÄ㲻ȷ¶¨ÄÄÖּܹ¹ÊʺÏÄãµÄÓ¦Ó㬿ÉÒÔÓÃËü×÷Ϊһ¸ö³õʼ¼Ü¹¹¡£
µÚÒ»¸öҪעÒâµÄÊÇÎÛË®³Ø·´Ä£Ê½(architecture sinkhole anti-pattern).Õâ¸ö·´Ä£Ê½ÊÇÕâÑùµÄ£¬ÇëÇóÁ÷¼òµ¥µÄ´©¹ý¼¸¸ö²ã£¬Ã¿²ãÀïÃæ»ù±¾Ã»ÓÐ×öÈκÎÒµÎñÂß¼£¬»òÕß×öÁ˺ÜÉÙµÄÒµÎñÂß¼¡£±ÈÈçһЩJavaEEÀý×Ó£¬ÒµÎñÂß¼²ãÖ»ÊǼòµ¥µÄµ÷ÓÃÁ˳־òãµÄ½Ó¿Ú£¬±¾ÉíûÓÐʲôҵÎñÂß¼¡£
ÿһ²ã»ò¶à»òÉÙ¶¼ÓпÉÄÜÓöµ½ÕâÑùµÄ³¡¾°¡£¹Ø¼üÊÇ·ÖÎöÕâÑùµÄÇëÇóµÄ°Ù·Ö±ÈÊǶàÉÙ¡£80-20ÔÔò¿ÉÒÔ°ïÖúÄã¾ö¶¨ÊÇ·ñÕýÔÚÓöµ½ÎÛË®³Ø·´Ä£Ê½¡£Èç¹ûÄãµÄÇëÇ󳬹ý20%£¬ÄãÓ¦¸Ã¿¼ÂÇÈÃһЩ²ã±ä³É¿ª·ÅµÄ¡£
ÁíÒ»¸öÐèÒª¿¼ÂǵÄÊÇ·Ö²ã¼Ü¹¹¿ÉÄÜ»áÈÃÄãµÄÓ¦ÓñäµÃÅӴ󣬼´Ê¹ÄãµÄչʾ²ãºÍÒµÎñ²ã¿ÉÒÔ¶ÀÁ¢·¢²¼£¨±ÈÈçչʾ²ãʹÓõ¥Ò³¼¼Êõ¿ò¼ÜAngularJS,
EmberJS£©¡£
ËüµÄÈ·»á´øÀ´Ò»Ð©Ç±ÔÚµÄÎÊÌ⣬±ÈÈç·Ö²¼Ä£Ê½¸´ÔÓ£¬½¡×³ÐÔϽµ£¬¿É¿¿ÐÔ£¬ÐÔÄܺ͹æÄ£µÈ¡£
ģʽ·ÖÎö
×ÜÌåÁé»îÐÔ£º µÍ
·¢²¼Ò×ÓÃÐÔ£º µÍ
¿É²âÊÔÐÔ£º ¸ß
ÐÔÄÜ£º µÍ
¹æÄ£À©Õ¹ÐÔ£º µÍ
¿ª·¢ÈÝÒ×¶È£º ¸ß
ʼþÇý¶¯¼Ü¹¹ (Event-Driven Architecture)
ʼþÇý¶¯¼Ü¹¹ÊÇÒ»¸öÁ÷Ðеķֲ¼Ê½Òì²½¼Ü¹¹Ä£Ê½£¬¿ÉÒÔÓÃÀ´Éè¼Æ¹æÄ£ºÜ´óµÄÓ¦ÓóÌÐò¡£»ùÓÚÕâÖּܹ¹Ä£Ê½Ó¦Óÿɴó¿ÉС¡£ËüÓɸ߶ȽâñîµÄ£¬µ¥Ò»Ä¿µÄµÄʼþ´¦Àí×é¼þ×é³É£¬¿ÉÒÔÒì²½µØ½ÓÊպʹ¦Àíʼþ¡£
Ëü°üÀ¨Á½¸öÖ÷ÒªµÄÍØÆË½á¹¹£ºmediator ºÍ broker¡£MediatorÍØÆË½á¹¹ÐèÒªÄãÔÚÒ»¸öʼþͨ¹ýmediatorʱ¾«Ðİ²Åźü¸¸ö²½Ö裬¶øbrokerÍØÆË½á¹¹ÎÞÐèmediator£¬¶øÊÇÓÉÄã´®ÁªÆð¼¸¸öʼþ¡£ÕâÁ½ÖÖÍØÆË¼Ü¹¹µÄÌØÕ÷ºÍʵÏÖÓкܴóµÄ²»Í¬£¬ËùÒÔÄãÐèÒªÖªµÀÄÄÒ»¸öÊʺÏÄã¡£
MediatorÍØÆË½á¹¹
MediatorÍØÆË½á¹¹ÊʺÏÓжà¸ö²½ÖèµÄʼþ£¬ÐèÒª°²ÅÅ´¦Àí²ã´Î¡£
ÀýÈ繺ÂòÒ»Ö»¹ÉƱ£¬Ê×ÏÈ»áУÑéÕâ¸ö½»Ò×£¬Ð£Ñé¹ÉƱ½»Ò×ÊÇ·ñ·ûºÏ¸÷Öֹ涨£¬½«Ëü½»¸øÒ»¸ö¾¼ÍÈË£¬¼ÆËãÓ¶½ð£¬×îºóÈ·ÈϽ»Òס£ËùÓÐÕâЩ¶¼°²Åźø÷¸ö²½ÖèµÄ˳Ðò£¬¾ö¶¨ËüÃÇÊÇ·ñ´®Ðл¹ÊDz¢ÐС£
Ëü°üÀ¨Ëĸö×é¼þ£ºevent queues, an event mediator, event channels
ºÍ event processors¡£

ʼþÁ÷ÊÇÕâÑù¿ªÊ¼µÄ£º ¿Í»§¶Ë·¢ËÍÒ»¸öʼþµ½Ê¼þ¶ÓÁÐ(event queues)ÖУ¬ËüÓÃÀ´½«Ê¼þ´«Ë͸øevent
mediator¡£Event mediatorÊÕµ½³õʼµÄʼþºó£¬»á·¢ËͶîÍâµÄһЩÒ첽ʼþ¸øevent
channelsÀ´Ö´Ðд¦ÀíµÄÿ¸ö²½Öè¡£Event processors¼àÌýevent channels,½ÓÊÕʼþ²¢´¦ÀíһЩҵÎñÂß¼¡£
ÔÚʼþÇý¶¯¼Ü¹¹ÖÐÓÐÊ®¼¸¸öÉõÖÁ¼¸°Ù¸öʼþ¶ÓÁж¼ºÜÕý³£¡£Ä£Ê½±¾ÉíûÓÐÏÞ¶¨Ê¼þ¶ÓÁеÄʵÏÖ·½Ê½¡£Ëü¿ÉÄÜÊÇÒ»¸öÏûÏ¢¶ÓÁУ¬Ò»¸öweb
service»òÕ߯äËü¡£
ÕâÀïÓÐÁ½ÖÖʼþ£º³õʼʼþºÍ´¦Àíʼþ¡£Mediator»á½«³õʼʼþ±àÅųɴ¦Àíʼþ¡£ËüûÓоßÌåµÄÒµÎñÂß¼£¬Ö»ÊÇÒ»¸öе÷Õߣ¬¸ºÔ𽫳õʼʼþת»¯³ÉÒ»¸ö»òÕß¶à¸ö´¦Àíʼþ¡£
event channels ¼È¿ÉÒÔÊÇÏûÏ¢¶ÓÁУ¬Ò²¿ÉÒÔÊÇÏûÏ¢topic£¬´ó²¿·ÖÊÇÏûÏ¢topic£¬ÕâÑù¿ÉÒÔÓɶà¸öÏûÏ¢´¦ÀíÆ÷(event
processor)´¦Àíͬһ¸öÏûÏ¢¡£
ÏûÏ¢´¦ÀíÆ÷°üº¬Êµ¼ÊµÄÒµÎñÂß¼¡£Ã¿¸öÏûÏ¢´¦ÀíÆ÷¶¼ÊÇ×Ô°üº¬µÄ£¬¶ÀÁ¢µÄ£¬¸ß¶È½âñîµÄ£¬Ö´Ðе¥Ò»µÄÈÎÎñ¡£
ÕâÖÖģʽ¿ÉÄÜÓÐһЩ±äÖÖ¡£×÷Ϊ¼Ü¹¹Ê¦£¬ÄãÓ¦¸ÃÀí½âÿ¸öʵÏÖµÄϸ½Ú£¬È·±£ÕâÖÖ½â¾ö·½°¸ÊʺÏÄãµÄÐèÇó¡£
ÓÐһЩ¿ªÔ´µÄ¿ò¼ÜʵÏÖÁËÕâÖּܹ¹£¬ÈçSpring Integration, Apache Camel,
»òÕß Mule ESB¡£
BrokerÍØÆË¼Ü¹¹
Broker²»Í¬ÓÚÉÏÃæµÄ½á¹¹£¬ËüûÓÐÖÐÐĵÄMediator¡£ËùÓеÄʼþ´®ÁªÆðÀ´Í¨¹ýÒ»¸öÇáÁ¿¼¶µÄÏûÏ¢brokerÈçRabbitMQ£¬ActiveMQ£¬HornetQµÈ¡£Èç¹ûÄãµÄÏûÏ¢±È½Ï¼òµ¥£¬²»ÐèÒªÖØÐ±àÅÅ£¬¾Í¿ÉÒÔʹÓÃÕâÖֽṹ¡£

ÈçͼËùʾ£¬Ëü°üº¬Á½¸ö×é¼þbrokerºÍ event processor¡£
brokerÖеÄevent channel¿ÉÒÔÊÇÏûÏ¢¶ÓÁУ¬ÏûÏ¢topic»òÕßËüÃǵĸ´ºÏÐÎʽ¡£
ÿ¸öevent processor¸ºÔð´¦Àíʼþ£¬·¢²¼ÐµÄʼþ¡£
¼Ü¹¹Àý×Ó

ÔÚÐÂÀË΢²©µÄÔçÆÚ¼Ü¹¹ÖУ¬Î¢²©·¢²¼Ê¹ÓÃͬ²½ÍÆÄ£Ê½£¬Óû§·¢±í΢²©ºóϵͳ»áÁ¢¼´½«ÕâÌõ΢²©²åÈëµ½Êý¾Ý¿âËùÓзÛË¿µÄ¶©ÔÄÁбíÖУ¬µ±Óû§Á¿±È½Ï´óʱ£¬ÌرðÊÇÃ÷ÐÇÓû§·¢²¼Î¢²©Ê±£¬»áÒýÆð´óÁ¿µÄÊý¾Ý¿âд²Ù×÷£¬³¬³öÊý¾Ý¿â¸ºÔØ£¬ÏµÍ³ÐÔÄܼ±¾çϽµ£¬Óû§ÏìÓ¦ÑӳټӾ硣ºóÀ´ÐÂÀË΢²©¸ÄÓÃÒì²½ÍÆÀ½áºÏµÄģʽ£¬Óû§·¢±í΢²©ºóϵͳ½«Î¢²©Ð´ÈëÏûÏ¢¶ÓÁкóÁ¢¼´·µ»Ø£¬Óû§ÏìӦѸËÙ£¬ÏûÏ¢¶ÓÁÐÏû·ÑÕßÈÎÎñ½«Î¢²©ÍÆË͸øËùÓе±Ç°ÔÚÏß·ÛË¿µÄ¶©ÔÄÁбíÖУ¬·ÇÔÚÏßÓû§µÇ¼ºóÔÙ¸ù¾Ý¹Ø×¢ÁбíÀȡ΢²©¶©ÔÄÁÐ±í¡£
¼Ü¹¹¿¼Á¿
ʼþÇý¶¯¼Ü¹¹Ä£Ê½ÊµÏÖÆðÀ´Ïà¶Ô¸´ÔÓ£¬Ö÷ÒªÊÇÓÉÓÚËüµÄÒì²½ºÍ·Ö²¼Ê½ÌØÐÔ¡£Õâ¿ÉÄÜ»á´øÀ´Ò»Ð©·Ö²¼Ê½µÄÎÊÌ⣬±ÈÈçÔ¶³Ì´¦ÀíµÄ¿ÉÓÃÐÔ£¬È±·¦ÏìÓ¦£¬brokerÖØÁ¬µÈÎÊÌâ¡£
Ò»¸ö¿¼ÂÇÊÇÕâÖÖģʽ¶ÔÓÚµ¥Ò»µÄÂ߼ȱ·¦Ô×ÓÊÂÎñ¡£ËùÒÔÄãÐèÒª½«Ô×ÓÊÂÎñ½»¸øÒ»¸öʼþ´¦ÀíÆ÷Ö´ÐУ¬¿çʼþ´¦ÀíÆ÷µÄÔ×ÓÊÂÎñÊǺÜÀ§Äѵġ£
×îÀ§ÄѵÄÉè¼ÆÖ®Ò»ÊÇʼþ´¦ÀíÆ÷µÄ´´½¨£¬Î¬»¤ºÍ¹ÜÀí¡£Ê¼þͨ³£ÓÐÌØÊâµÄÔ¼¶¨£¨Êý¾ÝÖµºÍ¸ñʽ£©¡£
ģʽ·ÖÎö
×ÜÌåÁé»îÐÔ£º ¸ß
·¢²¼Ò×ÓÃÐÔ£º ¸ß
¿É²âÊÔÐÔ£º µÍ
ÐÔÄÜ£º ¸ß
¹æÄ£À©Õ¹ÐÔ£º ¸ß
¿ª·¢ÈÝÒ×¶È£º µÍ
΢Äں˼ܹ¹ (Microkernel Architecture)
΢Äں˼ܹ¹Ä£Ê½Í¨³£ÓÖ±»³ÉΪ²å¼þ¼Ü¹¹Ä£Ê½£¬¿ÉÒÔÓÃÀ´ÊµÏÖ»ùÓÚ²úÆ·µÄÓ¦ÓÃ, ±ÈÈçEclipse£¬ÔÚ΢Äں˵Ļù´¡ÉÏÌí¼ÓһЩ²å¼þ£¬¾Í¿ÉÒÔÌṩ²»Í¬µÄ²úÆ·£¬ÈçC++,
JavaµÈ¡£

ģʽÃèÊö
΢Äں˰üº¬Á½¸ö×é¼þ£º core system ºÍ plug-in modules¡£Ó¦ÓÃÂß¼±»·Ö¸ô³ÉºËÐÄϵͳºÍ²å¼þÄ£¿é£¬¿ÉÒÔÌṩ¿ÉÀ©Õ¹µÄ£¬Áé»îµÄ£¬ÌØÐÔ¸ôÀëµÄ¹¦ÄÜ¡£

ģʽÀý×Ó
Eclipse IDEÊǵ±Ö®ÎÞÀ¢µÄ΢Äں˵ľø¼ÑÀý×ÓÖ®Ò»¡£
¼Ü¹¹¿¼Á¿
΢Äں˵ļܹ¹Ä£Ê½¿ÉÒÔǶÈëµ½ÆäËüµÄ¼Ü¹¹Ä£Ê½Ö®ÖС£Î¢Äں˼ܹ¹Í¨¹ý²å¼þ»¹¿ÉÒÔÌṩÖð²½ÑÝ»¯µÄ¹¦ÄܺÍÔöÁ¿¿ª·¢¡£ËùÒÔÈç¹ûÄãÒª¿ª·¢»ùÓÚ²úÆ·µÄÓ¦Óã¬Î¢ÄÚºËÊDz»¶þÑ¡Ôñ¡£
ģʽ·ÖÎö
×ÜÌåÁé»îÐÔ£º ¸ß
·¢²¼Ò×ÓÃÐÔ£º ¸ß
¿É²âÊÔÐÔ£º ¸ß
ÐÔÄÜ£º ¸ß
¹æÄ£À©Õ¹ÐÔ£º µÍ
¿ª·¢ÈÝÒ×¶È£º µÍ
΢·þÎñ¼Ü¹¹
×÷Ϊµ¥Ò»ÕûÌåµÄ³ÌÐòºÍÃæÏò·þÎñ¼Ü¹¹µÄÌæ´úÕߣ¬ ΢·þÎñ¼Ü¹¹Ä£Ê½ÔÚ¹¤Òµ½çºÜ¿ìÓ®µÃÁ˵ØÎ»¡£ÕâÖÖģʽ»¹ÔÚ½ø»¯Ö®ÖУ¬ÔÚÒµ½ç¶ÔÓÚËüµÄÌØÐÔºÍʵÏÖ»¹ÓÐЩÀ§»ó¡£OreillyµÄСÊéÌṩÁËÕâÖÖģʽ¹Ø¼üµÄ¸ÅÄîºÍ»ù´¡ÖªÊ¶£¬ÓÃÀ´ÅжÏÕâÖּܹ¹ÊÇ·ñÊʺÏÄãµÄÓ¦Óá£
ģʽÃèÊö
²»¹ÜÄãʹÓúÎÖÖʵÏÖ·ç¸ñºÍÍØÆË£¬Óм¸¸öͨÓõĺËÐĸÅÄîÓ¦ÓÃÔÚÕâÖּܹ¹Ä£Ê½ÉÏ¡£Ê×ÏÈÊÇ·Ö¸ô·¢²¼µ¥Ôª£¨separately
deployed units£©¡£
ÈçͼËùʾ£¬Ã¿Ò»¸ö΢Äں˵Ä×é¼þ¶¼±»·Ö¸ô³ÉÒ»¸ö¶ÀÁ¢µÄµ¥Ôª¡£
΢·þÎñ°üº¬·þÎñ×é¼þ£¨service component£©¡£²»Òª¿¼ÂÇ΢Äں˵ĵ¥¸ö·þÎñ£¬¶øÊÇ×îºÃ¿¼ÂÇ·þÎñ×é¼þ£¬´ÓÁ£¶ÈÉϽ²Ëü¿ÉÒÔÊǵ¥Ò»µÄÄ£¿é»òÕßÒ»¸öÒ»¸ö´óµÄÓ¦ÓóÌÐò£¬´ú±íµ¥Ò»¹¦ÄÜ£¨ÌṩÌìÆøÔ¤±¨»òÕßͼƬ´æ´¢£©¡£
ÕýÈ·Éè¼Æ·þÎñ×é¼þµÄÁ£¶ÈÊÇÒ»¸öºÜ´óµÄÌôÕ½¡£
ÁíÒ»¸ö¹Ø¼ü¸ÅÄîÊÇ΢ÄÚºËÊÇ·Ö²¼Ê½µÄ¡£ÕâÒâζ×Å·þÎñ×é¼þ¿ÉÄÜÊÇÔ¶³Ì·½·¨£¨Í¨¹ýJMS, AMQP, REST,
SOAP, RMI......µÈµÈ£©¡£·Ö²¼Ê½Òâζ×ÅÕâÖÖģʽ¿ÉÒÔ½¨Á¢´ó¹æÄ£µÄÓ¦Óá£
ÁíÒ»¸öÖµµÃÐ˷ܵÄÌØÐÔÊÇËü¿ÉÒÔ´ÓÆäËüÓÐÎÊÌâµÄ¼Ü¹¹Ä£Ê½ÖÐÑÝ»¯³öÀ´£¬¶ø²»ÊÇÖ±½Ó´´½¨³öÀ´µÈ´ýÎÊÌâ·¢Éú¡£µ±ÄãÓöµ½Ò»Ð©ÎÞ·¨½â¾öµÄÎÊÌâ£¬ÌØ±ðÊÇ»¥ÁªÍøÆóÒµµÄ¹æÄ£À©´óʱ£¬ÊǺܺõÄÒýÈë΢·þÎñ¼Ü¹¹µÄʱ»ú¡£
Ò»°ã»á´ÓÁ½¸öģʽÖÐÑÝ»¯¡£
Ò»ÖÖ¾ÍÊÇÒ»¿ªÊ¼¾ÍÊÇÕûÌåµÄÓ¦Óã¬ËùÓеÄÄ£¿é¶¼ÊǽôñîºÏµÄ¡£ÁíÍâÒ»ÖÖÊÇÃæÏò·þÎñµÄ¼Ü¹¹Ä£Ê½(SOA£¬service-oriented
architecture pattern)¡£SOA²»ÊDz»ºÃ£¬µ«ÊÇÌ«°º¹óÁË£¬²»ºÃÀí½âºÍʵÏÖ¡£
Ä£Ê½ÍØÆË
ÓкܶàʵÏÖ΢·þÎñµÄ·½Ê½¡£×îͨÓÃ×îÁ÷ÐеÄÈý¸ö·½Ê½ÊÇ: API REST-based, applicaiton
REST-based ºÍ ÖÐÐÄ»¯µÄÏûÏ¢¡£
API REST-based ÊʺÏÍøÕ¾ÌṩС¹æÄ£µÄ£¬×Ô°üº¬µÄ·þÎñ¡£ºÜ¶à»¥ÁªÍøÍøÕ¾¶¼ÌṩÕâÑùµÄ·þÎñ£¬±ÈÈçOAuth2·þÎñ¡£

application REST-based²»Í¬ÓÚÉÏÃæµÄ¼Ü¹¹£¬¿Í»§¶Ë¿´µ½µÄÊÇweb½çÃæ»òÕ߸»¿Í»§¶Ë³ÌÐò£¬¶ø²»Êǵ÷ÓÃAPI¡£UI²ã¶ÀÁ¢·¢²¼£¬¿ÉÒÔ·ÃÎÊ·þÎñ×é¼þ¡£

ÖÐÐÄÏûϢģʽ£¬ËüÀàËÆÇ°ÃæµÄģʽ£¬µ«ÊÇʹÓÃÒ»¸öÇáÁ¿¼¶µÄÏûÏ¢brokerÈ¡´úRESTfulµÄ·þÎñµ÷Óá£Õâ¸öÇáÁ¿¼¶µÄbroker²»»áÖ´ÐзþÎñµÄ±àÅÅ£¬´«ÊäºÍ·ÓÉ£¬ÕâºÍSOA²»Í¬£¬²»Òª°ÑËü¿´×÷SOAµÄ¼ò»¯°æ¡£

¼Ü¹¹¿¼Á¿
΢·þÎñ¼Ü¹¹½â¾öÁËÎ޼ܹ¹µÄÕûÌå±àÂëµÄÓ¦ÓõÄÎÊÌâÒÔ¼°SOAµÄÎÊÌ⡣ͬʱËü»¹¿ÉÒÔÌṩʵʱµÄ²úÆ··¢²¼¡£
ËüÊÇÒ»¸ö·Ö²¼Ê½¼Ü¹¹£¬Ò²»áÓÐÉÏÃæ·Ö²¼Ê½µÄÎÊÌâ¡£
ģʽ·ÖÎö
×ÜÌåÁé»îÐÔ£º ¸ß
·¢²¼Ò×ÓÃÐÔ£º ¸ß
¿É²âÊÔÐÔ£º ¸ß
ÐÔÄÜ£º µÍ
¹æÄ£À©Õ¹ÐÔ£º ¸ß
¿ª·¢ÈÝÒ×¶È£º ¸ß
»ùÓÚ¿Õ¼äµÄ¼Ü¹¹ (Space-Based Architecture)
»ùÓÚ¿Õ¼äµÄ¼Ü¹¹ÓÐʱºòÒ²±»³ÉΪ»ùÓÚÔÆµÄ¼Ü¹¹¡£
´ó²¿·ÖµÄ»ùÓÚwebµÄÓ¦ÓõÄÒµÎñÁ÷¶¼ÊÇÒ»ÑùµÄ¡£ ¿Í»§¶ËµÄÇëÇó·¢Ë͸øweb·þÎñÆ÷£¬È»ºóÊÇÓ¦Ó÷þÎñÆ÷£¬×îºóÊÇÊý¾Ý¿â·þÎñÆ÷¡£¶ÔÓÚÓû§ºÜСʱ²»»áÓÐÎÊÌ⣬µ«ÊǸºÔØÔö´óʱ¾Í»áÓöµ½Æ¿¾±£¨ÏëÏëÇÀ»ð³µÆ±£©¡£Ê×ÏÈÊÇweb·þÎñÆ÷³Å²»×¡£¬web·þÎñÆ÷ÄܳÅסӦÓ÷þÎñÆ÷ÓÖ²»ÐУ¬È»ºóÊÇÊý¾Ý¿â·þÎñÆ÷¡£Í¨³£½â¾ö·½°¸ÊÇÔö¼Óweb·þÎñÆ÷£¬±ãÒË£¬¼òµ¥£¬µ«ºÜ¶àÇé¿öϸºÔػᴫµÝ¸øÓ¦Ó÷þÎñÆ÷£¬È»ºó´«µÝ¸øÊý¾Ý¿â·þÎñÆ÷¡£ÓÐʱºòÔö¼ÓÊý¾Ý¿â·þÎñÆ÷ҲûÓа취£¬ÒòΪÊý¾Ý¿âÒ²ÓÐËø£¬ÓÐÊÂÎñµÄÏÞÖÆ¡£
»ùÓÚ¿Õ¼äµÄ¼Ü¹¹ÓÃÀ´½â¾ö¹æÄ£ºÍ²¢·¢µÄÎÊÌâ¡£
ģʽÃèÊö
»ùÓÚ¿Õ¼äµÄ¼Ü¹¹×îС»¯ÏÞÖÆÓ¦ÓùæÄ£µÄÓ°Ïì¡£Õâ¸öģʽÀ´×ÔÓÚtuple space£¬ ·Ö²¼Ê½¹²ÏíÄÚ´æÏë·¨¡£ÒªÏë´ó¹æÄ££¬¾ÍÒªÒÆ³ýÖÐÐÄÊý¾Ý¿âµÄÏÞÖÆ£¬Ê¹Óÿɸ´ÖƵÄÄÚ´æÍø¸ñ¡£Ó¦ÓÃÊý¾Ý±£´æÔÚËùÓлµÄ´¦Àíµ¥ÔªµÄÄÚ´æÖУ¬´¦Àíµ¥Ôª¸ù¾ÝÓ¦ÓùæÄ£¿ÉÒÔ¼ÓÈëºÍÒÆ³ý¡£ÒòΪûÓÐÖÐÐÄÊý¾Ý¿â£¬ËùÒÔÊý¾Ý¿âµÄÆ¿¾±¿ÉÒÔ½â¾ö¡£
ÕâÖÖģʽÓÐÁ½¸ö×é¼þ£º´¦Àíµ¥Ôªprocessing unit ºÍ ÐéÄ⻯Öмä¼þvirtualized
middleware¡£

´¦Àíµ¥Ôª°üº¬Ó¦ÓóÌÐò¡£Ð¡µÄÓ¦ÓóÌÐò¿ÉÒÔʹÓÃÒ»¸ö´¦Àíµ¥Ôª£¬´óµÄÓ¦ÓóÌÐò¿ÉÒÔ±»·Ö¸ô³É¼¸¸ö´¦Àíµ¥Ôª¡£´¦Àíµ¥Ôª»¹°üÀ¨Êý¾ÝÍø¸ñ¡£
ÐéÄ⻯Öмä¼þ¸ºÔð¹ÜÀíºÍͨÐÅ¡£´¦ÀíÊý¾ÝµÄͬ²½ºÍÇëÇó¡£
ģʽ¿¼Á¿
»ùÓÚ¿Õ¼äµÄ¼Ü¹¹ÊÇÒ»¸ö¸´ÔÓ¶ø°º¹óµÄģʽ¡£¶ÔÓÚСÐ͵ĸºÔؿɱäµÄwebÓ¦ÓúÜÊʺϣ¬µ«ÊǶÔÓÚ´óÐ͵ĹØÏµÐÍÊý¾Ý¿âÓ¦Óò»ÊÇÌ«Êʺϡ£
ģʽ·ÖÎö
×ÜÌåÁé»îÐÔ£º ¸ß
·¢²¼Ò×ÓÃÐÔ£º ¸ß
¿É²âÊÔÐÔ£º µÍ
ÐÔÄÜ£º ¸ß
¹æÄ£À©Õ¹ÐÔ£º ¸ß
¿ª·¢ÈÝÒ×¶È£º µÍ |