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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚ Docker µÄ΢·þÎñ¼Ü¹¹Êµ¼ù
 
  2324  次浏览      27
 2018-4-18 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚsohu£¬±¾ÎÄÖ÷ÒªÊǶÔÓÚDockerµÄ΢·þÎñʵ¼ù½øÐм¼Êõ·½°¸Ñ¡ÐÍÒÔ¼°½éÉÜ¡£

ǰÑÔ

»ùÓÚ Docker µÄÈÝÆ÷¼¼ÊõÊÇÔÚ2015ÄêµÄʱºò¿ªÊ¼½Ó´¥µÄ£¬Á½Äê¶àµÄʱ¼ä£¬×÷ΪһÃû Docker µÄ DevOps£¬Ò²¼ûÖ¤ÁË Docker µÄ¼¼ÊõÌåϵµÄ¿ìËÙ·¢Õ¹¡£±¾ÎÄÖ÷ÒªÊǽáºÏÔÚ¹«Ë¾´î½¨µÄ΢·þÎñ¼Ü¹¹µÄʵ¼ù¹ý³Ì£¬×öÒ»¸ö¼òµ¥µÄ×ܽᡣϣÍû¸øÔÚ´´Òµ³õÆÚ̽Ë÷ÈçºÎ²¼¾Ö·þÎñ¼Ü¹¹ÌåϵµÄ DevOps£¬»òÕßÏë³õ²½Á˽âÆóÒµ¼¶¼Ü¹¹µÄͬѧÃÇһЩ²Î¿¼¡£

Microservice ºÍ Docker

¶ÔÓÚ´´Òµ¹«Ë¾µÄ¼¼Êõ²¼¾Ö£¬ºÜ¶àÉùÒô»ù±¾ÉÏÊÇ£¬´´Òµ¹«Ë¾¾ÍÊÇÒª¿ìËÙÉÏÏß¿ìËÙÊÔ´í¡£Óõ¥Ó¦ÓûòÕßǰºǫ́ӦÓ÷ÖÀëµÄ·½Ê½¿ìËÙ¼¯³É£¬¿ìËÙ¿ª·¢£¬¿ìËÙ·¢²¼¡£µ«ÆäʵÕâÖÖ½á¹ûÔì³ÉµÄÒþÐԳɱ¾»á¸ü¸ß¡£

µ±ÒµÎñ·¢Õ¹ÆðÀ´£¬¿ª·¢ÈËÔ±¶àÁËÖ®ºó£¬¾Í»áÃæÁÙÅÓ´óϵͳµÄ²¿ÊðЧÂÊ£¬¿ª·¢Ð­Í¬Ð§ÂÊÎÊÌ⡣Ȼºóͨ¹ý·þÎñµÄ²ð·Ö£¬Êý¾ÝµÄ¶Áд·ÖÀë¡¢·Ö¿â·Ö±íµÈ·½Ê½ÖØÐ¼ܹ¹£¬¶øÇÒÕâÖÖ·½Ê½Èç¹ûÒª×öµÄ³¹µ×£¬ÐèÒª»¨·Ñ´óÁ¿ÈËÁ¦ÎïÁ¦¡£

¸öÈ˽¨Ò飬DevOps ½áºÏ×Ô¼º¶ÔÓÚÒµÎñĿǰÒÔ¼°³¤ÆÚµÄ·¢Õ¹Åжϣ¬Äܹ»ÔÚÏîÄ¿³õÆÚʹÓÃ΢·þÎñ¼Ü¹¹£¬¶àΪºóÈËı¸£¡£

Ëæ×Å Docker ÖÜΧ¿ªÔ´ÉçÇøµÄ·¢Õ¹£¬ÈÃ΢·þÎñ¼Ü¹¹µÄ¸ÅÄîÄÜÓиüºÃµÄÒ»¸öÂäµØÊµÊ©µÄ·½°¸¡£²¢ÇÒÔÚÿһ¸ö΢·þÎñÓ¦ÓÃÄÚ²¿£¬¶¼¿ÉÒÔʹÓà DDD£¨Domain-Drive Design£©µÄÁù±ßÐμܹ¹À´½øÐзþÎñÄÚµÄÉè¼Æ¡£¹ØÓÚ DDD µÄһЩ¸ÅÄîÒ²¿ÉÒԲο¼Ö®Ç°Ð´µÄ¼¸ÆªÎÄÕ£ºÁìÓòÇý¶¯Éè¼ÆÕûÀí¡ª¡ª¸ÅÄî&¼Ü¹¹¡¢ÁìÓòÇý¶¯Éè¼ÆÕûÀí¡ª¡ªÊµÌåºÍÖµ¶ÔÏóÉè¼Æ¡¢ÁìÓò·þÎñ¡¢ÁìÓòʼþ¡£

ÇåÎúµÄ΢·þÎñµÄÁìÓò»®·Ö£¬·þÎñÄÚ²¿Óмܹ¹²ã´ÎµÄÓÅÑŵÄʵÏÖ£¬·þÎñ¼äͨ¹ý RPC »òÕßʼþÇý¶¯Íê³É±ØÒªµÄ IPC£¬Ê¹Óà API gateway ½øÐÐËùÓÐ΢·þÎñµÄÇëÇóת·¢£¬·Ç×èÈûµÄÇëÇó½á¹ûºÏ²¢¡£±¾ÎÄÏÂÃæ»á¾ßÌå½éÉÜ£¬ÈçºÎÔÚ·Ö²¼Ê½»·¾³Ï£¬Ò²¿ÉÒÔ¿ìËٴÆðÀ´¾ßÓÐÒÔÉϼ¸µãÌØÕ÷µÄ£¬Î¢·þÎñ¼Ü¹¹ with Docker¡£

·þÎñ·¢ÏÖģʽ

Èç¹ûʹÓà Docker ¼¼ÊõÀ´¼Ü¹¹Î¢·þÎñÌåϵ£¬·þÎñ·¢ÏÖ¾ÍÊÇÒ»¸ö±ØÈ»µÄ¿ÎÌ⡣ĿǰÖ÷Á÷µÄ·þÎñ·¢ÏÖģʽÓÐÁ½ÖÖ£º¿Í»§¶Ë·¢ÏÖģʽ£¬ÒÔ¼°·þÎñ¶Ë·¢ÏÖģʽ¡£

¿Í»§¶Ë·¢ÏÖģʽ

¿Í»§¶Ë·¢ÏÖģʽµÄ¼Ü¹¹Í¼ÈçÏ£º

¿Í»§¶Ë·¢ÏÖģʽµÄµäÐÍʵÏÖÊÇNetflixÌåϵ¼¼Êõ¡£¿Í»§¶Ë´ÓÒ»¸ö·þÎñ×¢²á·þÎñÖÐÐIJéѯËùÓпÉÓ÷þÎñʵÀý¡£¿Í»§¶ËʹÓøºÔؾùºâËã·¨´Ó¶à¸ö¿ÉÓõķþÎñʵÀýÖÐÑ¡Ôñ³öÒ»¸ö£¬È»ºó·¢³öÇëÇ󡣱ȽϵäÐ͵ÄÒ»¸ö¿ªÔ´ÊµÏÖ¾ÍÊÇ Netflix µÄ Eureka¡£

Netflix-Eureka

Eureka µÄ¿Í»§¶ËÊDzÉÓÃ×Ô×¢²áµÄģʽ£¬¿Í»§¶ËÐèÒª¸ºÔð´¦Àí·þÎñʵÀýµÄ×¢²áºÍ×¢Ïú£¬·¢ËÍÐÄÌø¡£

ÔÚʹÓà SpringBoot ¼¯³ÉÒ»¸ö΢·þÎñʱ£¬½áºÏ SpringCloud ÏîÄ¿¿ÉÒԺܷ½±ãµÃʵÏÖ×Ô¶¯×¢²á¡£ÔÚ·þÎñÆô¶¯ÀàÉÏÌí¼Ó@EnableEurekaClient¼´¿ÉÔÚ·þÎñʵÀýÆô¶¯Ê±£¬ÏòÅäÖÃºÃµÄ Eureka ·þÎñ¶Ë×¢²á·þÎñ£¬²¢ÇÒ¶¨Ê±·¢ËÍÒÔÐÄÌø¡£¿Í»§¶ËµÄ¸ºÔؾùºâÓÉ Netflix Ribbon ʵÏÖ¡£·þÎñÍø¹ØÊ¹Óà Netflix Zuul£¬ÈÛ¶ÏÆ÷ʹÓà Netflix Hystrix¡£

³ýÁË·þÎñ·¢ÏÖµÄÅäÌ׿ò¼Ü£¬SpringCloud µÄ Netflix-Feign£¬ÌṩÁËÉùÃ÷ʽµÄ½Ó¿ÚÀ´´¦Àí·þÎñµÄ Rest ÇëÇó¡£µ±È»£¬³ýÁËʹÓà FeignClient£¬Ò²¿ÉÒÔʹÓà Spring RestTemplate¡£ÏîÄ¿ÖÐÈç¹ûʹÓÃ@FeignClient¿ÉÒÔʹ´úÂëµÄ¿ÉÔĶÁÐÔ¸üºÃ£¬Rest API ҲһĿÁËÈ»¡£

·þÎñʵÀýµÄ×¢²á¹ÜÀí¡¢²éѯ£¬¶¼ÊÇͨ¹ýÓ¦ÓÃÄÚµ÷Óà Eureka ÌṩµÄ REST API ½Ó¿Ú£¨µ±È»Ê¹Óà SpringCloud-Eureka ²»ÐèÒª±àдÕⲿ·Ö´úÂ룩¡£ÓÉÓÚ·þÎñ×¢²á¡¢×¢ÏúÊÇͨ¹ý¿Í»§¶Ë×ÔÉí·¢³öÇëÇóµÄ£¬ËùÒÔÕâÖÖģʽµÄÒ»¸öÖ÷ÒªÎÊÌâÊǶÔÓÚ²»Í¬µÄ±à³ÌÓïÑÔ»á×¢²á²»Í¬·þÎñ£¬ÐèҪΪÿÖÖ¿ª·¢ÓïÑÔµ¥¶À¿ª·¢·þÎñ·¢ÏÖÂß¼­¡£ÁíÍ⣬ʹÓà Eureka ʱÐèÒªÏÔʽÅäÖý¡¿µ¼ì²éÖ§³Ö¡£

·þÎñ¶Ë·¢ÏÖģʽ

·þÎñ¶Ë·¢ÏÖģʽµÄ¼Ü¹¹Í¼ÈçÏ£º

¿Í»§¶ËÏò¸ºÔؾùºâÆ÷·¢³öÇëÇ󣬸ºÔؾùºâÆ÷Ïò·þÎñ×¢²á±í·¢³öÇëÇ󣬽«ÇëÇóת·¢µ½×¢²á±íÖпÉÓõķþÎñʵÀý¡£·þÎñʵÀýÒ²ÊÇÔÚ×¢²á±íÖÐ×¢²á£¬×¢ÏúµÄ¡£¸ºÔؾùºâ¿ÉÒÔʹÓÿÉÒÔʹÓà Haproxy »òÕß Nginx¡£·þÎñ¶Ë·¢ÏÖģʽĿǰ»ùÓÚ Docker µÄÖ÷Á÷·½°¸Ö÷ÒªÊÇ Consul¡¢Etcd ÒÔ¼° Zookeeper¡£

Consul

Consul ÌṩÁËÒ»¸ö API ÔÊÐí¿Í»§¶Ë×¢²áºÍ·¢ÏÖ·þÎñ¡£ÆäÒ»ÖÂÐÔÉÏ»ùÓÚRAFTËã·¨¡£Í¨¹ý WAN µÄ Gossip ЭÒ飬¹ÜÀí³ÉÔ±ºÍ¹ã²¥ÏûÏ¢£¬ÒÔÍê³É¿çÊý¾ÝÖÐÐĵÄͬ²½£¬ÇÒÖ§³Ö ACL ·ÃÎÊ¿ØÖÆ¡£Consul »¹ÌṩÁ˽¡¿µ¼ì²é»úÖÆ£¬Ö§³Ö kv ´æ´¢·þÎñ£¨Eureka ²»Ö§³Ö£©¡£Consul µÄһЩ¸üÏêϸµÄ½éÉÜ¿ÉÒԲο¼Ö®Ç°Ð´µÄһƪ£ºDocker ÈÝÆ÷²¿Êð Consul ¼¯Èº¡£

Etcd

Etcd ¶¼ÊÇǿһÖµģ¨Âú×ã CAP µÄ CP£©£¬¸ß¿ÉÓõġ£Etcd Ò²ÊÇ»ùÓÚ RAFT Ë㷨ʵÏÖǿһÖÂÐ﵀ KV Êý¾Ýͬ²½¡£Kubernetes ÖÐʹÓà Etcd µÄ KV ½á¹¹´æ´¢ËùÓжÔÏóµÄÉúÃüÖÜÆÚ¡£

¹ØÓÚ Etcd µÄһЩÄÚ²¿Ô­Àí¿ÉÒÔ¿´ÏÂetcd v3Ô­Àí·ÖÎö

Zookeeper

ZK ×îÔçÓ¦ÓÃÓÚ Hadoop£¬ÆäÌåϵÒѾ­·Ç³£³ÉÊ죬³£±»ÓÃÓÚ´ó¹«Ë¾¡£Èç¹ûÒѾ­ÓÐ×Ô¼ºµÄ ZK ¼¯Èº£¬ÄÇô¿ÉÒÔ¿¼ÂÇÓà ZK À´×ö×Ô¼ºµÄ·þÎñ×¢²áÖÐÐÄ¡£

Zookeeper ͬ Etcd Ò»Ñù£¬Ç¿Ò»ÖÂÐÔ£¬¸ß¿ÉÓÃÐÔ¡£Ò»ÖÂÐÔËã·¨ÊÇ»ùÓÚ Paxos µÄ¡£¶ÔÓÚ΢·þÎñ¼Ü¹¹µÄ³õʼ½×¶Î£¬Ã»ÓбØÒªÓñȽϷ±ÖØµÄ ZK À´×ö·þÎñ·¢ÏÖ¡£

·þÎñ×¢²á

·þÎñ×¢²á±íÊÇ·þÎñ·¢ÏÖÖеÄÒ»¸öÖØÒª×é¼þ¡£³ýÁË Kubernetes¡¢Marathon Æä·þÎñ·¢ÏÖÊÇÄÚÖõÄÄ£¿éÖ®Íâ¡£·þÎñ¶¼ÊÇÐèҪע²áµ½×¢²á±íÉÏ¡£ÉÏÎĽéÉÜµÄ Eureka¡¢consul¡¢etcd ÒÔ¼° ZK ¶¼ÊÇ·þÎñ×¢²á±íµÄÀý×Ó¡£

΢·þÎñÈçºÎ×¢²áµ½×¢²á±íÒ²ÊÇÓÐÁ½ÖֱȽϵäÐ͵Ä×¢²á·½Ê½£º×Ô×¢²áģʽ£¬µÚÈý·½×¢²áģʽ¡£

×Ô×¢²áģʽ Self-registration pattern

ÉÏÎÄÖÐµÄ Netflix-Eureka ¿Í»§¶Ë¾ÍÊÇÒ»¸öµäÐ͵Ä×Ô×¢²áģʽµÄÀý×Ó¡£Ò²¼´Ã¿¸ö΢·þÎñµÄʵÀý±¾Éí£¬ÐèÒª¸ºÔð×¢²áÒÔ¼°×¢Ïú·þÎñ¡£Eureka »¹ÌṩÁËÐÄÌø»úÖÆ£¬À´±£Ö¤×¢²áÐÅÏ¢µÄ׼ȷ£¬¾ßÌåµÄÐÄÌøµÄ·¢Ëͼä¸ôʱ¼ä¿ÉÒÔÔÚ΢·þÎñµÄ SpringBoot ÖнøÐÐÅäÖá£

ÈçÏ£¬¾ÍÊÇʹÓà Eureka ×ö×¢²á±íʱ£¬ÔÚ΢·þÎñ£¨SpringBoot Ó¦Óã©Æô¶¯Ê±»áÓÐÒ»Ìõ·þÎñ×¢²áµÄÐÅÏ¢£º

com.netflix .discovery.DiscoveryClient : DiscoveryClient _ SERVICE-USER/ { your_ip }:service-user :{port}:cc9f93c54a0820c7a845422f9ecc73fb : registering service...

ͬÑù£¬ÔÚÓ¦ÓÃÍ£ÓÃʱ£¬·þÎñʵÀýÐèÒªÖ÷¶¯×¢Ïú±¾ÊµÀýÐÅÏ¢£º

2018-01-04 20:41:37.290 INFO 49244 --- [ Thread-8 ] c.n.e .EurekaDiscoveryClientConfiguration : Unregistering application service - user with eureka with status DOWN

2018 -01 -04 20:41:37.340 INFO 49244 --- [ Thread-8 ] com.netflix.discovery.DiscoveryClient : Shutting down DiscoveryClient ...

2018 -01 -04 20:41:37.381 INFO 49244 --- [ Thread-8 ] com.netflix.discovery.DiscoveryClient : Unregistering ...

2018 -01 -04 20:41:37.559 INFO 49244 --- [ Thread-8 ] com.netflix.discovery.DiscoveryClient : DiscoveryClient _SERVICE-USER /{your_ip}: service-user: {port}: cc9f93c54a0820c7a845422f9ecc73fb - deregister status: 200

×Ô×¢²á·½Ê½ÊDZȽϼòµ¥µÄ·þÎñ×¢²á·½Ê½£¬²»ÐèÒª¶îÍâµÄÉèÊ©»ò´úÀí£¬ÓÉ΢·þÎñʵÀý±¾ÉíÀ´¹ÜÀí·þÎñ×¢²á¡£µ«ÊÇȱµãÒ²ºÜÃ÷ÏÔ£¬±ÈÈç Eureka ĿǰֻÌṩÁË Java ¿Í»§¶Ë£¬ËùÒÔ²»·½±ã¶àÓïÑÔµÄ΢·þÎñÀ©Õ¹¡£ÒòΪÐèҪ΢·þÎñ×Ô¼ºÈ¥¹ÜÀí·þÎñ×¢²áÂß¼­£¬ËùÒÔ΢·þÎñʵÏÖÒ²ñîºÏÁË·þÎñ×¢²áºÍÐÄÌø»úÖÆ¡£¿çÓïÑÔÐԱȽϲ

µÚÈý·½×¢²áģʽ Third party registration pattern

µÚÈý·½×¢²á£¬Ò²¼´·þÎñ×¢²áµÄ¹ÜÀí£¨×¢²á¡¢×¢Ïú·þÎñ£©Í¨¹ýÒ»¸öרÃŵķþÎñ¹ÜÀíÆ÷£¨Registar£©À´¸ºÔð¡£Registrator ¾ÍÊÇÒ»¸ö¿ªÔ´µÄ·þÎñ¹ÜÀíÆ÷µÄʵÏÖ¡£Registrator ÌṩÁ˶ÔÓÚ Etcd ÒÔ¼° Consul µÄ×¢²á±í·þÎñÖ§³Ö¡£

Registrator ×÷Ϊһ¸ö´úÀí·þÎñ£¬ÐèÒª²¿Êð¡¢ÔËÐÐÔÚ΢·þÎñËùÔڵķþÎñÆ÷»òÕßÐéÄâ»úÖС£±È½Ï¼òµ¥µÄ°²×°·½Ê½¾ÍÊÇͨ¹ý Docker£¬ÒÔÈÝÆ÷µÄ·½Ê½À´ÔËÐС£Èý·½×¢²áģʽµÄ¼Ü¹¹Í¼ÈçÏ£º

ͨ¹ýÌí¼ÓÒ»¸ö·þÎñ¹ÜÀíÆ÷£¬Î¢·þÎñʵÀý²»ÔÙÖ±½ÓÏò×¢²áÖÐÐÄ×¢²á£¬×¢Ïú¡£ÓÉ·þÎñ¹ÜÀíÆ÷£¨Registar£©Í¨¹ý¶©ÔÄ·þÎñ£¬¸ú×ÙÐÄÌø£¬À´·¢ÏÖ¿ÉÓõķþÎñʵÀý£¬²¢Ïò×¢²áÖÐÐÄ£¨consul¡¢etcd µÈ£©×¢²á£¬×¢ÏúʵÀý£¬ÒÔ¼°·¢ËÍÐÄÌø¡£ÕâÑù¾Í¿ÉÒÔʵÏÖ·þÎñ·¢ÏÖ×é¼þºÍ΢·þÎñ¼Ü¹¹µÄ½âñî¡£

Registrator ÅäºÏ Consul£¬ÒÔ¼° Consul Template ´î½¨·þÎñ·¢ÏÖÖÐÐÄ£¬¿ÉÒԲο¼£º Scalable Architecture DR CoN: Docker, Registrator, Consul, Consul Template and Nginx ¡£´ËÎÄʾÀýÁË Nginx À´×ö¸ºÔؾùºâ£¬ÔÚ¾ßÌåµÄʵʩ¹ý³ÌÖÐÒ²¿ÉÒÔÓà Haproxy »òÆäËû·½°¸½øÐÐÌæ´ú¡£

С½á

³ýÁËÒÔÉϼ¸ÖÖ×ö·þÎñ·¢Ïֵļ¼Êõ£¬Kubernetes ×Ô´øÁË·þÎñ·¢ÏÖÄ£¿é£¬¸ºÔð´¦Àí·þÎñʵÀýµÄ×¢²áºÍ×¢Ïú¡£Kubernetes Ò²ÔÚÿ¸ö¼¯Èº½ÚµãÉÏÔËÐдúÀí£¬À´ÊµÏÖ·þÎñ¶Ë·¢ÏÖ·ÓÉÆ÷µÄ¹¦ÄÜ¡£Èç¹û±àÅż¼ÊõʹÓÃµÄ k8n£¬¿ÉÒÔÓà k8n µÄÒ»ÕûÌ× Docker ΢·þÎñ·½°¸£¬¶Ô k8n ¸ÐÐËȤµÄ¿ÉÒÔÔĶÁÏÂKubernetes ¼Ü¹¹Éè¼ÆÓëºËÐÄÔ­Àí¡£

ÔÚʵ¼ÊµÄ¼¼ÊõÑ¡ÐÍÖУ¬×îÖ÷Òª»¹ÊÇÒª½áºÏÒµÎñ¡¢ÏµÍ³µÄδÀ´·¢Õ¹µÄÌØÕ÷½øÐкÏÀíÅжϡ£

ÔÚ CAP ÀíÂÛÖС£Eureka Âú×ãÁË AP£¬Consul ÊÇ CA£¬ZK ºÍ Etcd ÊÇ CP¡£ ÔÚ·Ö²¼Ê½³¡¾°Ï Eureka ºÍ Consul ¶¼Äܱ£Ö¤¿ÉÓÃÐÔ¡£¶ø´î½¨ Eureka ·þÎñ»áÏà¶Ô¸ü¿ìËÙ£¬ÒòΪ²»ÐèÒª´î½¨¶îÍâµÄ¸ß¿ÉÓ÷þÎñ×¢²áÖÐÐÄ£¬ÔÚС¹æÄ£·þÎñÆ÷ʵÀýʱ£¬Ê¹Óà Eureka ¿ÉÒÔ½Úʡһ¶¨³É±¾¡£

Eureka¡¢Consul ¶¼ÌṩÁË¿ÉÒԲ鿴·þÎñ×¢²áÊý¾ÝµÄ WebUI ×é¼þ¡£Consul »¹ÌṩÁË KV ´æ´¢£¬Ö§³ÖÖ§³Ö http ºÍ dns ½Ó¿Ú¡£¶ÔÓÚ´´Òµ¹«Ë¾×ʼ´î½¨Î¢·þÎñ£¬±È½ÏÍÆ¼öÕâÁ½Õß¡£

ÔÚ¶àÊý¾ÝÖÐÐÄ·½Ã棬Consul ×Ô´øÊý¾ÝÖÐÐÄµÄ WAN ·½°¸¡£ZK ºÍ Etcd ¾ù²»Ìṩ¶àÊý¾ÝÖÐÐŦÄܵÄÖ§³Ö£¬ÐèÒª¶îÍâµÄ¿ª·¢¡£

¿çÓïÑÔÐÔÉÏ£¬Zookeeper ÐèҪʹÓÃÆäÌṩµÄ¿Í»§¶Ë api£¬¿çÓïÑÔÖ§³Ö½ÏÈõ¡£Etcd¡¢Eureka ¶¼Ö§³Ö http£¬Etcd »¹Ö§³Ö grpc¡£Consul ³ýÁË http Ö®Í⻹ÌṩÁË DNS µÄÖ§³Ö¡£

°²È«·½Ã棬Consul£¬Zookeeper Ö§³Ö ACL£¬ÁíÍâ Consul¡¢Etcd Ö§³Ö°²È«Í¨µÀ Https¡£

SpringCloud Ŀǰ¶ÔÓÚ Eureka¡¢Consul¡¢Etcd¡¢ZK ¶¼ÓÐÏàÓ¦µÄÖ§³Ö¡£

Consul ºÍ Docker Ò»Ñù£¬¶¼ÊÇÓà Go ÓïÑÔʵÏÖ£¬»ùÓÚ Go ÓïÑÔµÄ΢·þÎñÓ¦ÓÿÉÒÔÓÅÏÈ¿¼ÂÇÓà Consul¡£

·þÎñ¼äµÄ IPC »úÖÆ

°´ÕÕ΢·þÎñµÄ¼Ü¹¹Ìåϵ£¬½â¾öÁË·þÎñ·¢ÏÖµÄÎÊÌâÖ®ºó¡£¾ÍÐèҪѡÔñºÏÊʵķþÎñ¼äͨÐŵĻúÖÆ¡£Èç¹ûÊÇÔÚ SpringBoot Ó¦ÓÃÖУ¬Ê¹ÓûùÓÚ Http ЭÒéµÄ REST API ÊÇÒ»ÖÖͬ²½µÄ½â¾ö·½°¸¡£¶øÇÒ Restful ·ç¸ñµÄ API ¿ÉÒÔʹÿ¸ö΢·þÎñÓ¦Óøü¼ÓÇ÷ÓÚ×ÊÔ´»¯£¬Ê¹ÓÃÇáÁ¿¼¶µÄЭÒéÒ²ÊÇ΢·þÎñÒ»Ö±ÌᳫµÄ¡£

Èç¹ûÿ¸ö΢·þÎñÊÇʹÓà DDD£¨Domain-Driven Design£©Ë¼ÏëµÄ»°£¬ÄÇôÐèҪÿ¸ö΢·þÎñ¾¡Á¿²»Ê¹ÓÃͬ²½µÄ RPC »úÖÆ¡£Òì²½µÄ»ùÓÚÏûÏ¢µÄ·½Ê½±ÈÈç AMQP »òÕß STOMP£¬À´ËÉñîºÏ΢·þÎñ¼äµÄÒÀÀµ»áÊǺܺõÄÑ¡Ôñ¡£Ä¿Ç°»ùÓÚÏûÏ¢µÄµã¶ÔµãµÄ pub/sub µÄ¿ò¼ÜÑ¡ÔñÒ²±È½Ï¶à¡£ÏÂÃæ¾ßÌå½éÉÜÏÂÁ½ÖÖ IPC µÄһЩ·½°¸¡£

ͬ²½

¶ÔÓÚͬ²½µÄÇëÇó/ÏìӦģʽµÄͨÐÅ·½Ê½¡£¿ÉÒÔÑ¡Ôñ»ùÓÚ Restful ·ç¸ñµÄ Http ЭÒé½øÐзþÎñ¼äͨÐÅ£¬»òÕß¿çÓïÑÔÐÔºÜºÃµÄ Thrift ЭÒé¡£Èç¹ûÊÇʹÓô¿ Java ÓïÑÔµÄ΢·þÎñ£¬Ò²¿ÉÒÔʹÓà Dubbo¡£Èç¹ûÊÇ SpringBoot ¼¯³ÉµÄ΢·þÎñ¼Ü¹¹Ìåϵ£¬½¨ÒéÑ¡Ôñ¿çÓïÑÔÐԺá¢Spring ÉçÇøÖ§³Ö±È½ÏºÃµÄ RPC¡£

Dubbo

DubboÊÇÓɰ¢Àï°Í°Í¿ª·¢µÄ¿ªÔ´µÄ Java ¿Í»§¶ËµÄ RPC ¿ò¼Ü¡£Dubbo »ùÓÚ TCP ЭÒéµÄ³¤Á¬½Ó½øÐÐÊý¾Ý´«Êä¡£´«Êä¸ñʽÊÇʹÓà Hessian ¶þ½øÖÆÐòÁл¯¡£·þÎñ×¢²áÖÐÐÄ¿ÉÒÔͨ¹ý Zookeeper ʵÏÖ¡£

ApacheThrift

ApacheThrift ÊÇÓÉ Facebook ¿ª·¢µÄ RPC ¿ò¼Ü¡£Æä´úÂëÉú³ÉÒýÇæ¿ÉÒÔÔÚ¶àÖÖÓïÑÔÖУ¬Èç C++¡¢ Java¡¢Python¡¢PHP¡¢Ruby¡¢Erlang¡¢Perl µÈ´´½¨¸ßЧµÄ·þÎñ¡£´«ÊäÊý¾Ý²ÉÓöþ½øÖƸñʽ£¬ÆäÊý¾Ý°üÒª±ÈʹÓà Json »òÕß XML ¸ñʽµÄ HTTP ЭÒéС¡£¸ß²¢·¢£¬´óÊý¾Ý³¡¾°Ï¸üÓÐÓÅÊÆ¡£

Rest

Rest »ùÓÚ HTTP ЭÒ飬HTTP ЭÒé±¾Éí¾ßÓÐÓïÒåµÄ·á¸»ÐÔ¡£Ëæ×Å Springboot ±»¹ã·ºÊ¹Óã¬Ô½À´Ô½¶àµÄ»ùÓÚ Restful ·ç¸ñµÄ API Á÷ÐÐÆðÀ´¡£REST ÊÇ»ùÓÚ HTTP ЭÒéµÄ£¬²¢ÇÒ´ó¶àÊý¿ª·¢ÕßÒ²ÊÇÊìÖª HTTP µÄ¡£

ÕâÀïÁíÍâÌáÒ»µã£¬ºÜ¶à¹«Ë¾»òÕßÍŶÓÒ²ÊÇʹÓÃSpringbootµÄ£¬Ò²ÔÚ˵×Ô¼ºÊÇ»ùÓÚ Restful ·ç¸ñµÄ¡£µ«ÊÇÊÂʵÆäʵÍùÍùÊÇʵʩµÃ²¢²»µ½Î»¡£¶ÔÓÚÄãµÄ Restful ÊÇ·ñÊÇÕæµÄ Restful£¬¿ÉÒԲο¼ÕâÆªÎÄÕ£¬¶ÔÓÚ Restful ·ç¸ñ API µÄ³ÉÊì¶È½øÐÐÁËËĸö²ã´ÎµÄ·ÖÎö£º Richardson Maturity Model steps toward the glory of REST¡£

Èç¹ûʹÓÃSpringbootµÄ»°£¬ÎÞÂÛʹÓÃʲô·þÎñ·¢ÏÖ»úÖÆ£¬¶¼¿ÉÒÔͨ¹ý Spring µÄRestTemplateÀ´×ö»ù´¡µÄHttpÇëÇó·â×°¡£

Èç¹ûʹÓõÄǰÎÄÌáµ½µÄNetflix-EurekaµÄ»°£¬¿ÉÒÔʹÓÃNetflix-Feign¡£FeignÊÇÒ»¸öÉùÃ÷ʽ Web Service ¿Í»§¶Ë¡£¿Í»§¶ËµÄ¸ºÔؾùºâʹÓà Netflix-Ribbon¡£

Òì²½

ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬Åųý´¿´âµÄ¡°Ê¼þÇý¶¯¼Ü¹¹¡±£¬Ê¹ÓÃÏûÏ¢¶ÓÁеij¡¾°Ò»°ãÊÇΪÁ˽øÐÐ΢·þÎñÖ®¼äµÄ½âñî¡£·þÎñÖ®¼ä²»ÐèÒªÁ˽âÊÇÓÉÄĸö·þÎñʵÀýÀ´Ïû·Ñ»òÕß·¢²¼ÏûÏ¢¡£

Ö»Òª´¦ÀíºÃ×Ô¼ºÁìÓò·¶Î§µÄÂß¼­£¬È»ºóͨ¹ýÏûϢͨµÀÀ´·¢²¼£¬»òÕß¶©ÔÄ×Ô¼º¹Ø×¢µÄÏûÏ¢¾Í¿ÉÒÔ¡£Ä¿Ç°¿ªÔ´µÄÏûÏ¢¶ÓÁм¼ÊõÒ²ºÜ¶à¡£±ÈÈç Apache Kafka£¬RabbitMQ£¬Apache ActiveMQ ÒÔ¼°°¢Àï°Í°ÍµÄ RocketMQ ĿǰÒѾ­³ÉΪ Apache ÏîĿ֮һ¡£ÏûÏ¢¶ÓÁеÄÄ£ÐÍÖУ¬Ö÷ÒªµÄÈý¸ö×é³É¾ÍÊÇ£º

Producer£ºÉú²úÏûÏ¢£¬½«ÏûϢдÈë channel¡£

Message Broker£ºÏûÏ¢´úÀí£¬½«Ð´Èë channel µÄÏûÏ¢°´¶ÓÁеĽṹ½øÐйÜÀí¡£¸ºÔð´æ´¢/ת·¢ÏûÏ¢¡£Broker Ò»°ãÊÇÐèÒªµ¥¶À´î½¨¡¢ÅäÖõļ¯Èº£¬¶øÇÒ±ØÐëÊǸ߿ÉÓõġ£

Consumer£ºÏûÏ¢µÄÏû·ÑÕß¡£Ä¿Ç°´ó¶àÊýµÄÏûÏ¢¶ÓÁж¼ÊDZ£Ö¤ÏûÏ¢ÖÁÉÙ±»Ïû·ÑÒ»´Î¡£ËùÒÔ¸ù¾ÝʹÓõÄÏûÏ¢¶ÓÁÐÉèÊ©²»Í¬£¬Ïû·ÑÕßÒª×öºÃÃݵȡ£

²»Í¬µÄÏûÏ¢¶ÓÁеÄʵÏÖ£¬ÏûϢģÐͲ»Í¬¡£¸÷¸ö¿ò¼ÜµÄÌØÐÔÒ²²»Í¬£º

RabbitMQ

RabbitMQ ÊÇ»ùÓÚ AMQP ЭÒéµÄ¿ªÔ´ÊµÏÖ£¬ÓÉÒÔ¸ßÐÔÄÜ¡¢¿ÉÉìËõÐÔ³öÃûµÄ Erlang д³É¡£Ä¿Ç°¿Í»§¶ËÖ§³Ö Java¡¢.Net/C# ºÍ Erlang¡£ÔÚ AMQP£¨Advanced Message Queuing Protocol£©µÄ×é¼þÖУ¬Broker ÖпÉÒÔ°üº¬¶à¸öExchange£¨½»»»»ú£©×é¼þ¡£Exchange ¿ÉÒ԰󶨶à¸ö Queue ÒÔ¼°ÆäËû Exchange¡£

ÏûÏ¢»á°´ÕÕ Exchange ÖÐÉèÖÃµÄ Routing ¹æÔò£¬·¢Ë͵½ÏàÓ¦µÄ Message Queue¡£ÔÚ Consumer Ïû·ÑÁËÕâ¸öÏûÏ¢Ö®ºó£¬»á¸ú Broker ½¨Á¢Á¬½Ó¡£·¢ËÍÏû·ÑÏûÏ¢µÄ֪ͨ¡£Ôò Message Queue ²Å»á½«Õâ¸öÏûÏ¢ÒÆ³ý¡£

Kafka

Kafka ÊÇÒ»¸ö¸ßÐÔÄܵĻùÓÚ·¢²¼/¶©ÔĵĿçÓïÑÔ·Ö²¼Ê½ÏûϢϵͳ¡£Kafka µÄ¿ª·¢ÓïÑÔΪ Scala¡£Æä±È½ÏÖØÒªµÄÌØÐÔÊÇ£º

ÒÔʱ¼ä¸´ÔÓ¶ÈΪO(1)µÄ·½Ê½¿ìËÙÏûÏ¢³Ö¾Ã»¯£»

¸ßÍÌÍÂÂÊ£»

Ö§³Ö·þÎñ¼äµÄÏûÏ¢·ÖÇø£¬¼°·Ö²¼Ê½Ïû·Ñ£¬Í¬Ê±±£Ö¤ÏûϢ˳Ðò´«Ê䣻

Ö§³ÖÔÚÏßˮƽÀ©Õ¹,×Ô´ø¸ºÔؾùºâ£»

Ö§³ÖÖ»Ïû·ÑÇÒ½öÏû·ÑÒ»´Î£¨Exactly Once£©Ä£Ê½µÈµÈ¡£

˵¸öȱµã£º ¹ÜÀí½çÃæÊǸö±È½Ï¼¦ÀßÁ˵㣬¿ÉÒÔʹÓÿªÔ´µÄkafka-manager

Æä¸ßÍÌ͵ÄÌØÐÔ£¬³ýÁË¿ÉÒÔ×÷Ϊ΢·þÎñÖ®¼äµÄÏûÏ¢¶ÓÁУ¬Ò²¿ÉÒÔÓÃÓÚÈÕÖ¾ÊÕ¼¯£¬ ÀëÏß·ÖÎö£¬ ʵʱ·ÖÎöµÈ¡£

Kafka ¹Ù·½ÌṩÁË Java °æ±¾µÄ¿Í»§¶Ë API£¬Kafka ÉçÇøÄ¿Ç°Ò²Ö§³Ö¶àÖÖÓïÑÔ£¬°üÀ¨ PHP¡¢Python¡¢Go¡¢C/C++¡¢Ruby¡¢NodeJS µÈ¡£

ActiveMQ

ActiveMQ ÊÇ»ùÓÚ JMS£¨Java Messaging Service£©ÊµÏÖµÄ JMSProvider¡£JMSÖ÷ÒªÌṩÁËÁ½ÖÖÀàÐ͵ÄÏûÏ¢£ºµã¶Ôµã£¨Point-to-Point£©ÒÔ¼°·¢²¼/¶©ÔÄ£¨Publish/Subscribe£©¡£Ä¿Ç°¿Í»§¶ËÖ§³Ö Java¡¢C¡¢C++¡¢ C#¡¢Ruby¡¢Perl¡¢Python¡¢PHP¡£¶øÇÒ ActiveMQ Ö§³Ö¶àÖÖЭÒ飺Stomp¡¢AMQP¡¢MQTT ÒÔ¼° OpenWire¡£

RocketMQ/ONS

RocketMQ ÊÇÓɰ¢Àï°Í°ÍÑз¢¿ªÔ´µÄ¸ß¿ÉÓ÷ֲ¼Ê½ÏûÏ¢¶ÓÁС£ONSÊÇÌṩÉÌÒµ°æµÄ¸ß¿ÉÓü¯Èº¡£ONS Ö§³Ö pull/push¡£¿ÉÖ§³ÖÖ÷¶¯ÍÆËÍ£¬°ÙÒÚ¼¶±ðÏûÏ¢¶Ñ»ý¡£ONS Ö§³ÖÈ«¾ÖµÄ˳ÐòÏûÏ¢£¬ÒÔ¼°ÓÐÓѺõĹÜÀíÒ³Ãæ£¬¿ÉÒÔºÜºÃµÄ¼à¿ØÏûÏ¢¶ÓÁеÄÏû·ÑÇé¿ö£¬²¢ÇÒÖ§³ÖÊÖ¶¯´¥·¢ÏûÏ¢¶à´ÎÖØ·¢¡£

С½á

ͨ¹ýÉÏÆªµÄ΢·þÎñµÄ·þÎñ·¢ÏÖ»úÖÆ£¬¼ÓÉÏ Restful API£¬¿ÉÒÔ½â¾ö΢·þÎñ¼äµÄͬ²½·½Ê½µÄ½ø³Ì¼äͨÐÅ¡£µ±È»£¬¼ÈȻʹÓÃÁË΢·þÎñ£¬¾ÍÏ£ÍûËùÓеÄ΢·þÎñÄÜÓкÏÀíµÄÏÞ½çÉÏÏÂÎÄ£¨ÏµÍ³±ß½ç£©¡£

΢·þÎñÖ®¼äµÄͬ²½Í¨ÐÅÓ¦¾¡Á¿±ÜÃ⣬ÒÔ·ÀÖ¹·þÎñ¼äµÄÁìÓòÄ£ÐÍ»¥ÏàÇÖÈ롣ΪÁ˱ÜÃâÕâÖÖÇé¿ö£¬¾Í¿ÉÒÔÔÚ΢·þÎñµÄ¼Ü¹¹ÖÐʹÓÃÒ»²ãAPI gateway£¨»áÔÚÏÂÎĽéÉÜ£©¡£ËùÓеÄ΢·þÎñͨ¹ýAPI gateway½øÐÐͳһµÄÇëÇóµÄת·¢£¬ºÏ²¢¡£²¢ÇÒAPI gatewayÒ²ÐèÒªÖ§³Öͬ²½ÇëÇó£¬ÒÔ¼°NIOµÄÒì²½µÄÇëÇ󣨿ÉÒÔÌá¸ßÇëÇóºÏ²¢µÄЧÂÊÒÔ¼°ÐÔÄÜ£©¡£

ÏûÏ¢¶ÓÁпÉÒÔÓÃÓÚ΢·þÎñ¼äµÄ½âñî¡£ÔÚ»ùÓÚDockerµÄ΢·þÎñµÄ·þÎñ¼¯Èº»·¾³Ï£¬ÍøÂç»·¾³»á±ÈÒ»°ãµÄ·Ö²¼Ê½¼¯Èº¸´ÔÓ¡£Ñ¡ÔñÒ»Öָ߿ÉÓõķֲ¼Ê½ÏûÏ¢¶ÓÁÐʵÏÖ¼´¿É¡£Èç¹û×Ô¼º´î½¨ÖîÈçKafka¡¢RabbitMQ¼¯Èº»·¾³µÄ»°£¬ÄǶÔÓÚBrokerÉèÊ©µÄ¸ß¿ÉÓÃÐÔ»áÒªÇóºÜ¸ß¡£

»ùÓÚSpringbootµÄ΢·þÎñµÄ»°£¬±È½ÏÍÆ¼öʹÓÃKafka »òÕßONS¡£ËäÈ»ONSÊÇÉÌÓõ쬵«ÊÇÒ×ÓÚ¹ÜÀíÒÔ¼°Îȶ¨ÐԸߣ¬ÓÈÆä¶ÔÓÚ±ØÒª³¡¾°²ÅÒÀÀµÓÚÏûÏ¢¶ÓÁнøÐÐͨÐŵÄ΢·þÎñ¼Ü¹¹À´Ëµ,»á¸üÊʺϡ£Èç¹û¿¼Âǵ½»á´æÔÚÈÕÖ¾ÊÕ¼¯£¬ÊµÊ±·ÖÎöµÈ³¡¾°£¬Ò²¿ÉÒԴKafka¼¯Èº¡£Ä¿Ç°°¢ÀïÔÆÒ²ÓÐÁË»ùÓÚKafkaµÄÉÌÓü¯ÈºÉèÊ©¡£

ʹÓà API Gateway ´¦Àí΢·þÎñÇëÇóת·¢¡¢ºÏ²¢

Ç°ÃæÖ÷Òª½éÉÜÁËÈçºÎ½â¾ö΢·þÎñµÄ·þÎñ·¢ÏÖºÍͨÐÅÎÊÌâ¡£ÔÚ΢·þÎñµÄ¼Ü¹¹ÌåϵÖУ¬Ê¹ÓÃDDD˼Ïë»®·Ö·þÎñ¼äµÄÏÞ½çÉÏÏÂÎĵÄʱºò£¬»á¾¡Á¿¼õÉÙ΢·þÎñÖ®¼äµÄµ÷Óá£ÎªÁ˽âñî΢·þÎñ£¬±ãÓÐÁË»ùÓÚAPI Gateway·½Ê½µÄÓÅ»¯·½°¸¡£

½âñî΢·þÎñµÄµ÷ÓÃ

±ÈÈ磬ÏÂÃæÒ»¸ö³£¼ûµÄÐèÇ󳡾°¡ª¡ª¡°Óû§¶©µ¥ÁÐ±í¡±µÄÒ»¸ö¾ÛºÏÒ³Ãæ¡£ÐèÒªÇëÇó¡±Óû§·þÎñ¡°»ñÈ¡»ù´¡Óû§ÐÅÏ¢£¬ÒÔ¼°¡±¶©µ¥·þÎñ¡°»ñÈ¡¶©µ¥ÐÅÏ¢£¬ÔÙͨ¹ýÇëÇó¡°ÉÌÆ··þÎñ¡±»ñÈ¡¶©µ¥ÁбíÖеÄÉÌÆ·Í¼Æ¬¡¢±êÌâµÈÐÅÏ¢¡£ÈçÏÂͼËùʾµÄ³¡¾° £º

Èç¹ûÈÿͻ§¶Ë£¨±ÈÈçH5¡¢Android¡¢iOS£©·¢³ö¶à¸öÇëÇóÀ´½â¾ö¶à¸öÐÅÏ¢¾ÛºÏ£¬Ôò»áÔö¼Ó¿Í»§¶ËµÄ¸´ÔÓ¶È¡£±È½ÏºÏÀíµÄ·½Ê½¾ÍÊÇÔö¼ÓAPI Gateway²ã¡£API Gateway¸ú΢·þÎñÒ»Ñù£¬Ò²¿ÉÒÔ²¿Êð¡¢ÔËÐÐÔÚDockerÈÝÆ÷ÖУ¬Ò²ÊÇÒ»¸öSpringbootÓ¦Óá£ÈçÏ£¬Í¨¹ýGateway API½øÐÐת·¢ºó£º

ËùÓеÄÇëÇóµÄÐÅÏ¢£¬ÓÉGateway½øÐоۺϣ¬GatewayÒ²ÊǽøÈëϵͳµÄΨһ½Úµã¡£²¢ÇÒGatewayºÍËùÓÐ΢·þÎñ£¬ÒÔ¼°Ìṩ¸ø¿Í»§¶ËµÄÒ²ÊÇRestful·ç¸ñAPI¡£Gateway²ãµÄÒýÈë¿ÉÒԺܺõĽâ¾öÐÅÏ¢µÄ¾ÛºÏÎÊÌâ¡£¶øÇÒ¿ÉÒÔ¸üºÃµÃÊÊÅ䲻ͬµÄ¿Í»§¶ËµÄÇëÇ󣬱ÈÈçH5µÄÒ³Ãæ²»ÐèҪչʾÓû§ÐÅÏ¢£¬¶øiOS¿Í»§¶ËÐèҪչʾÓû§ÐÅÏ¢£¬ÔòÖ»ÐèÒªÌí¼ÓÒ»¸öGateway APIÇëÇó×ÊÔ´¼´¿É£¬Î¢·þÎñ²ãµÄ×ÊÔ´²»ÐèÒª½øÐбä¸ü¡£

API Gateway µÄÌØµã

API gateway³ýÁË¿ÉÒÔ½øÐÐÇëÇóµÄºÏ²¢¡¢×ª·¢¡£»¹ÐèÒªÓÐÆäËûµÄÌØµã£¬²ÅÄܳÉΪһ¸öÍêÕûµÄGateway¡£

ÏìӦʽ±à³Ì

GatewayÊÇËùÓпͻ§¶ËÇëÇóµÄÈë¿Ú¡£ÀàËÆFacadeģʽ¡£ÎªÁËÌá¸ßÇëÇóµÄÐÔÄÜ£¬×îºÃÑ¡ÔñÒ»Ì×·Ç×èÈûI/OµÄ¿ò¼Ü¡£ÔÚһЩÐèÒªÇëÇó¶à¸ö΢·þÎñµÄ³¡¾°Ï£¬¶ÔÓÚÿ¸ö΢·þÎñµÄÇëÇó²»Ò»¶¨ÐèҪͬ²½¡£Ç°ÎľÙÀýµÄ¡°Óû§¶©µ¥ÁÐ±í¡±µÄÀý×ÓÖУ¬»ñÈ¡Óû§ÐÅÏ¢£¬ÒÔ¼°»ñÈ¡¶©µ¥ÁÐ±í£¬¾ÍÊÇÁ½¸ö¶ÀÁ¢ÇëÇó¡£

Ö»ÓлñÈ¡¶©µ¥µÄÉÌÆ·ÐÅÏ¢£¬ÐèÒªµÈ¶©µ¥ÐÅÏ¢·µ»ØÖ®ºó£¬¸ù¾Ý¶©µ¥µÄÉÌÆ·idÁбíÔÙÈ¥ÇëÇóÉÌÆ·Î¢·þÎñ¡£ÎªÁ˼õÉÙÕû¸öÇëÇóµÄÏìӦʱ¼ä£¬ÐèÒªGatewayÄܹ»²¢·¢´¦ÀíÏ໥¶ÀÁ¢µÄÇëÇó¡£Ò»ÖÖ½â¾ö·½°¸¾ÍÊDzÉÓÃÏìӦʽ±à³Ì¡£

ĿǰʹÓÃJava¼¼ÊõÕ»µÄÏìӦʽ±à³Ì·½Ê½ÓУ¬Java8µÄCompletableFuture£¬ÒÔ¼°ReactiveXÌṩµÄ»ùÓÚJVMµÄʵÏÖ-RxJava¡£

ReactiveXÊÇÒ»¸öʹÓÿɹ۲ìÊý¾ÝÁ÷½øÐÐÒì²½±à³ÌµÄ±à³Ì½Ó¿Ú£¬ReactiveX½áºÏÁ˹۲ìÕßģʽ¡¢µü´úÆ÷ģʽºÍº¯Êýʽ±à³ÌµÄ¾«»ª¡£³ýÁËRxJava»¹ÓÐRxJS,RX.NETµÈ¶àÓïÑÔµÄʵÏÖ¡£

¶ÔÓÚGatewayÀ´Ëµ£¬RxJavaÌṩµÄObservable¿ÉÒԺܺõĽâ¾ö²¢ÐеĶÀÁ¢I/OÇëÇ󣬲¢ÇÒÈç¹û΢·þÎñÏîÄ¿ÖÐʹÓÃJava8£¬ÍŶӳÉÔ±»á¶ÔRxJavaµÄº¯ÊýѧϰÎüÊÕ»á¸ü¿ì¡£Í¬Ñù»ùÓÚLambda·ç¸ñµÄÏìӦʽ±à³Ì£¬¿ÉÒÔʹ´úÂë¸ü¼Ó¼ò½à¡£¹ØÓÚRxJavaµÄÏêϸ½éÉÜ¿ÉÒÔ¿ÉÒÔÔĶÁRxJavaÎĵµºÍ½Ì³Ì¡£

ͨ¹ýÏìӦʽ±à³ÌµÄObservableģʽ£¬¿ÉÒԺܼò½à¡¢·½±ãµÃ´´½¨Ê¼þÁ÷¡¢Êý¾ÝÁ÷£¬ÒÔ¼°Óüò½àµÄº¯Êý½øÐÐÊý¾ÝµÄ×éºÏºÍת»»£¬Í¬Ê±¿ÉÒÔ¶©ÔÄÈκοɹ۲ìµÄÊý¾ÝÁ÷²¢Ö´ÐвÙ×÷¡£

ͨ¹ýʹÓÃRxJava,¡°Óû§¶©µ¥ÁÐ±í¡±µÄ×ÊÔ´ÇëÇóʱÐòͼ£º

ÏìӦʽ±à³Ì¿ÉÒÔ¸üºÃµÄ´¦Àí¸÷ÖÖÏß³Ìͬ²½¡¢²¢·¢ÇëÇó£¬Í¨¹ýObservablesºÍSchedulersÌṩÁË͸Ã÷µÄÊý¾ÝÁ÷¡¢Ê¼þÁ÷µÄÏ̴߳¦Àí¡£ÔÚÃô½Ý¿ª·¢Ä£Ê½Ï£¬ÏìӦʽ±à³Ìʹ´úÂë¸ü¼Ó¼ò½à£¬¸üºÃά»¤¡£

¼øÈ¨

Gateway×÷ΪϵͳµÄΨһÈë¿Ú£¬»ùÓÚ΢·þÎñµÄËùÓмøÈ¨£¬¶¼¿ÉÒÔÎ§ÈÆGatewayÈ¥×ö¡£ÔÚSpringboot¹¤³ÌÖУ¬»ù´¡µÄÊÚȨ¿ÉÒÔʹÓÃspring-boot-starter-securityÒÔ¼°Spring Security£¨Spring SecurityÒ²¿ÉÒÔ¼¯³ÉÔÚSpring MVCÏîÄ¿ÖУ©¡£

Spring SecurityÖ÷ҪʹÓÃAOP£¬¶Ô×ÊÔ´ÇëÇó½øÐÐÀ¹½Ø£¬ÄÚ²¿Î¬»¤ÁËÒ»¸ö½ÇÉ«µÄFilter Chain¡£ÒòΪ΢·þÎñ¶¼ÊÇͨ¹ýGatewayÇëÇóµÄ£¬ËùÒÔ΢·þÎñµÄ@Secured¿ÉÒÔ¸ù¾ÝGatewayÖв»Í¬µÄ×ÊÔ´µÄ½ÇÉ«¼¶±ð½øÐÐÉèÖá£

Spring SecurityÌṩÁË»ù´¡µÄ½ÇÉ«µÄУÑé½Ó¿Ú¹æ·¶¡£µ«¿Í»§¶ËÇëÇóµÄTokenÐÅÏ¢µÄ¼ÓÃÜ¡¢´æ´¢ÒÔ¼°ÑéÖ¤£¬ÐèÒªÓ¦ÓÃ×Ô¼ºÍê³É¡£¶ÔÓÚToken¼ÓÃÜÐÅÏ¢µÄ´æ´¢¿ÉÒÔʹÓÃRedis¡£

ÕâÀïÔÙ¶àÌáÒ»µã£¬ÎªÁ˱£Ö¤Ò»Ð©¼ÓÃÜÐÅÏ¢µÄ¿É±äÐÔ£¬×îºÃÔÚÒ»¿ªÊ¼Éè¼ÆTokenÄ£¿éµÄʱºò¾Í¿¼Âǵ½Ö§³Ö¶à¸ö°æ±¾ÃÜÔ¿£¬ÒÔ·ÀÖ¹ÍòÒ»ÄÚ²¿ÃÜÔ¿±»Ð¹Â¶£¨Ö®Ç°ÌýÒ»¸öÅóÓÑ˵Æä¹«Ë¾µÄToken¼ÓÃÜ´úÂë±»Ô±¹¤¹«²¼³öÈ¥£©¡£

ÖÁÓÚ¼ÓÃÜËã·¨£¬ÒÔ¼°¾ßÌåµÄʵÏÖÔڴ˾Ͳ»ÔÙÕ¹¿ª¡£ ÔÚGateway¼øÈ¨Í¨¹ýÖ®ºó£¬½âÎöºóµÄtokenÐÅÏ¢¿ÉÒÔÖ±½Ó´«µÝ¸øÐèÒª¼ÌÐøÇëÇóµÄ΢·þÎñ²ã¡£

Èç¹ûÓ¦ÓÃÐèÒªÊÚȨ£¨¶Ô×ÊÔ´ÇëÇóÐèÒª¹ÜÀí²»Í¬µÄ½ÇÉ«¡¢È¨ÏÞ£©£¬Ò²Ö»ÒªÔÚGatewayµÄRest API»ù´¡ÉÏ»ùÓÚAOP˼ÏëÀ´×ö¼´¿É¡£Í³Ò»¹ÜÀí¼øÈ¨ºÍÊÚȨ£¬ÕâÒ²ÊÇʹÓÃÀàËÆFacadeģʽµÄGateway APIµÄºÃ´¦Ö®Ò»¡£

¸ºÔؾùºâ

API Gateway¸úMicroserviceÒ»Ñù£¬×÷ΪSpringbootÓ¦Óã¬ÌṩRest api¡£ËùÒÔͬÑùÔËÐÐÔÚDockerÈÝÆ÷ÖС£GatewayºÍ΢·þÎñÖ®¼äµÄ·þÎñ·¢ÏÖ»¹ÊÇ¿ÉÒÔ²ÉÓÃǰÎÄËùÊöµÄ¿Í»§¶Ë·¢ÏÖģʽ£¬»òÕß·þÎñ¶Ë·¢ÏÖģʽ¡£

ÔÚ¼¯Èº»·¾³Ï£¬API Gateway ¿ÉÒÔ±©Â¶Í³Ò»µÄ¶Ë¿Ú£¬ÆäʵÀý»áÔËÐÐÔÚ²»Í¬IPµÄ·þÎñÆ÷ÉÏ¡£ÒòΪÎÒÃÇÊÇʹÓð¢ÀïÔÆµÄECS×÷ΪÈÝÆ÷µÄ»ù´¡ÉèÊ©£¬ËùÒÔÔÚ¼¯Èº»·¾³µÄ¸ºÔؾùºâÒ²ÊÇʹÓð¢ÀïÔÆµÄ¸ºÔؾùºâSLB,ÓòÃû½âÎöҲʹÓÃAliyunDNS¡£ÏÂͼÊÇÒ»¸ö¼òµ¥µÄÍøÂçÇëÇóµÄʾÒ⣺

ÔÚʵ¼ùÖУ¬ÎªÁ˲»±©Â¶·þÎñµÄ¶Ë¿ÚºÍ×ÊÔ´µØÖ·£¬Ò²¿ÉÒÔÔÚ·þÎñ¼¯ÈºÖÐÔÙ²¿ÊðNginx·þÎñ×÷Ϊ·´Ïò´úÀí£¬ÍⲿµÄ¸ºÔؾùºâÉèÊ©±ÈÈçSLB¿ÉÒÔ½«ÇëÇóת·¢µ½Nginx·þÎñÆ÷£¬ÇëÇóͨ¹ýNginxÔÙת·¢¸øGateway¶Ë¿Ú¡£Èç¹ûÊÇ×Ô½¨»ú·¿µÄ¼¯Èº£¬¾ÍÐèÒª´î½¨¸ß¿ÉÓõĸºÔؾùºâÖÐÐÄ¡£ÎªÁËÓ¦¶Ô¿ç»úÆ÷ÇëÇó£¬×îºÃʹÓÃConsul,Consul£¨Consul Template£©+Registor+HaproxyÀ´×ö·þÎñ·¢Ïֺ͸ºÔؾùºâÖÐÐÄ¡£

»º´æ

¶ÔÓÚһЩ¸ßQPSµÄÇëÇ󣬿ÉÒÔÔÚAPI Gateway×ö¶à¼¶»º´æ¡£·Ö²¼Ê½µÄ»º´æ¿ÉÒÔʹÓÃRedis£¬MemcachedµÈ¡£Èç¹ûÊÇһЩ¶ÔʵʱÐÔÒªÇ󲻸ߵģ¬±ä»¯ÆµÂʲ»¸ßµ«ÊǸßQPSµÄÒ³Ãæ¼¶ÇëÇó£¬Ò²¿ÉÒÔÔÚGateway²ã×ö±¾µØ»º´æ¡£¶øÇÒGateway¿ÉÒÔÈûº´æ·½°¸¸üÁé»îºÍͨÓá£

API GatewayµÄ´íÎó´¦Àí

ÔÚGatewayµÄ¾ßÌåʵÏÖ¹ý³ÌÖУ¬´íÎó´¦ÀíÒ²ÊÇÒ»¸öºÜÖØÒªµÄÊÂÇé¡£¶ÔÓÚGatewayµÄ´íÎó´¦Àí£¬¿ÉÒÔʹÓÃHystrixÀ´´¦ÀíÇëÇóµÄÈÛ¶Ï¡£²¢ÇÒRxJava×Ô´øµÄReturn»Øµ÷Ò²¿ÉÒÔ·½±ãµÃ´¦Àí´íÎóÐÅÏ¢µÄ·µ»Ø¡£¶ÔÓÚÈÛ¶Ï»úÖÆ£¬ÐèÒª´¦ÀíÒÔϼ¸¸ö·½Ã棺

·þÎñÇëÇóµÄÈÝ´í´¦Àí

×÷Ϊһ¸öºÏÀíµÄGateway£¬ÆäÓ¦¸ÃÖ»¸ºÔð´¦ÀíÊý¾ÝÁ÷¡¢Ê¼þÁ÷£¬¶ø²»Ó¦¸Ã´¦ÀíÒµÎñÂß¼­¡£ÔÚ´¦Àí¶à¸ö΢·þÎñµÄÇëÇóʱ£¬»á³öÏÖ΢·þÎñÇëÇóµÄ³¬Ê±¡¢²»¿ÉÓõÄÇé¿ö¡£ÔÚÒ»Ð©ÌØ¶¨µÄ³¡¾°Ï£¬ ÐèÒªÄܹ»ºÏÀíµÃ´¦Àí²¿·Öʧ°Ü¡£±ÈÈçÉÏÀýÖеġ°Óû§¶©µ¥ÁÐ±í¡±£¬µ±¡°User¡±Î¢·þÎñ³öÏÖ´íÎóʱ£¬²»Ó¦¸ÃÓ°Ïì¡°Order¡±Êý¾ÝµÄÇëÇó¡£

×îºÃµÄ´¦Àí·½Ê½¾ÍÊǸøµ±Ê±´íÎóµÄÓû§ÐÅÏ¢ÇëÇó·µ»ØÒ»¸öĬÈϵÄÊý¾Ý£¬±ÈÈçÏÔʾһ¸öĬÈÏÍ·Ïñ£¬Ä¬ÈÏÓû§êdzơ£È»ºó¶ÔÓÚÇëÇóÕý³£µÄ¶©µ¥£¬ÒÔ¼°ÉÌÆ·ÐÅÏ¢¸øÓëÕýÈ·µÄÊý¾Ý·µ»Ø¡£

Èç¹ûÊÇÒ»¸ö¹Ø¼üµÄ΢·þÎñÇëÇóÒì³££¬±ÈÈçµ±¡°Order¡±ÁìÓòµÄ΢·þÎñÒ쳣ʱ£¬ÔòÓ¦¸Ã¸ø¿Í»§¶ËÒ»¸ö´íÎóÂ룬ÒÔ¼°ºÏÀíµÄ´íÎóÌáʾÐÅÏ¢¡£ÕâÑùµÄ´¦Àí¿ÉÒÔ¾¡Á¿ÔÚ²¿·Öϵͳ²»¿ÉÓÃʱÌáÉýÓû§ÌåÑ顣ʹÓÃRxJavaʱ£¬¾ßÌåµÄʵÏÖ·½Ê½¾ÍÊÇÕë¶Ô²»Í¬µÄ¿Í»§¶ËÇëÇóµÄÇé¿ö£¬Ð´ºÃReturn£¬×öºÃ´íÎóÊý¾Ý¼æÈݼ´¿É¡£

Òì³£µÄ²¶×½ºÍ¼Ç¼

GatewayÖ÷ÒªÊÇ×öÇëÇóµÄת·¢¡¢ºÏ²¢¡£ÎªÁËÄÜÇå³þµÃÅŲéÎÊÌ⣬¶¨Î»µ½¾ßÌåÄĸö·þÎñ¡¢ÉõÖÁÊÇÄĸöDockerÈÝÆ÷µÄÎÊÌ⣬ÐèÒªGatewayÄܶԲ»Í¬ÀàÐ͵ÄÒì³£¡¢ÒµÎñ´íÎó½øÐв¶×½ºÍ¼Ç¼¡£

Èç¹ûʹÓÃFeignClientÀ´ÇëÇó΢·þÎñ×ÊÔ´£¬¿ÉÒÔͨ¹ý¶ÔErrorDecoder½Ó¿ÚµÄʵÏÖ£¬À´Õë¶ÔResponse½á¹û½øÐнøÒ»²½µÄ¹ýÂË´¦Àí£¬ÒÔ¼°ÔÚÈÕÖ¾ÖмǼÏÂËùÓÐÇëÇóÐÅÏ¢¡£Èç¹ûÊÇʹÓÃSpring Rest Template,Ôò¿ÉÒÔͨ¹ý¶¨ÒåÒ»¸ö¶¨ÖÆ»¯µÄRestTempate£¬²¢¶Ô·µ»ØµÄResponseEntity½øÐнâÎö¡£ÔÚ·µ»ØÐòÁл¯Ö®ºóµÄ½á¹û¶ÔÏó֮ǰ£¬¶Ô´íÎóÐÅÏ¢½øÐÐÈÕÖ¾¼Ç¼¡£

³¬Ê±»úÖÆ

GatewayÏß³ÌÖдó¶àÊÇIOỊ̈߳¬ÎªÁË·ÀÖ¹ÒòΪijһ΢·þÎñÇëÇó×èÈû£¬µ¼ÖÂGateway¹ý¶àµÄµÈ´ýỊ̈߳¬ºÄ¾¡Ï̳߳ء¢¶ÓÁеÈϵͳ×ÊÔ´¡£ÐèÒªGatewayÖÐÌṩ³¬Ê±»úÖÆ£¬¶Ô³¬Ê±½Ó¿ÚÄܽøÐÐÓÅÑŵķþÎñ½µ¼¶¡£

ÔÚSpringCloudµÄFeignÏîÄ¿Öм¯³ÉÁËHystrix¡£HystrixÌṩÁ˱ȽÏÈ«ÃæµÄ³¬Ê±´¦ÀíµÄÈÛ¶Ï»úÖÆ¡£Ä¬ÈÏÇé¿öÏ£¬³¬Ê±»úÖÆÊÇ¿ªÆôµÄ¡£³ýÁË¿ÉÒÔÅäÖó¬Ê±Ïà¹ØµÄ²ÎÊý£¬Netflix»¹ÌṩÁË»ùÓÚHytrixµÄʵʱ¼à¿ØNetflix -Dashboard,²¢ÇÒ¼¯Èº·þÎñÖ»ÐèÔÙ¸½¼Ó²¿ÊðNetflix-Turbine¡£Í¨ÓõÄHytrixµÄÅäÖÃÏî¿ÉÒԲο¼Hystrix-Configuration¡£

Èç¹ûÊÇʹÓÃRxJavaµÄObservableµÄÏìӦʽ±à³Ì£¬Ïë¶Ô²»Í¬µÄÇëÇóÉèÖò»Í¬µÄ³¬Ê±Ê±¼ä£¬¿ÉÒÔÖ±½ÓÔÚObservableµÄtimeout()·½·¨µÄ²ÎÊý½øÐÐÉèÖûص÷µÄ·½·¨ÒÔ¼°³¬Ê±Ê±¼äµÈ¡£

ÖØÊÔ»úÖÆ

¶ÔÓÚһЩ¹Ø¼üµÄÒµÎñ£¬ÔÚÇëÇó³¬Ê±Ê±£¬ÎªÁ˱£Ö¤ÕýÈ·µÄÊý¾Ý·µ»Ø£¬ÐèÒªGatewayÄÜÌá¹©ÖØÊÔ»úÖÆ¡£Èç¹ûʹÓÃSpringCloudFeign£¬ÔòÆäÄÚÖõÄRibbon£¬»áÌṩµÄĬÈϵÄÖØÊÔÅäÖ㬿ÉÒÔͨ¹ýÉèÖÃspring.cloud.loadbalancer.retry.enabled=false½«Æä¹Ø±Õ¡£

RibbonÌṩµÄÖØÊÔ»úÖÆ»áÔÚÇëÇó³¬Ê±»òÕßsocket read timeout´¥·¢£¬³ýÁËÉèÖÃÖØÊÔ£¬Ò²¿ÉÒÔ¶¨ÖÆÖØÊÔµÄʱ¼ä·§ÖµÒÔ¼°ÖØÊÔ´ÎÊýµÈ¡£

¶ÔÓÚ³ýÁËʹÓÃFeign£¬Ò²Ê¹ÓÃSpring RestTemplateµÄÓ¦Ó㬿ÉÒÔͨ¹ý×Ô¶¨ÒåµÄRestTemplate,¶ÔÓÚ·µ»ØµÄResponseEntity¶ÔÏó½øÐнá¹û½âÎö£¬Èç¹ûÇëÇóÐèÒªÖØÊÔ£¨±ÈÈçij¸ö¹Ì¶¨¸ñʽµÄerror-codeµÄ·½Ê½Ê¶±ðÖØÊÔ²ßÂÔ£©£¬Ôòͨ¹ýInterceptor½øÐÐÇëÇóÀ¹½Ø£¬ÒÔ¼°»Øµ÷µÄ·½Ê½invoke¶à´ÎÇëÇó¡£

С½á

¶ÔÓÚ΢·þÎñµÄ¼Ü¹¹£¬Í¨¹ýÒ»¸ö¶ÀÁ¢µÄAPI Gateway,¿ÉÒÔ½øÐÐͳһµÄÇëÇóת·¢¡¢ºÏ²¢ÒÔ¼°Ð­Òéת»»¡£¿ÉÒÔ¸üÁé»îµÃÊÊÅ䲻ͬ¿Í»§¶ËµÄÇëÇóÊý¾Ý¡£¶øÇÒ¶ÔÓÚ²»Í¬¿Í»§¶Ë£¨±ÈÈçH5ºÍiOSµÄչʾÊý¾Ý²»Í¬£©¡¢²»Í¬°æ±¾¼æÈݵÄÇëÇó,¿ÉÒԺܺõØÔÚGateway½øÐÐÆÁ±Î£¬ÈÃ΢·þÎñ¸ü¼Ó´¿´â¡£Î¢·þÎñÖ»Òª¹Ø×¢ÄÚ²¿µÄÁìÓò·þÎñµÄÉè¼Æ£¬Ê¼þµÄ´¦Àí¡£

API gateway»¹¿ÉÒÔ¶Ô΢·þÎñµÄÇëÇó½øÐÐÒ»¶¨µÄÈÝ´í¡¢·þÎñ½µ¼¶¡£Ê¹ÓÃÏìӦʽ±à³ÌÀ´ÊµÏÖAPI gateway¿ÉÒÔʹÏß³Ìͬ²½¡¢²¢·¢µÄ´úÂë¸ü¼ò½à£¬¸üÒ×ÓÚά»¤¡£ÔÚ¶ÔÓÚ΢·þÎñµÄÇëÇó¿ÉÒÔͳһͨ¹ýFeignClint¡£´úÂëÒ²»áºÜÓвã´Î¡£ÈçÏÂͼ£¬ÊÇÒ»¸öʾÀýµÄÇëÇóµÄÀà²ã´Î¡£

Clint¸ºÔ𼯳ɷþÎñ·¢ÏÖ£¨¶ÔÓÚʹÓÃEureka×Ô×¢²á·½Ê½£©¡¢¸ºÔؾùºâÒÔ¼°·¢³öÇëÇ󣬲¢»ñÈ¡ResponseEntity¶ÔÏó¡£

Translator½«ResponseEntityת»»³ÉObservable<XDTO>¶ÔÏó£¬ÒÔ¼°¶ÔÒì³£½øÐÐͳһÈÕÖ¾²É¼¯£¬ÀàËÆÓÚDDDÖзÀ¸¯²ãµÄ¸ÅÄî¡£

Adapterµ÷Óø÷¸öTranslator£¬Ê¹ÓÃObservableº¯Êý£¬¶ÔÇëÇóµÄÊý¾ÝÁ÷½øÐкϲ¢¡£Èç¹û´æÔÚ¶à¸öÊý¾ÝµÄ×é×°£¬¿ÉÒÔÔö¼ÓÒ»²ãAssemblerרÃÅ´¦ÀíDTO¶ÔÏóµ½ModelµÄת»»¡£

Controller,ÌṩRestful×ÊÔ´µÄ¹ÜÀí£¬Ã¿¸öControllerÖ»ÇëÇóΨһµÄÒ»¸öAdapter·½·¨¡£

΢·þÎñµÄ³ÖÐø¼¯³É²¿Êð

Ö÷Òª½éÉÜÁË΢·þÎñµÄ·þÎñ·¢ÏÖ¡¢·þÎñͨÐÅÒÔ¼°API Gateway¡£ÕûÌåµÄ΢·þÎñ¼Ü¹¹µÄÄ£Ðͳõ¼û¡£ÔÚʵ¼ÊµÄ¿ª·¢¡¢²âÊÔÒÔ¼°Éú²ú»·¾³ÖС£Ê¹ÓÃDockerʵÏÖ΢·þÎñ£¬¼¯ÈºµÄÍøÂç»·¾³»á¸ü¼Ó¸´ÔÓ¡£

΢·þÎñ¼Ü¹¹±¾Éí¾ÍÒâζ×ÅÐèÒª¶ÔÈô¸É¸öÈÝÆ÷·þÎñ½øÐÐÖÎÀí£¬Ã¿¸ö΢·þÎñ¶¼Ó¦¿ÉÒÔ¶ÀÁ¢²¿Êð¡¢À©ÈÝ¡¢¼à¿Ø¡£ÏÂÃæ»á¼ÌÐø½éÉÜÈçºÎ½øÐÐDocker΢·þÎñµÄ³ÖÐø¼¯³É²¿Êð£¨CI/CD£©¡£

¾µÏñ²Ö¿â

ÓÃDockerÀ´²¿Êð΢·þÎñ,ÐèÒª½«Î¢·þÎñ´ò°ü³ÉDocker¾µÏñ£¬¾ÍÈçͬ²¿ÊðÔÚWeb server´ò°ü³ÉwarÎļþÒ»Ñù¡£Ö»²»¹ýDocker¾µÏñÔËÐÐÔÚDockerÈÝÆ÷ÖС£

Èç¹ûÊÇSpringboot·þÎñ£¬Ôò»áÖ±½Ó½«°üº¬Apache Tomcat serverµÄSpringboot£¬ÒÔ¼°°üº¬JavaÔËÐпâµÄ±àÒëºóµÄJavaÓ¦Óôò°ü³ÉDocker¾µÏñ¡£

ΪÁËÄÜͳһ¹ÜÀí´ò°üÒÔ¼°·Ö·¢£¨pull/push£©¾µÏñ¡£ÆóÒµÒ»°ãÐèÒª½¨Á¢×Ô¼ºµÄ¾µÏñ˽¿â¡£ÊµÏÖ·½Ê½Ò²ºÜ¼òµ¥¡£¿ÉÒÔÔÚ·þÎñÆ÷ÉÏÖ±½Ó²¿ÊðDocker hubµÄ¾µÏñ²Ö¿âµÄÈÝÆ÷°æRegistry2¡£Ä¿Ç°×îеİ汾ÊÇV2¡£

´úÂë²Ö¿â

´úÂëµÄÌá½»¡¢»Ø¹öµÈ¹ÜÀí£¬Ò²ÊÇÏîÄ¿³ÖÐø¼¯³ÉµÄÒ»»·¡£Ò»°ãÒ²ÊÇÐèÒª½¨Á¢ÆóÒµµÄ´úÂë²Ö¿âµÄ˽¿â¡£¿ÉÒÔʹÓÃSVN,GITµÈ´úÂë°æ±¾¹ÜÀí¹¤¾ß¡£

Ŀǰ¹«Ë¾Ê¹ÓõÄÊÇGitlab,ͨ¹ýGitµÄDocker¾µÏñ°²×°¡¢²¿Êð²Ù×÷Ò²ºÜ±ã½Ý¡£¾ßÌå²½Öè¿ÉÒԲο¼docker gitlab install¡£ÎªÁËÄÜ¿ìËÙ¹¹½¨¡¢´ò°ü£¬Ò²¿É½«GitºÍRegistry²¿ÊðÔÚͬһ̨·þÎñÆ÷ÉÏ¡£

ÏîÄ¿¹¹½¨

ÔÚSpringbootÏîÄ¿ÖУ¬¹¹½¨¹¤¾ß¿ÉÒÔÓÃMaven,»òÕßGradle¡£GradleÏà±ÈMaven¸ü¼ÓÁé»î£¬¶øÇÒSpringbootÓ¦Óñ¾ÉíÈ¥ÅäÖû¯µÄÌØµã£¬ÓûùÓÚGroovyµÄGradle»á¸ü¼ÓÊʺϣ¬DSL±¾ÉíÒ²±ÈXML¸ü¼Ó¼ò½à¸ßЧ¡£

ÒòΪGradleÖ§³Ö×Ô¶¨Òåtask¡£ËùÒÔ΢·þÎñµÄDockerfileдºÃÖ®ºó£¬¾Í¿ÉÒÔÓÃGradleµÄtask½Å±¾À´½øÐй¹½¨´ò°ü³ÉDocker Image¡£

ĿǰҲÓÐһЩ¿ªÔ´µÄGradle¹¹½¨Docker¾µÏñµÄ¹¤¾ß£¬±ÈÈçTransmode-Gradlew²å¼þ¡£Æä³ýÁË¿ÉÒÔ¶Ô×ÓÏîÄ¿£¨µ¥¸ö΢·þÎñ£©½øÐй¹½¨Docker¾µÏñ£¬Ò²¿ÉÒÔÖ§³ÖͬʱÉÏ´«¾µÏñµ½Ô¶³Ì¾µÏñ²Ö¿â¡£ÔÚÉú²ú»·¾³ÖеÄbuild»úÆ÷ÉÏ£¬¿ÉÒÔͨ¹ýÒ»¸öÃüÁîÖ±½ÓÖ´ÐÐÏîÄ¿µÄbuild,Docker ImageµÄ´ò°ü,ÒÔ¼°¾µÏñµÄpush¡£

ÈÝÆ÷±àÅż¼Êõ

Docker¾µÏñ¹¹½¨Ö®ºó£¬ÒòΪÿ¸öÈÝÆ÷ÔËÐÐ×Ų»Í¬µÄ΢·þÎñʵÀý£¬ÈÝÆ÷Ö®¼äÒ²ÊǸôÀ벿Êð·þÎñµÄ¡£Í¨¹ý±àÅż¼Êõ£¬¿ÉÒÔʹDevOpsÇáÁ¿»¯¹ÜÀíÈÝÆ÷µÄ²¿ÊðÒÔ¼°¼à¿Ø£¬ÒÔÌá¸ßÈÝÆ÷¹ÜÀíµÄЧÂÊ¡£

ĿǰһЩͨÓõıàÅŹ¤¾ß±ÈÈçAnsible¡¢Chef¡¢Puppet£¬Ò²¿ÉÒÔ×öÈÝÆ÷µÄ±àÅÅ¡£µ«ËûÃǶ¼²»ÊÇרÃÅÕë¶ÔÈÝÆ÷µÄ±àÅŹ¤¾ß£¬ËùÒÔʹÓÃʱÐèÒª×Ô¼º±àдһЩ½Å±¾£¬½áºÏDockerµÄÃüÁî¡£±ÈÈçAnsible£¬È·Êµ¿ÉÒÔʵÏֺܱãÀûµÄ¼¯ÈºµÄÈÝÆ÷µÄ²¿ÊðºÍ¹ÜÀí¡£Ä¿Ç°AnsibleÕë¶ÔÆäÍŶÓ×Ô¼ºÑз¢µÄÈÝÆ÷¼¼ÊõÌṩÁ˼¯³É·½°¸:Ansible Container¡£

¼¯Èº¹ÜÀíϵͳ½«Ö÷»ú×÷Ϊ×ÊÔ´³Ø£¬¸ù¾Ýÿ¸öÈÝÆ÷¶Ô×ÊÔ´µÄÐèÇ󣬾ö¶¨½«ÈÝÆ÷µ÷¶Èµ½ÄĸöÖ÷»úÉÏ¡£

Ŀǰ£¬Î§ÈÆDockerÈÝÆ÷µÄµ÷¶È¡¢±àÅÅ£¬±È½Ï³ÉÊìµÄ¼¼ÊõÓÐGoogleµÄKubernetes(ÏÂÎÄ»á¼òдk8s)£¬Mesos½áºÏMarathon¹ÜÀíDocker¼¯Èº,ÒÔ¼°ÔÚDocker 1.12.0°æ±¾ÒÔÉϹٷ½ÌṩµÄDocker Swarm¡£±àÅż¼ÊõÊÇÈÝÆ÷¼¼ÊõµÄÖØµãÖ®Ò»¡£Ñ¡ÔñÒ»¸öÊʺÏ×Ô¼ºÍŶӵÄÈÝÆ÷±àÅż¼ÊõÒ²¿ÉÒÔʹÔËά¸ü¸ßЧ¡¢¸ü×Ô¶¯»¯¡£

Docker Compose

Docker ComposeÊÇÒ»¸ö¼òµ¥µÄDockerÈÝÆ÷µÄ±àÅŹ¤¾ß£¬Í¨¹ýYAMLÎļþÅäÖÃÐèÒªÔËÐеÄÓ¦Óã¬È»ºóͨ¹ýcompose upÃüÁîÆô¶¯¶à¸ö·þÎñ¶ÔÓ¦µÄÈÝÆ÷ʵÀý¡£DockerÖÐûÓм¯³ÉCompose,ÐèÒªÁíÍâ°²×°¡£

Compose¿ÉÒÔÓÃÓÚ΢·þÎñÏîÄ¿µÄ³ÖÐø¼¯³É£¬µ«Æä²»ÊʺϴóÐͼ¯ÈºµÄÈÝÆ÷¹ÜÀí£¬´ó¼¯ÈºÖУ¬¿ÉÒÔCompose½áºÏAnsible×ö¼¯Èº×ÊÔ´¹ÜÀí£¬ÒÔ¼°·þÎñÖÎÀí¡£

¶ÔÓÚ¼¯ÈºÖзþÎñÆ÷²»¶àµÄÇé¿ö£¬¿ÉÒÔʹÓÃCompose£¬ÆäʹÓò½ÖèÖ÷ÒªÊÇ£º

½áºÏ΢·þÎñÔËÐл·¾³£¬¶¨ÒåºÃ·þÎñµÄDockerfile

¸ù¾Ý·þÎñ¾µÏñ¡¢¶Ë¿Ú¡¢ÔËÐбäÁ¿µÈ±àдdocker-compose.ymlÎļþ£¬ÒÔʹ·þÎñ¿ÉÒÔÒ»Æð²¿Êð£¬ÔËÐÐ

ÔËÐÐdocker-compose up ÃüÁîÆô¶¯²¢ÇÒ½øÈëÈÝÆ÷ʵÀý£¬Èç¹ûÐèҪʹÓúǫ́½ø³Ì·½Ê½ÔËÐУ¬Ê¹ÓÃdocker-compose up -d¼´¿É¡£

Docker Swarm

ÔÚ16Ä꣬DockerµÄ1.12°æ±¾³öÀ´Ö®ºó,ʹÓÃа汾µÄDocker,¾Í×Ô´øDocker swarm modeÁË¡£²»ÐèÒª¶îÍâ°²×°Èκβå¼þ¹¤¾ß¡£¿ÉÒÔ¿´³öÈ¥Ä꿪ʼDockerÍŶÓÒ²¿ªÊ¼ÖØÊÓ·þÎñ±àÅż¼Êõ£¬Í¨¹ýÄÚÖÃSwarm mode£¬Ò²ÒªÇÀÕ¼Ò»²¿·Ö·þÎñ±àÅÅÊг¡¡£

Èç¹ûÍŶӿªÊ¼Ê¹ÓÃа汾µÄDocker,¿ÉÒÔÑ¡ÔñDocker swarm modeÀ´½øÐм¯Èº»¯µÄÈÝÆ÷µ÷¶ÈºÍ¹ÜÀí¡£Swarm»¹Ö§³Ö¹ö¶¯¸üС¢½Úµã¼ä´«Êä²ã°²È«¼ÓÃÜ¡¢¸ºÔؾùºâµÈ¡£

DockerSwarmµÄʹÓÃʾÀý¿ÉÒԲο¼Ö®Ç°Ð´µÄһƪ£ºÊ¹ÓÃdocker-swarm´î½¨³ÖÐø¼¯³É¼¯Èº·þÎñ¡£

Kubernetes

KubernetesÊÇGoogle¿ªÔ´µÄÈÝÆ÷¼¯Èº¹ÜÀíϵͳ£¬Ê¹ÓÃGoÓïÑÔʵÏÖ£¬ÆäÌṩӦÓò¿Êð¡¢Î¬»¤¡¢ À©Õ¹»úÖÆµÈ¹¦ÄÜ¡£Ä¿Ç°¿ÉÒÔÔÚGCE¡¢vShpere¡¢CoreOS¡¢OpenShift¡¢AzureµÈƽ̨ʹÓÃk8s¡£

¹úÄÚĿǰAliyunÒ²ÌṩÁË»ùÓÚk8sµÄ·þÎñÖÎÀíÆ½Ì¨¡£Èç¹ûÊÇ»ùÓÚÎïÀí»ú¡¢ÐéÄâ»ú´î½¨µÄDocker¼¯ÈºµÄ»°£¬Ò²¿ÉÒÔÖ±½Ó²¿Êð¡¢ÔËÐÐk8s¡£ÔÚ΢·þÎñµÄ¼¯Èº»·¾³Ï£¬Kubernetes¿ÉÒԺܷ½±ã¹ÜÀí¿ç»úÆ÷µÄ΢·þÎñÈÝÆ÷ʵÀý¡£

Ŀǰk8s»ù±¾Êǹ«ÈϵÄ×îÇ¿´ó¿ªÔ´·þÎñÖÎÀí¼¼ÊõÖ®Ò»¡£ÆäÖ÷ÒªÌṩÒÔϹ¦ÄÜ£º

×Ô¶¯»¯¶Ô»ùÓÚDocker¶Ô·þÎñʵÀý½øÐв¿ÊðºÍ¸´ÖÆ

ÒÔ¼¯ÈºµÄ·½Ê½ÔËÐУ¬¿ÉÒÔ¹ÜÀí¿ç»úÆ÷µÄÈÝÆ÷£¬ÒÔ¼°¹ö¶¯Éý¼¶¡¢´æ´¢±àÅÅ¡£

ÄÚÖÃÁË»ùÓÚDockerµÄ·þÎñ·¢Ïֺ͸ºÔؾùºâÄ£¿é

K8sÌṩÁËÇ¿´óµÄ×ÔÎÒÐÞ¸´»úÖÆ,»á¶Ô±ÀÀ£µÄÈÝÆ÷½øÐÐÌæ»»(¶ÔÓû§£¬ÉõÖÁ¿ª·¢ÍŶӶ¼ÎÞ¸ÐÖª)£¬²¢¿ÉËæÊ±À©ÈÝ¡¢ËõÈÝ¡£ÈÃÈÝÆ÷¹ÜÀí¸ü¼Óµ¯ÐÔ»¯¡£

k8sÖ÷Ҫͨ¹ýÒÔϼ¸¸öÖØÒªµÄ×é¼þÍê³Éµ¯ÐÔÈÝÆ÷¼¯ÈºµÄ¹ÜÀíµÄ£º

PodÊÇKubernetesµÄ×îСµÄ¹ÜÀíÔªËØ£¬Ò»¸ö»ò¶à¸öÈÝÆ÷ÔËÐÐÔÚpodÖС£podµÄÉúÃüÖÜÆÚºÜ¶ÌÔÝ£¬»áËæ×ŵ÷¶Èʧ°Ü£¬½Úµã±ÀÀ££¬»òÕ߯äËû×ÊÔ´»ØÊÕʱÏûÍö¡£

LabelÊÇkey/value´æ´¢½á¹¹µÄ£¬¿ÉÒÔ¹ØÁªpod£¬Ö÷ÒªÓÃÀ´±ê¼Çpod£¬¸ø·þÎñ·Ö×顣΢·þÎñÖ®¼äͨ¹ýlabelÑ¡ÔñÆ÷£¨Selectors£©À´Ê¶±ðPod¡£

Replication ControllerÊÇk8s Master½ÚµãµÄºËÐÄ×é¼þ¡£ÓÃÀ´È·±£ÈκÎʱºòKubernetes¼¯ÈºÖÐÓÐÖ¸¶¨ÊýÁ¿µÄpod¸±±¾(replicas)ÔËÐС£¼´ÌṩÁË×ÔÎÒÐÞ¸´»úÖÆµÄ¹¦ÄÜ£¬²¢ÇÒ¶ÔËõÈÝÀ©ÈÝ¡¢¹ö¶¯Éý¼¶Ò²ºÜÓÐÓá£

ServiceÊǶÔÒ»×éPodµÄ²ßÂԵijéÏó¡£Ò²ÊÇk8s¹ÜÀíµÄ»ù±¾ÔªËØÖ®Ò»¡£Serviceͨ¹ýLabelʶ±ðÒ»×éPod¡£´´½¨Ê±Ò²»á´´½¨Ò»¸ö±¾µØ¼¯ÈºµÄDNS£¨´æ´¢Service¶ÔÓ¦µÄPodµÄ·þÎñµØÖ·£©¡£ËùÒÔÔÚ¿Í»§¶ËÇëÇóͨ¹ýÇëÇóDNSÀ´»ñȡһ×鵱ǰ¿ÉÓõÄPodsµÄipµØÖ·¡£Ö®ºóͨ¹ýÿ¸öNodeÖÐÔËÐеÄkube-proxy½«ÇëÇóת·¢¸øÆäÖÐÒ»¸öPod¡£Õâ²ã¸ºÔؾùºâÊÇ͸Ã÷µÄ£¬µ«ÊÇĿǰµÄk8sµÄ¸ºÔؾùºâ²ßÂÔ»¹²»ÊǺÜÍêÉÆ£¬Ä¬ÈÏÊÇËæ»úµÄ·½Ê½¡£

С½á

΢·þÎñ¼Ü¹¹ÌåϵÖУ¬Ò»¸öºÏÊʵijÖÐø¼¯³ÉµÄ¹¤¾ß£¬¿ÉÒԺܺõÃÌáÉýÍŶӵÄÔËά¡¢¿ª·¢Ð§ÂÊ¡£Ä¿Ç°ÀàËÆJenkinsÒ²ÓÐÕë¶ÔDockerµÄ³ÖÐø¼¯³ÉµÄ²å¼þ£¬µ«ÊÇ»¹ÊÇ´æÔںܶ಻ÍêÉÆ¡£ËùÒÔ½¨Ò黹ÊÇÑ¡ÔñרÃÅÓ¦¶ÔDockerÈÝÆ÷±àÅż¼ÊõµÄSwarm,k8s,Mesos¡£»òÕß¶à¸ö¼¼Êõ½áºÏÆðÀ´£¬±ÈÈçJenkins×öCI+k8s×öCD¡£

Swarm,k8s,Mesos¸÷Óи÷µÄÌØÐÔ£¬ËûÃǶÔÓÚÈÝÆ÷µÄ³ÖÐø²¿Êð¡¢¹ÜÀíÒÔ¼°¼à¿Ø¶¼ÌṩÁËÖ§³Ö¡£Mesos»¹Ö§³ÖÊý¾ÝÖÐÐĵĹÜÀí¡£Docker swarm modeÀ©Õ¹ÁËÏÖÓеÄDocker API£¬Í¨¹ýDocker Remote APIµÄµ÷ÓúÍÀ©Õ¹£¬¿ÉÒÔµ÷¶ÈÈÝÆ÷ÔËÐе½Ö¸¶¨µÄ½Úµã¡£

KubernetesÔòÊÇĿǰÊг¡¹æÄ£×î´óµÄ±àÅż¼Êõ£¬Ä¿Ç°ºÜ¶à´ó¹«Ë¾Ò²¶¼¼ÓÈëµ½ÁËk8s¼Ò×壬k8sÓ¦¶Ô¼¯ÈºÓ¦ÓõÄÀ©Õ¹¡¢Î¬»¤ºÍ¹ÜÀí¸ü¼ÓÁé»î£¬µ«ÊǸºÔؾùºâ²ßÂԱȽϴֲڡ£¶øMesos¸üרעÓÚͨÓõ÷¶È£¬ÌṩÁ˶àÖÖµ÷¶ÈÆ÷¡£

¶ÔÓÚ·þÎñ±àÅÅ£¬»¹ÊÇҪѡÔñ×îÊʺÏ×Ô¼ºÍŶӵģ¬Èç¹û³õÆÚ»úÆ÷ÊýÁ¿ºÜÉÙ£¬¼¯Èº»·¾³²»¸´ÔÓÒ²¿ÉÒÔÓÃAnsible+Docker Compose,ÔÙ¼ÓÉÏGitlab CIÀ´×ö³ÖÐø¼¯³É¡£

·þÎñ¼¯ÈºµÄ½â¾ö·½°¸

ÆóÒµÔÚʵ¼ùʹÓÃDocker²¿Êð¡¢ÔËÐÐ΢·þÎñÓ¦ÓõÄʱºò£¬ÎÞÂÛÊÇÒ»¿ªÊ¼¾Í²¼¾Ö΢·þÎñ¼Ü¹¹£¬»òÕß´Ó´«Í³µÄµ¥Ó¦Óüܹ¹½øÐÐ΢·þÎñ»¯Ç¨ÒÆ¡£¶¼ÐèÒªÄܹ»´¦Àí¸´Ôӵļ¯ÈºÖеķþÎñµ÷¶È¡¢±àÅÅ¡¢¼à¿ØµÈÎÊÌâ¡£ÏÂÃæÖ÷ҪΪ½éÉÜÔÚ·Ö²¼Ê½µÄ·þÎñ¼¯ÈºÏ£¬ÈçºÎ¸ü°²È«¡¢¸ßЧµÃʹÓÃDocker,ÒÔ¼°Ôڼܹ¹Éè¼ÆÉÏ£¬ÐèÒª¿¼Âǵķ½·½ÃæÃæ¡£

¸ºÔؾùºâ

ÕâÀï˵µÄÊǼ¯ÈºÖеĸºÔؾùºâ£¬Èç¹ûÊÇ´¿·þÎñ¶ËAPIµÄ»°¾ÍÊÇÖ¸Gateway APIµÄ¸ºÔؾùºâ£¬Èç¹ûʹÓÃÁËNginxµÄ»°£¬ÔòÊÇÖ¸NginxµÄ¸ºÔؾùºâ¡£ÎÒÃÇĿǰʹÓõÄÊǰ¢ÀïÔÆµÄ¸ºÔؾùºâ·þÎñSLB¡£

ÆäÖÐÒ»¸öÖ÷ÒªÔ­ÒòÊÇ¿ÉÒÔ¸úDNSÓòÃû·þÎñ½øÐа󶨡£¶ÔÓÚ¸Õ¿ªÊ¼½øÐд´ÒµµÄ¹«Ë¾À´Ëµ£¬¿ÉÒÔͨ¹ýWeb½çÃæÀ´ÉèÖøºÔؾùºâµÄÈ¨ÖØ£¬±È½Ï±ãÓÚ²¿·Ö·¢²¼¡¢²âÊÔÑéÖ¤,ÒÔ¼°½¡¿µ¼ì²é¼à¿ØµÈµÈ¡£´ÓЧÂʺͽÚÔ¼ÔËά³É±¾ÉÏÀ´Ëµ¶¼ÊǸö±È½ÏÊʺϵÄÑ¡Ôñ¡£

Èç¹û×Ô¼º´î½¨Æß²ã¸ºÔؾùºâÈçʹÓÃNginx»òHaproxyµÄ»°£¬Ò²ÐèÒª±£Ö¤¸ºÔð¸ºÔؾùºâµÄ¼¯ÈºÒ²ÊǸ߿ÉÓõÄ,ÒÔ¼°Ìṩ±ã½ÝµÄ¼¯Èº¼à¿Ø£¬À¶Â̲¿ÊðµÈ¹¦ÄÜ¡£

³Ö¾Ã»¯¼°»º´æ

¹ØÏµÐÍÊý¾Ý¿â£¨RDBMS£©

¶ÔÓÚ΢·þÎñÀ´Ëµ£¬Ê¹ÓõĴ洢¼¼ÊõÖ÷ÒªÊǸù¾ÝÆóÒµµÄÐèÒª¡£ÎªÁ˽ÚÔ¼³É±¾µÄ»°£¬Ò»°ã¶¼ÊÇÑ¡ÓÃMysql£¬ÔÚMysqlµÄÒýÇæÑ¡ÔñµÄ»°½¨ÒéÑ¡ÔñInnoDBÒýÇæ(5.5°æ±¾Ö®Ç°Ä¬ÈÏMyISAM)¡£

InnoDBÔÚ´¦Àí²¢·¢Ê±¸ü¸ßЧ£¬Æä²éѯÐÔÄܵIJî¾àÒ²¿ÉÒÔͨ¹ý»º´æ¡¢ËÑË÷µÈ·½°¸½øÐÐÃÖ²¹¡£InnoDB´¦ÀíÊý¾Ý¿½±´¡¢±¸·ÝµÄÃâ·Ñ·½°¸ÓÐbinlog£¬mysqldump¡£²»¹ýÒª×öµ½×Ô¶¯»¯µÄ±¸·Ý»Ö¸´¡¢¿É¼à¿ØµÄÊý¾ÝÖÐÐÄ»¹ÊÇÐèÒªDBA»òÕßÔËάÍŶӡ£

Ïà¶Ô»¨·ÑµÄ³É±¾Ò²½Ï¸ß¡£Èç¹û³õ´´ÆóÒµ£¬Ò²¿ÉÒÔ¿¼ÂÇÒÀÍÐһЩ¹úÄÚÍâ±È½Ï´óÐ͵ÄÔÆ¼ÆËãÆ½Ì¨ÌṩµÄPaaS·þÎñ¡£

΢·þÎñÒ»°ã°´ÕÕÒµÎñÁìÓò½øÐб߽绮·Ö£¬ËùÒÔ΢·þÎñ×îºÃÊÇÒ»¿ªÊ¼¾Í½øÐзֿâÉè¼Æ¡£ÊÇ·ñÐèÒª½øÐзֱíÐèÒª¸ù¾Ýÿ¸ö΢·þÎñ¾ßÌåµÄÒµÎñÁìÓòµÄ·¢Õ¹ÒÔ¼°Êý¾Ý¹æÄ£½øÐоßÌå·ÖÎö¡£µ«½¨Òé¶ÔÓڱȽϺËÐĵÄÁìÓòµÄÄ£ÐÍ£¬±ÈÈç¡°¶©µ¥¡±Ìáǰ×öºÃ·Ö±í×ֶεÄÉè¼ÆºÍÔ¤Áô¡£

KVÄ£ÐÍÊý¾Ý¿â£¨Key-Value-stores£©

RedisÊÇ¿ªÔ´µÄKey-Value½á¹¹µÄÊý¾Ý¿â¡£Æä»ùÓÚÄڴ棬¾ßÓиßЧ»º´æµÄÐÔÄÜ£¬Í¬Ê±Ò²Ö§³Ö³Ö¾Ã»¯¡£RedisÖ÷ÒªÓÐÁ½Öֳ־û¯·½Ê½¡£Ò»ÖÖÊÇRDB£¬Í¨¹ýÖ¸¶¨Ê±¼ä¼ä¸ôÉú³ÉÊý¾Ý¼¯µÄʱ¼äµã¿ìÕÕ£¬´ÓÄÚ´æÐ´Èë´ÅÅ̽øÐг־û¯¡£

RDB·½Ê½»áÒýÆðÒ»¶¨³Ì¶ÈµÄÊý¾Ý¶ªÊ§£¬µ«ÐÔÄܺá£ÁíÍâÒ»ÖÖÊÇAOF,ÆäдÈë»úÖÆ£¬ÓеãÀàËÆInnoDBµÄbinlog£¬AOFµÄÎļþµÄÃüÁî¶¼ÊÇÒÔRedisЭÒé¸ñʽ±£´æ¡£ÕâÁ½Öֳ־û¯ÊÇ¿ÉÒÔͬʱ´æÔڵģ¬ÔÚRedisÖØÆôʱ£¬AOFÎļþ»á±»ÓÅÏÈÓÃÓÚ»Ö¸´Êý¾Ý¡£ÒòΪ³Ö¾Ã»¯ÊÇ¿ÉÑ¡ÏËùÒÔÒ²¿ÉÒÔ½ûÓÃRedis³Ö¾Ã»¯¡£

ÔÚʵ¼ÊµÄ³¡¾°ÖУ¬½¨Òé±£Áô³Ö¾Ã»¯¡£±ÈÈçĿǰ±È½ÏÁ÷ÐеĽâ¾ö¶ÌÐÅÑéÖ¤ÂëµÄÑéÖ¤£¬¾Í¿ÉʹÓÃRedis¡£ÔÚ΢·þÎñ¼Ü¹¹ÌåϵÖУ¬Ò²¿ÉÒÔÓÃRedis´¦ÀíһЩKVÊý¾Ý½á¹¹µÄ³¡¾°¡£ÇáÁ¿¼¶µÄÊý¾Ý´æ´¢·½°¸£¬Ò²ºÜÊʺϱ¾ÉíÇ¿µ÷ÇáÁ¿¼¶·½°¸µÄ΢·þÎñ˼Ïë¡£

ÎÒÃÇÔÚʵ¼ùÖУ¬ÊǶÔRedis½øÐÐÁË»º´æ¡¢³Ö¾Ã»¯£¬Á½¸ö¹¦ÄÜÌØÕ÷½øÐзֿâµÄ¡£

ÔÚ¼¯³ÉSpringbootÏîÄ¿ÖлáʹÓõ½spring-boot-starter-data-redisÀ´½øÐÐRedisµÄÊý¾Ý¿âÁ¬½ÓÒÔ¼°»ù´¡ÅäÖá¢ÒÔ¼°spring-data-redisÌṩµÄ·á¸»µÄÊý¾ÝAPIOperations¡£

ÁíÍ⣬Èç¹ûÊÇÒªÇó¸ßÍÌÍÂÁ¿µÄÓ¦Ó㬿ÉÒÔ¿¼ÂÇÓÃMemcachedÀ´×¨ÃÅ×ö¼òµ¥µÄKVÊý¾Ý½á¹¹µÄ»º´æ¡£Æä±È½ÏÊʺϴóÊý¾ÝÁ¿µÄ¶ÁÈ¡£¬µ«Ö§³ÖµÄÊý¾Ý½á¹¹ÀàÐͱȽϵ¥Ò»¡£

ͼÐÎÊý¾Ý¿â£¨Graph Database£©

Éæ¼°µ½Éç½»Ïà¹ØµÄÄ£ÐÍÊý¾ÝµÄ´æ´¢£¬Í¼ÐÎÊý¾Ý¿âÊÇÒ»ÖÖÏཻ¹ØÏµÐÍÊý¾Ý¿â¸ü¸ßЧ¡¢¸üÁé»îµÄÑ¡Ôñ¡£Í¼ÐÎÊý¾Ý¿âÒ²ÊÇNosqlµÄÒ»ÖÖ¡£ÆäºÍKV²»Í¬£¬´æ´¢µÄÊý¾ÝÖ÷ÒªÊÇÊý¾Ý½Úµã£¨node£©,¾ßÓÐÖ¸ÏòÐԵĹØÏµ£¨Relationship£©ÒÔ¼°½ÚµãºÍ¹ØÏµÉϵÄÊôÐÔ£¨Property£©¡£

Èç¹ûÓÃJava×÷Ϊ΢·þÎñµÄÖ÷¿ª·¢ÓïÑÔ£¬×îºÃÑ¡ÔñNeo4j¡£Neo4jÊÇÒ»ÖÖ»ùÓÚJavaʵÏÖµÄÖ§³ÖACIDµÄͼÐÎÊý¾Ý¿â¡£ÆäÌṩÁ˷ḻµÄJavaAPI¡£ÔÚÐÔÄÜ·½Ã棬ͼÐÎÊý¾Ý¿âµÄ¾Ö²¿ÐÔʹ±éÀúµÄËٶȷdz£¿ì£¬ÓÈÆäÊÇ´ó¹æÄ£Éî¶È±éÀú¡£Õâ¸öÊǹØÏµÐÍÊý¾Ý¿âµÄ¶à±í¹ØÁªÎÞ·¨Æó¼°µÄ¡£

ÏÂͼÊÇʹÓÃNeo4jµÄWebUI¹¤¾ßչʾµÄÒ»¸ö¹Ù·½Getting startedÊý¾ÝÄ£ÐÍʾÀý¡£Ê¾ÀýÖеÄÓï¾äMATCH p=()-[r:DIRECTED]->() RETURN p LIMIT 25ÊÇNeo4jÌṩµÄ²éѯÓïÑÔ¡ª¡ªCypher¡£

ÔÚÏîĿʹÓÃʱ¿ÉÒÔ¼¯³ÉSpringDataµÄÏîÄ¿Spring Data Neo4j¡£ÒÔ¼°SpringBootStartersspring-boot-starter-data-neo4j

ÎĵµÊý¾Ý¿â£¨Document database£©

ĿǰӦÓõıȽϹ㷺µÄ¿ªÔ´µÄÃæÏòÎĵµµÄÊý¾Ý¿â¿ÉÒÔÓÃMongodb¡£Mongo¾ßÓи߿ÉÓᢸ߿ÉÉìËõÐÔÒÔ¼°Áé»îµÄÊý¾Ý½á¹¹´æ´¢£¬ÓÈÆäÊǶÔÓÚJsonÊý¾Ý½á¹¹µÄ´æ´¢¡£±È½ÏÊʺϲ©¿Í¡¢ÆÀÂÛµÈÄ£Ð͵Ĵ洢¡£

ËÑË÷¼¼Êõ

ÔÚ¿ª·¢µÄ¹ý³ÌÖУ¬ÓÐʱºò¾­³£»á¿´µ½ÓÐÈËдÁ˺ܳ¤ºÜÈÆ¡¢ºÜÄÑά»¤µÄ¶à±í²éѯSQL£¬»òÕßÊǸ÷ÖÖ¶à±í¹ØÁªµÄ×Ó²éѯÓï¾ä¡£¶ÔÓÚijһÁìÓòÄ£ÐÍ£¬µ±ÕâÖÖ³¡¾°¶àµÄʱºò£¬¾Í¸Ã¿¼ÂǽÓÈëÒ»Ì×ËÑË÷·½°¸ÁË¡£²»ÒªÊ²Ã´¶¼ÓÃSQLÈ¥½â¾ö£¬ÓÈÆäÊDzéѯµÄ³¡¾°¡£Âý²éѯÓï¾äµÄÎÊÌâÓÐʱºòÉõÖÁ»áÍÏ¿åDB£¬Èç¹ûDBµÄ¼à¿ØÌåϵ×öµÄ²»µ½Î»£¬¿ÉÄÜÎÊÌâÒ²ºÜÄÑÅŲ顣

ElasticsearchÊÇÒ»¸ö»ùÓÚApache LuceneʵÏֵĿªÔ´µÄʵʱ·Ö²¼Ê½ËÑË÷ºÍ·ÖÎöÒýÇæ¡£SpringbootµÄÏîĿҲÌṩÁ˼¯³É·½Ê½: spring-boot-starter-data-elasticsearchÒÔ¼°spring-data-elasticsearch¡£

¶ÔÓÚËÑË÷¼¯ÈºµÄ´î½¨£¬¿ÉÒÔʹÓÃDocker¡£¾ßÌå´î½¨·½·¨¿ÉÒԲο¼ÓÃDocker´î½¨Elasticsearch¼¯Èº,¶ÔÓÚSpringbootÏîÄ¿µÄ¼¯³É¿ÉÒԲο¼ÔÚSpringboot΢·þÎñÖм¯³ÉËÑË÷·þÎñ¡£ÖÁ½ñ£¬×îа汾µÄSpringDataElasticsearchÒѾ­Ö§³Öµ½ÁË5.x°æ±¾µÄES£¬¿ÉÒÔ½â¾öºÜ¶à2.x°æ±¾µÄÍ´µãÁË¡£

Èç¹ûÊÇС¹æÄ£µÄËÑË÷¼¯Èº£¬¿ÉÒÔÓÃÈý̨µÍÅäÖõĻúÆ÷£¬È»ºóÓÃESµÄDocker½øÏî½øÐд¡£Ò²¿ÉÒÔʹÓÃһЩÉÌÒµ°æµÄPaaS·þÎñ¡£ÈçºÎÑ¡Ôñ»¹ÊÇÒª¸ù¾ÝÍŶӺÍÒµÎñµÄ¹æÄ£¡¢³¡¾°À´¿´¡£

Ŀǰ³ýÁËES,ʹÓñȽϹ㷺µÄ¿ªÔ´ËÑË÷ÒýÇæ»¹ÓÐSolr,SolrÒ²»ùÓÚLucene,ÇÒרעÔÚÎı¾ËÑË÷¡£¶øESµÄÎı¾ËÑË÷ȷʵ²»ÈçSolr,ESÖ÷ҪרעÓÚ¶Ô·Ö²¼Ê½µÄÖ§³Ö£¬²¢ÇÒÄÚÖÃÁË·þÎñ·¢ÏÖ×é¼þZenÀ´Î¬»¤¼¯Èº×´Ì¬£¬Ïà¶ÔSolr£¨ÐèÒª½èÖúÀàËÆZookeeperʵÏÖ·Ö²¼Ê½£©²¿ÊðÒ²¸ü¼ÓÇáÁ¿¼¶¡£ES³ýÁË·ÖÎö²éѯ£¬»¹¿ÉÒÔ¼¯³ÉÈÕÖ¾ÊÕ¼¯ÒÔ¼°×ö·ÖÎö´¦Àí¡£

ÏûÏ¢¶ÓÁÐ

ÏûÏ¢¶ÓÁÐÈçǰƪËùÊö£¬¿ÉÒÔ×÷ΪºÜºÃµÄ΢·þÎñ½âñîͨÐÅ·½Ê½¡£ÔÚ·Ö²¼Ê½¼¯ÈºµÄ³¡¾°Ï£¬¶ÔÓÚ·Ö²¼Ê½ÏµÄ×îÖÕÒ»ÖÂÐÔÒ²¿ÉÒÔÌṩ¼¼Êõ»ù´¡±£ÕÏ¡£²¢ÇÒÏûÏ¢¶ÓÁÐÒ²¿ÉÒÔÓÃÀ´´¦ÀíÁ÷Á¿Ï÷·æ¡£

ÏûÏ¢¶ÓÁеĶԱÈÔڴ˲»ÔÙ׸Êö¡£Ä¿Ç°¹«Ë¾Ê¹ÓõÄÊǰ¢ÀïÔÆµÄONS¡£ÒòΪʹÓÃÏûÏ¢¶ÓÁл¹ÊÇ¿¼ÂÇÓÃÔڶԸ߿ÉÓÃÒÔ¼°Ò×ÓÚ¹ÜÀí¡¢¼à¿ØÉϵÄÒªÇó£¬ËùÒÔÑ¡ÔñÁ˰²È«¿É¿¿µÄÏûÏ¢¶ÓÁÐÆ½Ì¨¡£

°²È«¼¼Êõ

°²È«ÐÔÊÇ×ö¼Ü¹¹ÐèÒª¿¼ÂǵĻù´¡¡£»¥ÁªÍøµÄ»·¾³¸´ÔÓ£¬±£»¤ºÃ·þÎñµÄ°²È«£¬Ò²ÊǶÔÓû§µÄ»ù±¾³Ðŵ¡£°²È«¼¼ÊõÉæ¼°µ½µÄ·¶Î§±È½Ï¹ã£¬±¾ÎÄÑ¡¼¸¸ö³£¼ûÎÊÌâÒÔ¼°³£Ó÷½Ê½À´¼òµ¥½éÉÜÏ¡£

·þÎñʵÀý°²È«

·Ö²¼Ê½¼¯Èº±¾Éí¾ÍÊǶÔÓÚ·þÎñʵÀý°²È«µÄÒ»ÖÖ±£ÕÏ¡£Ò»Ì¨·þÎñÆ÷»òÕßijһ¸ö·þÎñʵÀý³öÏÖÎÊÌâµÄʱºò£¬¸ºÔؾùºâ¿ÉÒÔ½«ÇëÇóת·¢µ½ÆäËû¿ÉÓõķþÎñʵÀý¡£µ«ºÜ¶àÆóÒµÊÇ×Ô½¨»ú·¿£¬¶øÇÒÊǵ¥»ú·¿µÄ£¬ÕâÖÖ²¼¾ÖÆäʵ±È½ÏΣÏÕ¡£

ÒòΪ·þÎñÆ÷µÄ±¸·ÝÈÝÔÖÒ²µÃ²»µ½ÍêÕûµÄ±£ÕÏ¡£×îŵľÍÊÇÊý¾Ý¿âÒ²ÊÇÔÚͬһ»ú·¿£¬Ö÷±¸È«¶¼ÔÚÒ»Æð¡£²»µ¥Êǰ²È«ÐԵò»µ½ºÜ¸ßµÄ±£ÕÏ£¬Æ½³£µÄÔËά»¨ÏúÒ²»á±È½Ï´ó¡£¶øÇÒÐèҪעÒâÅäÖ÷À»ðǽ°²È«²ßÂÔ¡£

Èç¹û¿ÉÒÔ£¬¾¡Á¿Ê¹ÓÃһЩ¸ß¿ÉÓᢸ߿ÉÉìËõµÄÎȶ¨ÐÔIaaSƽ̨¡£

ÍøÂ簲ȫ

1. Ô¤·ÀÍøÂç¹¥»÷

ĿǰÖ÷ÒªµÄÍøÂç¹¥»÷ÓÐһϼ¸ÖÖ£º

SQL×¢È룺¸ù¾Ý²»Í¬µÄ³Ö¾Ã²ã¿ò¼Ü£¬Ó¦¶Ô²ßÂÔ²»Í¬¡£Èç¹ûʹÓÃJPA£¬ÔòÖ»Òª×ñÑ­JPAµÄ¹æ·¶£¬»ù±¾²»Óõ£ÐÄ¡£

XSS¹¥»÷£º×öºÃ²ÎÊýµÄתÒå´¦ÀíºÍУÑé¡£¾ßÌå²Î¿¼XSSÔ¤·À

CSRF¹¥»÷£º×öºÃHttpµÄHeaderÐÅÏ¢µÄToken¡¢ReferÑéÖ¤¡£¾ßÌå²Î¿¼CSRFÔ¤·À

DDOS¹¥»÷£º´óÁ÷Á¿µÄDDoS¹¥»÷£¬Ò»°ãÊDzÉÓø߷ÀIP¡£Ò²¿ÉÒÔ½ÓÈëÒ»Ð©ÔÆ¼ÆËãÆ½Ì¨µÄ¸ß·ÀIP¡£

ÒÔÉÏÖ»ÊÇÁоÙÁ˼¸ÖÖ³£¼ûµÄ¹¥»÷£¬ÏëÒªÉîÈëÁ˽âµÄ¿ÉÒÔ¶à¿´¿´REST°²È«·À·¶±í¡£ÔÚÍøÂ簲ȫÁìÓò£¬Ò»°ãºÜÈÝÒ×±»³õ´´ÆóÒµºöÊÓ£¬Èç¹ûûÓÐÒ»¸öÔËά°²È«ÍŶӣ¬×îºÃʹÓÃÀàËÆ°¢ÀïÔÆ-ÔÆ¶ÜÖ®ÀàµÄ²úÆ·¡£Ê¡ÐÄÊ¡³É±¾¡£

2. ʹÓð²È«Ð­Òé

Õâ¸ö²»Óöà˵£¬ÎÞÂÛÊǶÔÓÚʹÓÃRestful APIµÄ΢·þÎñͨÐÅ£¬»¹ÊÇʹÓõÄCDN»òÕßʹÓõÄDNS·þÎñ¡£Éæ¼°µ½HttpЭÒéµÄ£¬½¨Ò鶼ͳһʹÓÃHttps¡£ÎÞÂÛÊÇʲô¹æÄ£µÄÓ¦Ó㬶¼Òª·À·¶Á÷Á¿½Ù³Ö£¬·ñÔò½«»á¸øÓû§´øÀ´ºÜ²»ºÃµÄʹÓÃÌåÑé¡£

3. ¼øÈ¨

¹ØÓÚ΢·þÎñµÄ¼øÈ¨Ç°ÃæAPI GatewayÒѾ­ÓнéÉÜ¡£³ýÁË΢·þÎñ±¾ÉíÖ®Í⣬ÎÒÃÇʹÓõÄһЩÈçMysql£¬Redis,Elasticsearch,EurekaµÈ·þÎñ£¬Ò²ÐèÒªÉèÖúüøÈ¨£¬²¢ÇÒ¾¡Á¿Í¨¹ýÄÚÍø·ÃÎÊ¡£²»Òª¶ÔÍⱩ¶¹ý¶àµÄ¶Ë¿Ú¡£¶ÔÓÚ΢·þÎñµÄAPI Gateway,³ýÁ˼øÈ¨£¬×îºÃǰ¶Ëͨ¹ýNginx·´Ïò´úÀíÀ´ÇëÇóAPI²ã¡£

ÈÕÖ¾²É¼¯¡¢¼à¿Ø

»ùÓÚÈÝÆ÷¼¼ÊõµÄ΢·þÎñµÄ¼à¿ØÌåÏµÃæÁÙןü¸´ÔÓµÄÍøÂç¡¢·þÎñ»·¾³¡£ÈÕÖ¾²É¼¯¡¢¼à¿ØÈçºÎÄܶÔ΢·þÎñ¼õÉÙÇÖÈëÐÔ¡¢¶Ô¿ª·¢Õ߸ü͸Ã÷£¬Ò»Ö±ÊǺܶà΢·þÎñµÄDevOpsÔÚ²»¶Ï˼¿¼ºÍʵ¼ùµÄ¡£

1. ΢·þÎñÈÕÖ¾µÄ²É¼¯

΢·þÎñµÄAPI²ãµÄ¼à¿Ø£¬ÐèÒª´ÓAPI Gatewayµ½Ã¿¸ö΢·þÎñµÄµ÷Ó÷¾¶µÄ¸ú×Ù£¬²É¼¯ÒÔ¼°·ÖÎö¡£Ê¹ÓÃRest APIµÄ»°£¬ÎªÁ˶ÔËùÓÐÇëÇó½øÐвɼ¯£¬¿ÉÒÔʹÓÃSpring WebµÄOncePerRequestFilter¶ÔËùÓÐÇëÇó½øÐÐÀ¹½Ø£¬Ôڲɼ¯ÈÕÖ¾µÄʱºò£¬Ò²×îºÃ¶ÔÇëÇóµÄrt½øÐмǼ¡£

³ýÁ˼Ǽaccess£¬requestµÈÐÅÏ¢£¬»¹ÐèÒª¶ÔAPIµ÷ÓýøÐÐÇëÇó¸ú×Ù¡£Èç¹ûµ¥´¿¼Ç¼ÿ¸ö·þÎñÒÔ¼°GatewayµÄÈÕÖ¾£¬ÄÇôµ±Gateway Log³öÏÖÒì³£µÄʱºò£¬¾Í²»ÖªµÀÆä¾ßÌåÊÇ΢·þÎñµÄÄĸöÈÝÆ÷ʵÀý³öÏÖÁËÎÊÌâ¡£Èç¹ûÈÝÆ÷´ïµ½Ò»¶¨ÊýÁ¿£¬Ò²²»¿ÉÄÜÅŲéËùÓÐÈÝÆ÷ÒÔ¼°·þÎñʵÀýµÄÈÕÖ¾¡£±È½Ï¼òµ¥µÄ½â¾ö·½Ê½¾ÍÊǶÔlogÐÅÏ¢¶¼appendÒ»¶Îº¬ÓÐÈÝÆ÷ÐÅÏ¢µÄ¡¢Î¨Ò»¿É±êʶµÄTrace´®¡£

ÈÕÖ¾²É¼¯Ö®ºó£¬»¹ÐèÒª¶ÔÆä½øÐзÖÎö¡£Èç¹ûʹÓÃE.L.KµÄ¼¼ÊõÌåϵ£¬¾Í¿ÉÒÔÁé»îÔËÓÃElasticsearchµÄʵʱ·Ö²¼Ê½ÌØÐÔ¡£Logstash¿ÉÒÔ½øÐÐÈÕÖ¾½øÐÐÊÕ¼¯¡¢·ÖÎö£¬²¢½«Êý¾Ýͬ²½µ½Elasticsearch¡£Kibana½áºÏLogstashºÍElasticSearch£¬ÌṩÁ¼ºÃµÄ±ãÓÚÈÕÖ¾·ÖÎöµÄWebUI£¬ÔöÇ¿ÈÕÖ¾Êý¾ÝµÄ¿ÉÊÓ»¯¹ÜÀí¡£

¶ÔÓÚÊý¾ÝÁ¿´óµÄÈÕÖ¾µÄ²É¼¯£¬ÎªÁËÌáÉý²É¼¯ÐÔÄÜ£¬ÐèҪʹÓÃÉÏÎÄÌáµ½µÄÏûÏ¢¶ÓÁС£ÓÅ»¯ºóµÄ¼Ü¹¹ÈçÏ£º

2. »ù´¡·þÎñµÄµ÷ÓÃÈÕÖ¾²É¼¯

ͨ¹ý¶Ô΢·þÎñµÄËùÓÐRest APIµÄÈÕÖ¾²É¼¯¡¢·ÖÎö¿ÉÒÔ¼à¿ØÇëÇóÐÅÏ¢¡£

ÔÚ·þÎñÄÚ²¿£¬¶ÔÓÚÖмä¼þ¡¢»ù´¡ÉèÊ©£¨°üÀ¨Redis,Mysql,ElasticsearchµÈ£©µ÷ÓõÄÐÔÄܵÄÈÕÖ¾²É¼¯ºÍ·ÖÎöÒ²ÊDZØÒªµÄ¡£

¶ÔÓÚÖмä¼þ·þÎñµÄÈÕÖ¾²É¼¯£¬ÎÒÃÇĿǰ¿ÉÒÔͨ¹ý¶¯Ì¬´úÀíµÄ·½Ê½£¬¶ÔÓÚ·þÎñµ÷ÓõÄÈçcache¡¢repository£¨°üÀ¨ËÑË÷ºÍDB£©µÄ»ù´¡·½·¨£¬½øÐÐÀ¹½Ø¼°»Øµ÷ÈÕÖ¾¼Ç¼·½·¨¡£

¾ßÌåµÄʵÏÖ·½Ê½¿ÉÒÔ²ÉÓÃ×Ö½ÚÂëÉú³É¿ò¼ÜASM,¹ØÓÚ·½·¨µÄÂß¼­×¢È룬¿ÉÒԲο¼Ö®Ç°Ð´µÄһƪASM(ËÄ) ÀûÓÃMethod ×é¼þ¶¯Ì¬×¢Èë·½·¨Âß¼­£¬Èç¹û¾õµÃASM´úÂ벻̫ºÃά»¤£¬Ò²¿ÉÒÔʹÓÃÏà¶ÔAPIÓѺõÄCglib¡£

¼Ü¹¹ÎåÒªËØ£º

×îºó£¬½áºÏ¼Ü¹¹ºËÐĵÄÎåÒªËØÀ´»Ø¹ËÏÂÎÒÃÇÔڴDocker΢·þÎñ¼Ü¹¹Ê¹Óõļ¼ÊõÌåϵ£º

¸ßÐÔÄÜ ÏûÏ¢¶ÓÁС¢RxJavaÒì²½²¢·¢¡¢·Ö²¼Ê½»º´æ¡¢±¾µØ»º´æ¡¢HttpµÄEtag»º´æ¡¢Ê¹ÓÃElasticsearchÓÅ»¯²éѯ¡¢CDNµÈµÈ¡£

¿ÉÓÃÐÔ ÈÝÆ÷·þÎñ¼¯Èº¡¢RxJavaµÄÈÛ¶Ï´¦Àí¡¢·þÎñ½µ¼¶¡¢ÏûÏ¢µÄÃݵȴ¦Àí¡¢³¬Ê±»úÖÆ¡¢ÖØÊÔ»úÖÆ¡¢·Ö²¼Ê½×îÖÕÒ»ÖÂÐԵȵȡ£

ÉìËõÐÔ ·þÎñÆ÷¼¯ÈºµÄÉìËõ¡¢ÈÝÆ÷±àÅÅKubernetes¡¢Êý¾Ý¿â·Ö¿â·Ö±í¡¢NosqlµÄÏßÐÔÉìËõ¡¢ËÑË÷¼¯ÈºµÄ¿ÉÉìËõµÈµÈ¡£

À©Õ¹ÐÔ »ùÓÚDockerµÄ΢·þÎñ±¾Éí¾ÍÊÇΪÁËÀ©Õ¹ÐÔ¶øÉú£¡

°²È«ÐÔ JPA/Hibernate,SpringSecurity¡¢¸ß·ÀIP¡¢ÈÕÖ¾¼à¿Ø¡¢Https¡¢Nginx·´Ïò´úÀí¡¢HTTP/2.0µÈµÈ¡£

С½á

¶ÔÓÚ·þÎñ¼¯ÈºµÄ½â¾ö·½°¸£¬ÆäʵÎÞÂÛÊÇ΢·þÎñ¼Ü¹¹»òÕßSOA¼Ü¹¹£¬¶¼ÊDZȽÏͨÓõġ£Ö»ÊǶÔÓÚһЩÖмä¼þ¼¯ÈºµÄ´î½¨£¬¿ÉÒÔʹÓÃDocker¡£Ò»¾äDocker ps¾Í¿ÉÒԺܷ½±ã²éѯÔËÐеķþÎñÐÅÏ¢£¬²¢ÇÒÉý¼¶»ù´¡·þÎñÒ²ºÜ·½±ã¡£

¶ÔÓÚÓÅÐãµÄ¼¯Èº¼Ü¹¹Éè¼ÆµÄ×·ÇóÊÇÓÀÎÞÖ¹¾³µÄ¡£ÔÚ¸úºÜ¶à´´Òµ¹«Ë¾µÄ¼¼ÊõÅóÓÑÃǽӴ¥ÏÂÀ´£¬´ó¼Ò¶¼ÊÇ±È½ÏÆ«ÏòÓÚ¿ìËٴÒÔ¼°¿ª·¢¡¢·¢²¼·þÎñ¡£È»¶øÒ»·½ÃæÒ²¹ËÂÇ΢·þÎñµÄ¼Ü¹¹»á±È½Ï¸´ÔÓ£¬É±¼¦ÓÃÅ£µ¶¡£µ«ÊÇ΢·þÎñ±¾Éí¾ÍÊÇÒ»ÖÖÃô½ÝģʽµÄÓÅÐãʵ¼ù¡£ÕâЩÅóÓÑÍùÍù»áÔÚÒµÎñ·ÉËÙ·¢Õ¹µÄʱºòÃæÁÙÒ»¸öÀ§ÈÅ£¬¾ÍÊÇ·þÎñ²ð·Ö£¬Êý¾Ý¿âµÄ·Ö¿â·Ö±í¡¢Í¨¹ýÏûϢȥ½âñîÏñÃæÌõÒ»ÑùµÄͬ²½´úÂ룬ÏëÒªÓÅ»¯ÐÔÄܵ«ÊÇÎÞ´ÓÏÂÊÖµÄÞÏÞΡ£

Ïà¹ØÎĵµ

Apache Thrift

ʹÓÃMesosºÍMarathon¹ÜÀíDocker¼¯Èº

»ùÓÚdocker-swarm´î½¨³ÖÐø¼¯³É¼¯Èº·þÎñ

KubernetesÖÐÎÄÎĵµ

ºó¼Ç

±¾ÎÄÖ÷ÒªÊǶÔÓÚDockerµÄ΢·þÎñʵ¼ù½øÐм¼Êõ·½°¸Ñ¡ÐÍÒÔ¼°½éÉÜ¡£²»Í¬µÄÒµÎñ¡¢ÍŶӿÉÄÜ»áÊʺϲ»Í¨¹ýµÄ¼Ü¹¹ÌåϵºÍ¼¼Êõ·½°¸¡£

×÷Ϊ¼Ü¹¹Ê¦Ó¦¸Ã½áºÏ¹«Ë¾½üÆÚ¡¢³¤ÆÚµÄÕ½ÂԹ滮£¬½øÐг¤Ô¶µÄ²¼¾Ö¡£×îÆðÂë»ù´¡µÄ¼Ü¹¹Ò²ÊÇÐèÒªÄÜÖ§³Å3Äê·¢Õ¹£¬ÆÚ¼ä¿ÉÒÔ²»¶ÏÒýÈëеļ¼Êõ²¢½øÐзþÎñÉý¼¶ºÍ³ÖÐøµÄ´úÂë²ãÖØ¹¹¡£

Ò²ÐíÒ»¸ö¼Ü¹¹Ê¦´Ó0¿ªÊ¼´î½¨Ò»ÕûÌ×Ìåϵ²¢²»ÐèÒª»¨·Ñ¶à¾Ãʱ¼ä£¬×îÐèÒªÆä½øÐеľÍÊDz»¶ÏÔÚÍŶÓÍÆÐÐDomain-Driven Design¡£²¢ÇÒʹÍŶÓÒ»Æð×ñÑ­Clean Code£¬½øÐÐÃô½Ý¿ª·¢OvO

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

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤