±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬×÷Ϊµ±Ç°Ö÷Á÷µÄÆóÒµ¿ò¼ÜSpring£¬ËüÌṩÁËÒ»ÕûÌ×Ïà¹ØµÄ¶¥¼¶ÏîÄ¿£¬ÄÜÈÿª·¢Õß¿ìËÙµÄÉÏÊÖʵÏÖ×Ô¼ºµÄÓ¦Ó㬽ñÌì¾Í½éÉÜÏÂSpringÆìϸ÷¸ö¶¥¼¶ÏîÄ¿¡£ |
|
Spring ¶¥¼¶¿ò¼Ü

Spring IO platform:ÓÃÓÚϵͳ²¿Êð£¬Êǿɼ¯³ÉµÄ£¬¹¹½¨ÏÖ´ú»¯Ó¦Óõİ汾ƽ̨£¬¾ßÌåÀ´Ëµµ±ÄãʹÓÃmaven
dependencyÒýÈëspring jar°üʱËü¾ÍÔÚ¹¤×÷ÁË¡£
Spring Boot:Ö¼ÔÚ¼ò»¯´´½¨²úÆ·¼¶µÄ Spring Ó¦ÓúͷþÎñ£¬¼ò»¯ÁËÅäÖÃÎļþ£¬Ê¹ÓÃǶÈëʽweb·þÎñÆ÷£¬º¬ÓÐÖî¶à¿ªÏä¼´ÓÃ΢·þÎñ¹¦ÄÜ£¬¿ÉÒÔºÍspring
cloudÁªºÏ²¿Êð¡£
Spring Framework:¼´Í¨³£Ëù˵µÄspring ¿ò¼Ü£¬ÊÇÒ»¸ö¿ªÔ´µÄJava/Java
EEÈ«¹¦ÄÜÕ»Ó¦ÓóÌÐò¿ò¼Ü£¬ÆäËüspringÏîÄ¿Èçspring bootÒ²ÒÀÀµÓÚ´Ë¿ò¼Ü¡£
Spring Cloud£ºÎ¢·þÎñ¹¤¾ß°ü£¬Îª¿ª·¢ÕßÌṩÁËÔÚ·Ö²¼Ê½ÏµÍ³µÄÅäÖùÜÀí¡¢·þÎñ·¢ÏÖ¡¢¶Ï·Æ÷¡¢ÖÇÄÜ·ÓÉ¡¢Î¢´úÀí¡¢¿ØÖÆ×ÜÏߵȿª·¢¹¤¾ß°ü¡£
Spring XD£ºÊÇÒ»ÖÖÔËÐÐʱ»·¾³(·þÎñÆ÷Èí¼þ£¬·Ç¿ª·¢¿ò¼Ü)£¬×éºÏspring¼¼Êõ£¬Èçspring
batch¡¢spring boot¡¢spring data£¬²É¼¯´óÊý¾Ý²¢´¦Àí¡£
Spring Data£ºÊÇÒ»¸öÊý¾Ý·ÃÎʼ°²Ù×÷µÄ¹¤¾ß°ü£¬·â×°Á˺ܶàÖÖÊý¾Ý¼°Êý¾Ý¿âµÄ·ÃÎÊÏà¹Ø¼¼Êõ£¬°üÀ¨£ºjdbc¡¢Redis¡¢MongoDB¡¢Neo4jµÈ¡£
Spring Batch£ºÅú´¦Àí¿ò¼Ü£¬»ò˵ÊÇÅúÁ¿ÈÎÎñÖ´ÐйÜÀíÆ÷£¬¹¦ÄܰüÀ¨ÈÎÎñµ÷¶È¡¢ÈÕÖ¾¼Ç¼/¸ú×ٵȡ£
Spring Security£ºÊÇÒ»¸öÄܹ»Îª»ùÓÚSpringµÄÆóÒµÓ¦ÓÃϵͳÌṩÉùÃ÷ʽµÄ°²È«·ÃÎÊ¿ØÖƽâ¾ö·½°¸µÄ°²È«¿ò¼Ü¡£
Spring Integration£ºÃæÏòÆóÒµÓ¦Óü¯³É(EAI/ESB)µÄ±à³Ì¿ò¼Ü£¬Ö§³ÖµÄͨÐÅ·½Ê½°üÀ¨HTTP¡¢FTP¡¢TCP/UDP¡¢JMS¡¢RabbitMQ¡¢EmailµÈ¡£
Spring Social£ºÒ»×鹤¾ß°ü£¬Ò»×éÁ¬½ÓÉç½»·þÎñAPI£¬ÈçTwitter¡¢Facebook¡¢LinkedIn¡¢GitHubµÈ£¬Óм¸Ê®¸ö¡£
Spring AMQP£ºÏûÏ¢¶ÓÁвÙ×÷µÄ¹¤¾ß°ü£¬Ö÷ÒªÊÇ·â×°ÁËRabbitMQµÄ²Ù×÷¡£
Spring HATEOAS£ºÊÇÒ»¸öÓÃÓÚÖ§³ÖʵÏÖ³¬Îı¾Çý¶¯µÄ REST Web ·þÎñµÄ¿ª·¢¿â¡£
Spring Mobile£ºÊÇSpring MVCµÄÀ©Õ¹£¬ÓÃÀ´¼ò»¯ÊÖ»úÉϵÄWebÓ¦Óÿª·¢¡£
Spring forAndroid£ºÊÇSpring¿ò¼ÜµÄÒ»¸öÀ©Õ¹£¬ÆäÖ÷ҪĿµÄÔÚºõ¼ò»¯Android±¾µØÓ¦ÓõĿª·¢£¬ÌṩRestTemplateÀ´·ÃÎÊRest·þÎñ¡£
Spring Web Flow£ºÄ¿±êÊdzÉΪ¹ÜÀíWebÓ¦ÓÃÒ³ÃæÁ÷³ÌµÄ×î¼Ñ·½°¸£¬½«Ò³ÃæÌø×ªÁ÷³Ìµ¥¶À¹ÜÀí£¬²¢¿ÉÅäÖá£
Spring LDAP£ºÊÇÒ»¸öÓÃÓÚ²Ù×÷LDAPµÄJava¹¤¾ß°ü£¬»ùÓÚSpringµÄJdbcTemplateģʽ£¬¼ò»¯LDAP·ÃÎÊ¡£
Spring Session£ºsession¹ÜÀíµÄ¿ª·¢¹¤¾ß°ü£¬ÈÃÄã¿ÉÒÔ°Ñsession±£´æµ½redisµÈ£¬½øÐм¯Èº»¯session¹ÜÀí¡£
Spring Web Services£ºÊÇ»ùÓÚSpringµÄWeb·þÎñ¿ò¼Ü£¬ÌṩSOAP·þÎñ¿ª·¢£¬ÔÊÐíͨ¹ý¶àÖÖ·½Ê½´´½¨Web·þÎñ¡£
Spring Shell£ºÌṩ½»»¥Ê½µÄShell¿ÉÈÃÄãʹÓüòµ¥µÄ»ùÓÚSpringµÄ±à³ÌÄ£ÐÍÀ´¿ª·¢ÃüÁ±ÈÈçSpring
RooÃüÁî¡£
Spring Roo£ºÊÇÒ»ÖÖSpring¿ª·¢µÄ¸¨Öú¹¤¾ß£¬Ê¹ÓÃÃüÁîÐвÙ×÷À´Éú³É×Ô¶¯»¯ÏîÄ¿£¬²Ù×÷·Ç³£ÀàËÆÓÚRails¡£
Spring Scala£ºÎªScalaÓïÑÔ±à³ÌÌṩµÄspring¿ò¼ÜµÄ·â×°(еıà³ÌÓïÑÔ£¬Javaƽ̨µÄScalaÓÚ2003Äêµ×/2004Äê³õ·¢²¼)¡£
Spring BlazeDS Integration£ºÒ»¸ö¿ª·¢RIA¹¤¾ß°ü£¬¿ÉÒÔ¼¯³ÉAdobe Flex¡¢BlazeDS¡¢SpringÒÔ¼°Java¼¼Êõ´´½¨RIA¡£
Spring Loaded£ºÓÃÓÚʵÏÖjava³ÌÐòºÍwebÓ¦ÓõÄÈȲ¿ÊðµÄ¿ªÔ´¹¤¾ß¡£
Spring REST Shell£º¿ÉÒÔµ÷ÓÃRest·þÎñµÄÃüÁîÐй¤¾ß£¬ÇÃÃüÁîÐвÙ×÷Rest·þÎñ¡£
êµã
êµã
Spring cloud×ÓÏîÄ¿
ĿǰÀ´ËµspringÖ÷Òª¼¯ÖÐÓÚspring boot(ÓÃÓÚ¿ª·¢Î¢·þÎñ)ºÍspring cloudÏà¹Ø¿ò¼ÜµÄ¿ª·¢£¬ÎÒÃÇ´Ó¼¸ÕÅͼ×ÅÊÖÀí½â£¬È»ºóÔÙ¾ßÌå½éÉÜ£º


spring cloud×ÓÏîÄ¿°üÀ¨£º
Spring Cloud Config£ºÅäÖùÜÀí¿ª·¢¹¤¾ß°ü£¬¿ÉÒÔÈÃÄã°ÑÅäÖ÷ŵ½Ô¶³Ì·þÎñÆ÷£¬Ä¿Ç°Ö§³Ö±¾µØ´æ´¢¡¢GitÒÔ¼°Subversion¡£
Spring Cloud Bus£ºÊ¼þ¡¢ÏûÏ¢×ÜÏߣ¬ÓÃÓÚÔÚ¼¯Èº(ÀýÈ磬ÅäÖñ仯ʼþ)Öд«²¥×´Ì¬±ä»¯£¬¿ÉÓëSpring
Cloud ConfigÁªºÏʵÏÖÈȲ¿Êð¡£
Spring Cloud Netflix£ºÕë¶Ô¶àÖÖNetflix×é¼þÌṩµÄ¿ª·¢¹¤¾ß°ü£¬ÆäÖаüÀ¨Eureka¡¢Hystrix¡¢Zuul¡¢ArchaiusµÈ¡£
Netflix Eureka£ºÔƶ˸ºÔؾùºâ£¬Ò»¸ö»ùÓÚ REST µÄ·þÎñ£¬ÓÃÓÚ¶¨Î»·þÎñ£¬ÒÔʵÏÖÔÆ¶ËµÄ¸ºÔؾùºâºÍÖмä²ã·þÎñÆ÷µÄ¹ÊÕÏ×ªÒÆ¡£
Netflix Hystrix£ºÈÝ´í¹ÜÀí¹¤¾ß£¬Ö¼ÔÚͨ¹ý¿ØÖÆ·þÎñºÍµÚÈý·½¿âµÄ½Úµã,´Ó¶ø¶ÔÑӳٺ͹ÊÕÏÌṩ¸üÇ¿´óµÄÈÝ´íÄÜÁ¦¡£
Netflix Zuul£º±ßÔµ·þÎñ¹¤¾ß£¬ÊÇÌṩ¶¯Ì¬Â·ÓÉ£¬¼à¿Ø£¬µ¯ÐÔ£¬°²È«µÈµÄ±ßÔµ·þÎñ¡£
Netflix Archaius£ºÅäÖùÜÀíAPI£¬°üº¬Ò»ÏµÁÐÅäÖùÜÀíAPI£¬Ìṩ¶¯Ì¬ÀàÐÍ»¯ÊôÐÔ¡¢Ḭ̈߳²È«ÅäÖòÙ×÷¡¢ÂÖѯ¿ò¼Ü¡¢»Øµ÷»úÖÆµÈ¹¦ÄÜ¡£
Spring Cloud for Cloud Foundry£ºÍ¨¹ýOauth2ÐÒé°ó¶¨·þÎñµ½CloudFoundry£¬CloudFoundryÊÇVMwareÍÆ³öµÄ¿ªÔ´PaaSÔÆÆ½Ì¨¡£
Spring Cloud Sleuth£ºÈÕÖ¾ÊÕ¼¯¹¤¾ß°ü£¬·â×°ÁËDapper,ZipkinºÍHTrace²Ù×÷¡£
Spring Cloud Data Flow£º´óÊý¾Ý²Ù×÷¹¤¾ß£¬Í¨¹ýÃüÁîÐз½Ê½²Ù×÷Êý¾ÝÁ÷¡£
Spring Cloud Security£º°²È«¹¤¾ß°ü£¬ÎªÄãµÄÓ¦ÓóÌÐòÌí¼Ó°²È«¿ØÖÆ£¬Ö÷ÒªÊÇÖ¸OAuth2¡£
Spring Cloud Consul£º·â×°ÁËConsul²Ù×÷£¬consulÊÇÒ»¸ö·þÎñ·¢ÏÖÓëÅäÖù¤¾ß£¬ÓëDockerÈÝÆ÷¿ÉÒÔÎ޷켯³É¡£
Spring Cloud Zookeeper£º²Ù×÷ZookeeperµÄ¹¤¾ß°ü£¬ÓÃÓÚʹÓÃzookeeper·½Ê½µÄ·þÎñ×¢²áºÍ·¢ÏÖ¡£
Spring Cloud Stream£ºÊý¾ÝÁ÷²Ù×÷¿ª·¢°ü£¬·â×°ÁËÓëRedis,Rabbit¡¢KafkaµÈ·¢ËͽÓÊÕÏûÏ¢¡£
Spring Cloud CLI£º»ùÓÚ Spring Boot CLI£¬¿ÉÒÔÈÃÄãÒÔÃüÁîÐз½Ê½¿ìËÙ½¨Á¢ÔÆ×é¼þ¡£
¡¾²Î¿¼Ïê½â¡¿ÎªÊ²Ã´Ñ¡ÔñSpring Boot×÷Ϊ΢·þÎñµÄÈëÃż¶Î¢¿ò¼Ü-CSDN.NET http://www.csdn.net/article/a/2016-05-12/15838098
êµã
WHAT - ʲôÊÇ΢·þÎñ
êµã
΢·þÎñ¼ò½é
Õâ´Î²Î¼ÓJavaOne2015×î´óµÄÀ§ÄѾÍÊÇÌýMicroserviceÏà¹ØµÄsession£¬ÎÞÂÛÄÚÈݶàôˮ£¬Ö»ÒªÌâÄ¿´ømicroservice£¬±Ø¶¨±¨²»ÉÏÃû£¬¿É¼ûMicroserviceÓжà»ð¡£×îϲ»¶ÆäÖÐÒ»Ò³¡£¹ØÓÚÕâ¸öµä¹Ê£¬¿ÉÒԲο¼this£¬´ËͼÊÊÓÃÓÚÒ»ÇиߴóÉϵÄÃû×Ö¡ª¡ª¼¼ÊõÓÐSOA£¬Agile£¬CLOUD£¬DevOpsµÈµÈ£¬¹Å´úÓеÀ£¬Æø£¬°ËØÔµÈµÈ¡£´ËÀàÃû´ÊµÄ×î´óÌØµã¾ÍÊÇÒ»½âÊ;Ͷ®£¬Ò»ÎʾͲ»Öª£¬Ò»ÌÖÂ۾ʹò¼Ü¡£

΢·þÎñµÄÁ÷ÐУ¬Martin¹¦²»¿Éû£¬ÕâÀÏÍ·Ò²ÊǸöÆæÈË£¬ÌرðÉó¤³éÏó¹éÄɺÍÖÆÔì¸ÅÄÎÒ¾õµÄÕâ¾ÍÊÇ×îÅ£±ÆµÄmarkting°¡£¬¸Ð¾õÕâÒ²ÊÇĿǰ¹úÈËǷȱµÄÄÜÁ¦¡£
Martin FowlerÊǹú¼ÊÖøÃûµÄOOר¼Ò£¬Ãô½Ý¿ª·¢·½·¨µÄ´´Ê¼ÈËÖ®Ò»£¬ÏÖΪThoughtWorks¹«Ë¾µÄÊ×ϯ¿ÆÑ§¼Ò.¸£ÀÕ(Martin
Fowler)£¬ÔÚÃæÏò¶ÔÏó·ÖÎöÉè¼Æ¡¢UML¡¢Ä£Ê½¡¢Èí¼þ¿ª·¢·½·¨Ñ§¡¢XP¡¢Öع¹µÈ·½Ã棬¶¼ÊÇÊÀ½ç¶¥¼¶µÄר¼Ò£¬ÏÖΪThought
Works¹«Ë¾µÄÊ×ϯ¿ÆÑ§¼Ò¡£Thought WorksÊÇÒ»¼Ò´ÓÊÂÆóÒµÓ¦Óÿª·¢ºÍ¼¯³ÉµÄ¹«Ë¾¡£ÔçÔÚ20ÊÀ¼Í80Äê´ú£¬Fowler¾ÍÊÇʹÓöÔÏó¼¼Êõ¹¹½¨¶à²ãÆóÒµÓ¦Óõij«µ¼Õߣ¬ËûÖøÓм¸±¾¾µäÊé¼®£º
¡¶ÆóÒµÓ¦Óüܹ¹Ä£Ê½¡·¡¢¡¶UML¾«´â¡·ºÍ¡¶Öع¹¡·µÈ¡£¡ª¡ª °Ù¶È°Ù¿Æ
ÏÈÀ´¿´¿´´«Í³µÄweb¿ª·¢·½Ê½£¬Í¨¹ý¶Ô±È±È½ÏÈÝÒ×Àí½âʲôÊÇMicroservice Architecture¡£ºÍMicroserviceÏà¶ÔÓ¦µÄ£¬ÕâÖÖ·½Ê½Ò»°ã±»³ÆÎªMonolithic(±È½ÏÄÑ´«ÉñµÄ·Òë)¡£ËùÓеŦÄÜ´ò°üÔÚÒ»¸ö
WAR°üÀ»ù±¾Ã»ÓÐÍⲿÒÀÀµ(³ýÁËÈÝÆ÷)£¬²¿ÊðÔÚÒ»¸öJEEÈÝÆ÷(Tomcat£¬JBoss£¬WebLogic)À°üº¬ÁË
DO/DAO£¬Service£¬UIµÈËùÓÐÂß¼¡£

Monolithic±È½ÏÊʺÏСÏîÄ¿£¬ÓŵãÊÇ£º
¿ª·¢¼òµ¥Ö±½Ó£¬¼¯ÖÐʽ¹ÜÀí
»ù±¾²»»áÖØ¸´¿ª·¢
¹¦Äܶ¼ÔÚ±¾µØ£¬Ã»Óзֲ¼Ê½µÄ¹ÜÀí¿ªÏúºÍµ÷ÓÿªÏú
ËüµÄȱµãÒ²·Ç³£Ã÷ÏÔ£¬Ìرð¶ÔÓÚ»¥ÁªÍø¹«Ë¾À´Ëµ(²»Ò»Ò»ÁоÙÁË)£º
¿ª·¢Ð§ÂʵͣºËùÓеĿª·¢ÔÚÒ»¸öÏîÄ¿¸Ä´úÂ룬µÝ½»´úÂëÏ໥µÈ´ý£¬´úÂë³åÍ»²»¶Ï
´úÂëά»¤ÄÑ£º´úÂ빦ÄÜñîºÏÔÚÒ»Æð£¬ÐÂÈ˲»ÖªµÀºÎ´ÓÏÂÊÖ
²¿Êð²»Áé»î£º¹¹½¨Ê±¼ä³¤£¬ÈκÎСÐ޸ıØÐëÖØÐ¹¹½¨Õû¸öÏîÄ¿£¬Õâ¸ö¹ý³ÌÍùÍùºÜ³¤
Îȶ¨ÐÔ²»¸ß£ºÒ»¸ö΢²»×ãµÀµÄСÎÊÌ⣬¿ÉÒÔµ¼ÖÂÕû¸öÓ¦Óùҵô
À©Õ¹ÐÔ²»¹»£ºÎÞ·¨Âú×ã¸ß²¢·¢Çé¿öϵÄÒµÎñÐèÇó
ËùÒÔ£¬ÏÖÔÚÖ÷Á÷µÄÉè¼ÆÒ»°ã»á²ÉÓÃMicroservice Architecture£¬¾ÍÊÇ»ùÓÚ΢·þÎñµÄ¼Ü¹¹¡£¼òµ¥À´Ëµ£¬Î¢·þÎñµÄÄ¿µÄÊÇÓÐЧµÄ²ð·ÖÓ¦Óã¬ÊµÏÖÃô½Ý¿ª·¢ºÍ²¿Êð¡£

Óá¶The art of scalability¡·Ò»ÊéÀïÌáµ½µÄscale cube±È½ÏÈÝÒ×Àí½âÈçºÎ²ð·Ö¡£Äã¿´£¬ÎÒÃǽзֿâ·Ö±í£¬±ðÈË×ܽá³ÉÁËscale
cube£¬Õâ¾ÍÊdzéÏóµÄÄÜÁ¦°¡£¬°Ñ¸´ÔӵĶ«Î÷ÓÃ×î¼òµ¥µÄ¸ÅÄî½âÊͺÍ×ܽᡣXÖá´ú±íÔËÐжà¸ö¸ºÔؾùºâÆ÷Ö®ºóÔËÐеÄʵÀý£¬YÖá´ú±í½«Ó¦ÓýøÒ»²½·Ö½âΪ΢·þÎñ
(·Ö¿â)£¬Êý¾ÝÁ¿´óʱ£¬»¹¿ÉÒÔÓÃZÖὫ·þÎñ°´Êý¾Ý·ÖÇø(·Ö±í)

êµã
΢·þÎñµÄ¾ßÌåÌØÕ÷
ÏÈ¿´¿´×î¹Ù·½µÄ¶¨Òå°É
The
microservice architectural style is an approach
to developing a single application asasuite
of small services, eachrunning in its own processand
communicating with lightweight mechanisms, often
an HTTP resource API. These services are**built
around business capabilities**and independently
deployableby fully automated deployment machinery.
There isabare minimum of centralized managementof
these services, which may be written in different
programming languages and use different data
storage technologies.
-- James Lewis and Martin Fowler |
°ÑMartinÀÏÍ·µÄ¶¨Òå´ó¸ÅµÄ·ÒëһϾÍÊÇÏÂÃæ¼¸Ìõ£¬Õâ¸ö¶¨Ò廹ÊÇÌ«³éÏóÊDz»ÊÇ£¬ÄǾͶÔÁË£¬¾ÍÊÇÒªÎñÐ飬¶¼ËµÃ÷°×ÁËË»¹ÕÒËû¸¶·Ñ×Éѯ°¡£¬Õâô¹ó¡£
1. һЩÁеĶÀÁ¢µÄ·þÎñ¹²Í¬×é³Éϵͳ
2. µ¥¶À²¿Êð£¬ÅÜÔÚ×Ô¼ºµÄ½ø³ÌÀï
3. ÿ¸ö·þÎñΪ¶ÀÁ¢µÄÒµÎñ¿ª·¢
4. ·Ö²¼Ê½µÄ¹ÜÀí
Martin×Ô¼ºÒ²ËµÁË£¬Ã¿¸öÈ˶Ô΢·þÎñ¶¼¿ÉÒÔÓÐ×Ô¼ºµÄÀí½â£¬²»¹ý´ó¸ÅµÄ±ê×¼»¹ÊÇÓÐһЩµÄ¡£
·Ö²¼Ê½·þÎñ×é³ÉµÄϵͳ
°´ÕÕÒµÎñ¶ø²»ÊǼ¼ÊõÀ´»®·Ö×éÖ¯
×öÓÐÉúÃüµÄ²úÆ·¶ø²»ÊÇÏîÄ¿
Smart endpoints and dumb pipes(ÎÒµÄÀí½âÊÇÇ¿·þÎñ¸öÌåºÍÈõͨÐÅ)
×Ô¶¯»¯ÔËά(DevOps)
ÈÝ´í
¿ìËÙÑÝ»¯
êµã
SOA vs Microservice
³ýÁËSmart endpoints and dumb pipes¶¼ºÜÈÝÒ×Àí½â¶ÔÂð?ÏàÐźܶàÈ˶¼»áÎÊÒ»¸öÎÊÌ⣬ÕâÊDz»ÊǾÍÊÇSOA»»Á˸ö¸ÅÄ¹ÒÑòÍ·Âô¹·Èâ°¡£¬ÓÐ˵·¨°ÑMicroservice½Ð³É
Lightway SOA¡£Ò²Óкܶഫͳש¼ÒÌø³öÀ´ËµMicroservice¾ÍÊÇSOA¡£ÆäʵMartinҲû·ñÈÏSOAºÍMicroserviceµÄ¹ØÏµ¡£
ÎÒ¸öÈËÀí½â£¬MicroserviceÊÇSOAµÄ´«³Ð£¬µ«Ò»¸ö×î±¾ÖʵÄÇø±ð¾ÍÔÚÓÚSmart endpoints
and dumb pipes£¬»òÕß˵ÊÇÕæÕýµÄ·Ö²¼Ê½µÄ¡¢È¥ÖÐÐÄ»¯µÄ¡£Smart endpoints and
dumb pipes±¾ÖʾÍÊÇÈ¥ESB£¬°ÑËùÓеġ°Ë¼¿¼¡±Âß¼°üÀ¨Â·ÓÉ¡¢ÏûÏ¢½âÎöµÈ·ÅÔÚ·þÎñÄÚ²¿(Smart
endpoints)£¬È¥µôÒ»¸ö´óһͳµÄESB£¬·þÎñ¼äÇá(dumb pipes)ͨÐÅ£¬ÊDZÈSOA¸ü³¹µ×µÄ²ð·Ö¡£
êµã
HOW - Ôõô¾ßÌåʵ¼ù΢·þÎñ
ÌýÉÏÈ¥ºÃÏñ¶¼²»´í£¬¾ßÌåÔõôÂ䵨°¡?ÕâÐèÒª»Ø´ðÏÂÃæ¼¸¸öÎÊÌ⣺
¿Í»§¶ËÈçºÎ·ÃÎÊÕâЩ·þÎñ?
·þÎñÖ®¼äÈçºÎͨÐÅ?
Õâô¶à·þÎñ£¬ÔõôÕÒ?
·þÎñ¹ÒÁËÔõô°ì?
êµã
¿Í»§¶ËÈçºÎ·ÃÎÊÕâЩ·þÎñ?
ÔÀ´µÄMonolithic·½Ê½¿ª·¢£¬ËùÓеķþÎñ¶¼ÊDZ¾µØµÄ£¬UI¿ÉÒÔÖ±½Óµ÷Óã¬ÏÖÔÚ°´¹¦Äܲð·Ö³É¶ÀÁ¢µÄ·þÎñ£¬ÅÜÔÚ¶ÀÁ¢µÄÒ»°ã¶¼ÔÚ¶ÀÁ¢µÄÐéÄâ»úÉϵÄ
Java½ø³ÌÁË¡£¿Í»§¶ËUIÈçºÎ·ÃÎÊËûµÄ?ºǫ́ÓÐN¸ö·þÎñ£¬Ç°Ì¨¾ÍÐèÒª¼Çס¹ÜÀíN¸ö·þÎñ£¬Ò»¸ö·þÎñÏÂÏß/¸üÐÂ/Éý¼¶£¬Ç°Ì¨¾ÍÒªÖØÐ²¿Êð£¬ÕâÃ÷ÏÔ²»·þÎñÎÒÃÇ
²ð·ÖµÄÀíÄî£¬ÌØ±ðµ±Ç°Ì¨ÊÇÒÆ¶¯Ó¦ÓõÄʱºò£¬Í¨³£ÒµÎñ±ä»¯µÄ½Ú×à¸ü¿ì¡£ÁíÍ⣬N¸öС·þÎñµÄµ÷ÓÃÒ²ÊÇÒ»¸ö²»Ð¡µÄÍøÂ翪Ïú¡£»¹ÓÐÒ»°ã΢·þÎñÔÚϵͳÄÚ²¿£¬Í¨³£ÊÇÎÞ
״̬µÄ£¬Óû§µÇ¼ÐÅÏ¢ºÍȨÏÞ¹ÜÀí×îºÃÓÐÒ»¸öͳһµÄµØ·½Î¬»¤¹ÜÀí(OAuth)¡£
ËùÒÔ£¬Ò»°ãÔÚºǫ́N¸ö·þÎñºÍUIÖ®¼äÒ»°ã»áÒ»¸ö´úÀí»òÕß½ÐAPI Gateway£¬ËûµÄ×÷ÓðüÀ¨
Ìṩͳһ·þÎñÈë¿Ú£¬ÈÃ΢·þÎñ¶Ôǰ̨͸Ã÷
¾ÛºÏºǫ́µÄ·þÎñ£¬½ÚÊ¡Á÷Á¿£¬ÌáÉýÐÔÄÜ
Ìṩ°²È«£¬¹ýÂË£¬Á÷¿ØµÈAPI¹ÜÀí¹¦ÄÜ
ÎÒµÄÀí½âÆäʵÕâ¸öAPI Gateway¿ÉÒÔÓкܶà¹ãÒåµÄʵÏÖ°ì·¨£¬¿ÉÒÔÊÇÒ»¸öÈíÓ²Ò»ÌåµÄºÐ×Ó£¬Ò²¿ÉÒÔÊÇÒ»¸ö¼òµ¥µÄMVC¿ò¼Ü£¬ÉõÖÁÊÇÒ»¸öNode.jsµÄ·þÎñ¶Ë¡£ËûÃÇ×îÖØÒªµÄ×÷
ÓÃÊÇΪǰ̨(ͨ³£ÊÇÒÆ¶¯Ó¦ÓÃ)Ìṩºǫ́·þÎñµÄ¾ÛºÏ£¬Ìṩһ¸öͳһµÄ·þÎñ³ö¿Ú£¬½â³ýËûÃÇÖ®¼äµÄñîºÏ£¬²»¹ýAPI
GatewayÒ²ÓпÉÄܳÉΪµ¥µã¹ÊÕϵã»òÕßÐÔÄܵį¿¾±¡£
Ò»°ãÓùýTaobao Open PlatformµÄ¾ÍÄܺÜÈÝÒ×µÄÌå»á£¬TAO¾ÍÊÇÕâ¸öAPI Gateway¡£

êµã
·þÎñÖ®¼äÈçºÎͨÐÅ?
ÒòΪËùÓеÄ΢·þÎñ¶¼ÊǶÀÁ¢µÄJava½ø³ÌÅÜÔÚ¶ÀÁ¢µÄÐéÄâ»úÉÏ£¬ËùÒÔ·þÎñ¼äµÄͨÐоÍÊÇIPC(inter
process communication)£¬ÒѾÓкܶà³ÉÊìµÄ·½°¸¡£ÏÖÔÚ»ù±¾×îͨÓõÄÓÐÁ½ÖÖ·½Ê½¡£Õ⼸ÖÖ·½Ê½£¬Õ¹¿ªÀ´½²¶¼¿ÉÒÔд±¾Ê飬¶øÇÒ´ó¼ÒÒ»°ã¶¼±È½ÏÊìϤϸ½ÚÁË£¬
¾Í²»Õ¹¿ª½²ÁË¡£
ͬ²½µ÷ÓÃ
REST(JAX-RS£¬Spring Boot)
RPC(Thrift, Dubbo)
Òì²½ÏûÏ¢µ÷ÓÃ(Kafka, Notify, MetaQ)

Ò»°ãͬ²½µ÷ÓñȽϼòµ¥£¬Ò»ÖÂÐÔÇ¿£¬µ«ÊÇÈÝÒ׳öµ÷ÓÃÎÊÌ⣬ÐÔÄÜÌåÑéÉÏÒ²»á²îЩ£¬ÌرðÊǵ÷Óòã´Î¶àµÄʱºò¡£RESTfulºÍRPCµÄ±È½ÏÒ²ÊÇÒ»¸öºÜÓÐÒâ
˼µÄ»°Ìâ¡£Ò»°ãREST»ùÓÚHTTP£¬¸üÈÝÒ×ʵÏÖ£¬¸üÈÝÒ×±»½ÓÊÜ£¬·þÎñ¶ËʵÏÖ¼¼ÊõÒ²¸üÁé»îЩ£¬¸÷¸öÓïÑÔ¶¼ÄÜÖ§³Ö£¬Í¬Ê±ÄÜ¿ç¿Í»§¶Ë£¬¶Ô¿Í»§¶ËûÓÐÌØÊâµÄÒª
Çó£¬Ö»Òª·â×°ÁËHTTPµÄSDK¾ÍÄܵ÷Óã¬ËùÒÔÏà¶ÔʹÓõĹãһЩ¡£RPCÒ²ÓÐ×Ô¼ºµÄÓŵ㣬´«ÊäÐÒé¸ü¸ßЧ£¬°²È«¸ü¿É¿Ø£¬ÌرðÔÚÒ»¸ö¹«Ë¾ÄÚ²¿£¬Èç¹ûÓÐͳһ¸ö
µÄ¿ª·¢¹æ·¶ºÍͳһµÄ·þÎñ¿ò¼Üʱ£¬ËûµÄ¿ª·¢Ð§ÂÊÓÅÊÆ¸üÃ÷ÏÔЩ¡£¾Í¿´¸÷×Եļ¼Êõ»ýÀÛʵ¼ÊÌõ¼þ£¬×Ô¼ºµÄÑ¡ÔñÁË¡£
¶øÒì²½ÏûÏ¢µÄ·½Ê½ÔÚ·Ö²¼Ê½ÏµÍ³ÖÐÓÐÌØ±ð¹ã·ºµÄÓ¦Óã¬Ëû¼ÈÄܼõµÍµ÷Ó÷þÎñÖ®¼äµÄñîºÏ£¬ÓÖÄܳÉΪµ÷ÓÃÖ®¼äµÄ»º³å£¬È·±£ÏûÏ¢»ýѹ²»»á³å¿å±»µ÷Ó÷½£¬Í¬Ê±ÄÜ
±£Ö¤µ÷Ó÷½µÄ·þÎñÌåÑ飬¼ÌÐø¸É×Ô¼º¸Ã¸ÉµÄ»î£¬²»ÖÁÓÚ±»ºǫ́ÐÔÄÜÍÏÂý¡£²»¹ýÐèÒª¸¶³öµÄ´ú¼ÛÊÇÒ»ÖÂÐԵļõÈõ£¬ÐèÒª½ÓÊÜÊý¾Ý×îÖÕÒ»ÖÂÐÔ;»¹ÓоÍÊǺǫ́·þÎñÒ»°ãÒª
ʵÏÖÃݵÈÐÔ£¬ÒòΪÏûÏ¢·¢ËͳöÓÚÐÔÄܵĿ¼ÂÇÒ»°ã»áÓÐÖØ¸´(±£Ö¤ÏûÏ¢µÄ±»ÊÕµ½ÇÒ½öÊÕµ½Ò»´Î¶ÔÐÔÄÜÊǺܴóµÄ¿¼Ñé);×îºó¾ÍÊDZØÐëÒýÈëÒ»¸ö¶ÀÁ¢µÄbroker£¬Èç
¹û¹«Ë¾ÄÚ²¿Ã»Óм¼Êõ»ýÀÛ£¬¶Ôbroker·Ö²¼Ê½¹ÜÀíÒ²ÊÇÒ»¸öºÜ´óµÄÌôÕ½¡£
Õâô¶à·þÎñ£¬ÔõôÕÒ?
ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬Ò»°ãÿһ¸ö·þÎñ¶¼ÊÇÓжà¸ö¿½±´£¬À´×ö¸ºÔؾùºâ¡£Ò»¸ö·þÎñËæÊ±¿ÉÄÜÏÂÏߣ¬Ò²¿ÉÄÜÓ¦¶ÔÁÙʱ·ÃÎÊѹÁ¦Ôö¼ÓеķþÎñ½Úµã¡£·þÎñÖ®¼äÈçºÎÏ໥
¸ÐÖª?·þÎñÈçºÎ¹ÜÀí?Õâ¾ÍÊÇ·þÎñ·¢ÏÖµÄÎÊÌâÁË¡£Ò»°ãÓÐÁ½Àà×ö·¨£¬Ò²¸÷ÓÐÓÅȱµã¡£»ù±¾¶¼ÊÇͨ¹ýzookeeperµÈÀàËÆ¼¼Êõ×ö·þÎñ×¢²áÐÅÏ¢µÄ·Ö²¼Ê½¹ÜÀí¡£µ±
·þÎñÉÏÏßʱ£¬·þÎñÌṩÕß½«×Ô¼ºµÄ·þÎñÐÅÏ¢×¢²áµ½ZK(»òÀàËÆ¿ò¼Ü)£¬²¢Í¨¹ýÐÄÌøÎ¬³Ö³¤Á´½Ó£¬ÊµÊ±¸üÐÂÁ´½ÓÐÅÏ¢¡£·þÎñµ÷ÓÃÕßͨ¹ýZKѰַ£¬¸ù¾Ý¿É¶¨ÖÆËã·¨£¬
ÕÒµ½Ò»¸ö·þÎñ£¬»¹¿ÉÒÔ½«·þÎñÐÅÏ¢»º´æÔÚ±¾µØÒÔÌá¸ßÐÔÄÜ¡£µ±·þÎñÏÂÏßʱ£¬ZK»á·¢Í¨Öª¸ø·þÎñ¿Í»§¶Ë¡£
¿Í»§¶Ë×ö£ºÓŵãÊǼܹ¹¼òµ¥£¬À©Õ¹Áé»î£¬Ö»¶Ô·þÎñ×¢²áÆ÷ÒÀÀµ¡£È±µãÊǿͻ§¶ËҪά»¤ËùÓе÷Ó÷þÎñµÄµØÖ·£¬Óм¼ÊõÄѶȣ¬Ò»°ã´ó¹«Ë¾¶¼ÓгÉÊìµÄÄÚ²¿¿ò¼ÜÖ§³Ö£¬±ÈÈçDubbo¡£
·þÎñ¶Ë×ö£ºÓŵãÊǼòµ¥£¬ËùÓзþÎñ¶ÔÓÚǰ̨µ÷Ó÷½Í¸Ã÷£¬Ò»°ãÔÚС¹«Ë¾ÔÚÔÆ·þÎñÉϲ¿ÊðµÄÓ¦ÓòÉÓõıȽ϶ࡣ

êµã
Õâô¶à·þÎñ£¬·þÎñ¹ÒÁËÔõô°ì?
Ç°ÃæÌáµ½£¬Monolithic·½Ê½¿ª·¢Ò»¸öºÜ´óµÄ·çÏÕÊÇ£¬°ÑËùÓ즵°·ÅÔÚÒ»¸öÀº×ÓÀһÈÙ¾ãÈÙ£¬Ò»Ëð¾ãËð¡£¶ø·Ö²¼Ê½×î´óµÄÌØÐÔ¾ÍÊÇÍøÂçÊDz»¿É¿¿
µÄ¡£Í¨¹ý΢·þÎñ²ð·ÖÄܽµµÍÕâ¸ö·çÏÕ£¬²»¹ýÈç¹ûûÓÐÌØ±ðµÄ±£ÕÏ£¬½á¾Ö¿Ï¶¨ÊÇØ¬ÃΡ£ÎÒÃǸÕÓöµ½Ò»¸öÏßÉϹÊÕϾÍÊÇÒ»¸öºÜ²»ÆðÑÛµÄSQL¼ÆÊý¹¦ÄÜ£¬ÔÚ·ÃÎÊÁ¿ÉÏÉý
ʱ£¬µ¼ÖÂÊý¾Ý¿âload±ë¸ß£¬Ó°ÏìÁËËùÔÚÓ¦ÓõÄÐÔÄÜ£¬´Ó¶øÓ°ÏìËùÓе÷ÓÃÕâ¸öÓ¦Ó÷þÎñµÄǰ̨ӦÓá£ËùÒÔµ±ÎÒÃǵÄϵͳÊÇÓÉһϵÁеķþÎñµ÷ÓÃÁ´×é³ÉµÄʱºò£¬ÎÒÃÇ
±ØÐëÈ·±£ÈÎÒ»»·½Ú³öÎÊÌâ¶¼²»ÖÁÓÚÓ°ÏìÕûÌåÁ´Â·¡£ÏàÓ¦µÄÊÖ¶ÎÓкࣺܶ
ÖØÊÔ»úÖÆ
ÏÞÁ÷
ÈÛ¶Ï»úÖÆ
¸ºÔؾùºâ
½µ¼¶(±¾µØ»º´æ)
ÕâЩ·½·¨»ù±¾É϶¼ºÜÃ÷ȷͨÓ㬾Ͳ»Ïêϸ˵Ã÷ÁË¡£±ÈÈçNetflixµÄHystrix£ºhttps://github.com/Netflix/Hystrix

êµã
WHY - ΢·þÎñµÄÓ¦ÓÃ
ÕâÀïÓÐÒ»¸öͼ·Ç³£ºÃµÄ×ܽá΢·þÎñ¼Ü¹¹ÐèÒª¿¼ÂǵÄÎÊÌ⣬°üÀ¨
API Gateway
·þÎñ¼äµ÷ÓÃ
·þÎñ·¢ÏÖ
·þÎñÈÝ´í
·þÎñ²¿Êð
Êý¾Ýµ÷ÓÃ

΢·þÎñµÄÓŵãºÍȱµã(»òÕß˵ÌôÕ½)Ò»ÑùÃ÷ÏÔ¡£
Óŵã
¿ª·¢¼òµ¥
¼¼ÊõÕ»Áé»î
·þÎñ¶ÀÁ¢ÎÞÒÀÀµ
¶ÀÁ¢°´ÐèÀ©Õ¹
¿ÉÓÃÐÔ¸ß
ȱµã(ÌôÕ½)
¶à·þÎñÔËάÄѶÈ
ϵͳ²¿ÊðÒÀÀµ
·þÎñ¼äͨÐųɱ¾
Êý¾ÝÒ»ÖÂÐÔ
ϵͳ¼¯³É²âÊÔ
ÖØ¸´¹¤×÷
ÐÔÄÜ¼à¿Ø
ûÓÐ×îºÃµÄ£¬Ö»ÓÐÊʺÏ×Ô¼ºµÄ¡£

¶ÔÓÚ´óµÄ»¥ÁªÍø¹«Ë¾£¬Î¢·þÎñ¼Ü¹¹ÊÇѪҺ£¬ÊÇϰ¹ß£¬Ã¿¼Ò¹«Ë¾¶¼ÓÐ×Ô¼ºµÄÌ×·ºÍ¼Ü¹¹£¬Ï¸½ÚÓв»Í¬£¬µ«ÊǺËÐÄÀíÄîÊÇͨµÄ¡£
¶ÔÓÚÒ»°ãµÄ¹«Ë¾¶øÑÔ£¬Êµ¼ù΢·þÎñÓзdz£´óµÄ¼¼ÊõÌôÕ½£¬ÓÚÊǺõ²ÅÓÐÁËÕâô¶àIT¹©Ó¦ÉÌ¿¼ÂÇÕâÀïµÄÉÌ»ú¡£Î¢·þÎñ±È½ÏÊʺÏδÀ´ÓÐÒ»¶¨µÄÀ©Õ¹¸´ÔÓ¶È£¬ÇÒÓÐ
ºÜ´óÓû§ÔöÁ¿Ô¤ÆÚµÄÓ¦Óã¬ËµÈË»°¾ÍÊÇÐÂÐ˵Ļ¥ÁªÍø¹«Ë¾¡£´´Òµ³õÆÚ£¬²»¿ÉÄÜÂò´óÁ¿µÄ»úÆ÷»òÕߺܹóµÄ»úÆ÷£¬µ«ÊÇÓÖ±ØÐ뿼ÂÇÓ¦¶Ô³É¹¦ºóµÄ¾ÞÁ¿µÄÓû§£¬Î¢·þÎñ¼Ü¹¹
³ÉÁË×îºÃµÄÑ¡Ôñ¡£

êµã
So What - ˼¿¼
¿´µ½ÉÏÃæµÄͼ£¬²»ÊDz»¾õµÃÌØ±ðµÄÊìϤ?ÆäʵÎÒÃÇNÄêǰ¾ÍÓõĹö¹ÏÀÃÊìÁ˺ò»ºÃ?¿ã×Ó¶¼ÍÏÁË£¬Äã¾Í¸øÎÒ¿´Õâ¸ö?

from:https://github.com/Netflix/recipes-rss/wiki/Architectu
re
Æäʵ±¾À´ËùνµÄ΢·þÎñ¾ÍÊǶԻ¥ÁªÍøÔÚÓ¦Óü¼ÊõµÄÒ»¸ö×ܽá¹éÄÉ£¬IT³§É̹ĴµËùÓиÅÄîÎÞ·ÇÊÇΪÁËÉúÒâ(business)£¬SOAÊÇ£¬CloudÊÇ£¬MicroserviceÒ²ÊÇ¡£ÏÂÃæÍæÐ¦ºÜÓÐÒâ˼µÄ¸ÅÀ¨ÁËÕâ¸öÇé¿ö(ÎÒ¼ÓÁ˵ÚÒ»ÌõÏߣ¬Ôͼ¼ûÕâÀï)

ËùÒÔ΢·þ¶ÔÎÒÃǵÄ˼¿¼ÎÒ¾õµÃ¸ü¶àµÄÊÇ˼άÉϵ쬶ÔÒÑ΢·þÎñ¼Ü¹¹£¬¼¼ÊõÉϲ»ÊÇÎÊÌ⣬Òâʶ±È¹¤¾ßÖØÒª¡£
°´ÕÕÒµÎñ »òÕ߿ͻ§ÐèÇó×éÖ¯×ÊÔ´(ÕâÊÇ×îÄѵÄ)
×öÓÐÉúÃüµÄ²úÆ·£¬¶ø²»ÊÇÏîÄ¿
Í·ÀÇÕ½¶Ó£¬È«Õ»»¯
ºǫ́·þÎñ¹á³¹Single Responsibility Principle
VM->Docker (to PE)
DevOps (to PE)
ͬʱ£¬¶ÔÓÚ¿ª·¢Í¬Ñ§£¬ÓÐÕâô¶àµÄÖмä¼þºÍÇ¿´óµÄPEÖ§³Ö¹ÌÈ»ÊǺÃÊ£¬ÎÒÃÇÒ²ÐèÒªÉîÈëÈ¥Á˽âÕâЩÖмä¼þ±³ºóµÄÔÀí£¬ÖªÆäȻ֪ÆäËùÒÔÈ»£¬ÉèÏëÏ£¬Èç¹ûÎÒÃÇÊÇÒ»¸öС¹«Ë¾µÄCTO£¬À뿪µÄ°¢ÀïµÄ´ó»·¾³£¬ÔÚÓÐÏ޵ļ¼Êõ×ÊÔ´ÈçºÎͨ¹ý¿ªÔ´¼¼Êõʵʩ΢·þÎñ?
×îºó£¬Ò»°ãÌᵽ΢·þÎñ¶¼Àë²»¿ªDevOpsºÍDocker£¬Àí½â΢·þÎñ¼Ü¹¹ÊǺËÐÄ£¬devopsºÍdockerÊǹ¤¾ß£¬ÊÇÊֶΡ£Ï´ÎÔÚ³éʱ¼äÔÙѧϰÕûÀíÏ¡£

|