΢·þÎñ¼Ü¹¹Éè¼ÆÄ£Ê½¶ÔÓÚµ¥¿éÉè¼ÆÄ£Ê½¶øÑÔÓкܶàÓŵ㡣ºËÐÄ˼Ïë¾ÍÊǽ«µ¥¸ö¾Þ´óµÄÓ¦Óû®·Ö³É»¥ÁªµÄ²»Í¬Ó¦Óá£Óëµ¥¿éÓ¦ÓÃÀàËÆ£¬Ã¿¸ö΢·þÎñ¶¼ÓÐÆä×Ô¼ºµÄ²ã¼¶¼Ü¹¹¡£
ʹÓÃÏÂÁеÄģʽ£¬Î¢·þÎñ¿ÉÒÔÇáÒ×È¡µÃÈçÏÂÓŵ㣺
¿ÉÀ©Õ¹ÐÔ¡£ Ò»¿îµäÐ͵ÄÓ¦ÓûáʹÓÃ3¸ö·½ÏòµÄÀ©Õ¹¡£XÖáÀ©Õ¹ÊÇÖ¸ºáÏòÀ©Õ¹Ó¦Óã¬YÖáÀ©Õ¹ÊÇÖ¸»®·Ö²»Í¬µÄÓ¦Óù¦ÄÜ£¬ZÖáÀ©Õ¹ÊÇÖ¸¶ÔÓÚÊý¾ÝµÄ·ÖÇø£¨partioning£©ºÍ·ÖƬ£¨sharding£©¡£µ±YÖáÀ©Õ¹Ó¦Óõ½µ¥¿éÓ¦ÓÃʱ£¬¸ÃÓ¦Óþͻᱻ´òÉ¢£¬°´ÕÕ·ûºÏ΢·þÎñÌØÐÔµÄÒµÎñ¹¦ÄÜ£¬ÐγÉÐí¶à¸üСµÄµ¥Ôª¡£
ģʽ£ºÃ¿¸ö΢·þÎñÓÐÆä¸ôÀëµÄʵÀý»òÈÝÆ÷¡£·þÎñ¼¶±ðµÄ¸ºÔؾùºâ¿ÉÒÔͨ¹ý½«Ïàͬ·þÎñÍйÜÓÚ¶à¸öʵÀýʵÏÖ¡£
¿ÉÓÃÐÔ ¡£ÈçͬÏàͬµÄ΢·þÎñ»áÍйÜÓÚ¶à¸öʵÀýÖÐÒ»Ñù£¬Î¢·þÎñ»á²¿ÊðÓÚ²»Í¬µÄʵÀýÖУ¬ÕâʹÕû¸öϵͳ¸ß¶È¿ÉÓá£
ģʽ£º·þÎñ¼¶±ðµÄ¸ºÔؾùºâ¿É±»ÓÃÒÔʵÏָ߿ÉÓÃÐÔ£¬¶Ï·Æ÷ģʽ¿É±»ÓÃÒÔʵÏÖÈÝ´í£¬·þÎñÅäÖúͷþÎñ·¢ÏÖ¿Éʹ·¢ÏÖзþÎñÒÔͨѶ³ÉΪ¿ÉÄÜ¡£
³ÖÐø²¿Ê𠡣ÿ¸ö΢·þÎñ¾ùÊǶÀÁ¢µÄ¡£Õâ¾Íµ¼ÖÂÈκηþÎñ¾ù¿É¶ÀÁ¢ÓÚÆäËü·þÎñÍê³É²¿Ê𣬴Ӷø´ïµ½¸ü¼Ó¿ìËÙÇҿɳÖÐøÐԵIJ¿ÊðÄ¿±ê¡£
ËÉñîºÏ ¡£Î¢·þÎñÌṩ²»Í¬µÄ·½Ê½ÊµÏÖËÉñîºÏ¡£Ã¿¸ö΢·þÎñ¶¼Ó¦ÔÚ·þÎñ¼¶±ðÓÐÆä×ÔÉíµÄ²ã¼¶¼Ü¹¹£¬²¢ÇÒÔÚʹÓÃÊý¾Ý¿â×÷Ϊ³Ö¾Ã²ãʱ£¬ËüÔËÐÐÓÚ×Ô¼ºµÄ¶ÀÁ¢»·¾³ÖС£
¼¼Êõ¶àÑùÐÔ ¡£½«Î¢·þÎñÊÓΪ¸ôÀëµÄÌØÐÔ£¬¶àÖÖ¼¼ÊõµÄ»ìºÏ¿ÉÒÔÓÃÓÚʵÏÖ·þÎñÓÚÕûÌåÓ¦ÓõĶàÖÖ΢·þÎñ¡£
¸ßЧ³É±¾ ¡£·þÎñʵÀý¿ÉÒÔ»ùÓÚÓ¦ÓÃʹÓÃÂʽøÐÐÓÅ»¯¡£µÍ¼ÛʵÀý¿ÉÒÔÓÃÒÔ×îµÍÓÅÏȵķþÎñ£¬¶ø¸ß¼ÛʵÀýÔò¿ÉÒÔÓõ½¹Ø¼üÒµÎñ·þÎñ¡£
ÐÔÄÜ ¡£¿¼Âǵ½Î¢·þÎñ¼¼Êõ¶àÑù»¯µÄÓŵ㣬Õâ»á¶ÔÐÔÄÜÓÐÖ±½ÓÓ°Ïì¡£ÀýÈ磬¸ß×èÈûÂʵķþÎñµ÷ÓÃÔÚ½øÏ̼߳¼ÊõÕ»ÖÐʵÏÖ£¬CPUÃܼ¯ÐÍ·þÎñÔÚ¶àÏ̼߳¼ÊõÕ»ÖÐʵÏÖ¡£

ºÍµ¥¿é¼Ü¹¹Ïà±È£¬Î¢·þÎñÒ²ÓÐһЩȱµã¡£
ÖîÈ磬ºÍµ¥¿éÓ¦ÓÃÏà±È£¬¿ª·¢ºÍ¹ÜÀí·Ö²¼Ê½Ó¦ÓúÜÀ§ÄÑ¡£Î¢·þÎñÐèÒª½ø³Ì¼äͨѶ(IPC)»úÖÆÒÔʹ²»Í¬Î¢·þÎñÖ®¼äµÃÒÔͨѶ£¬µ±È»Õâ¿ÉÄÜ»á¶ÔÐÔÄÜÓеãÓ°Ïì(È¡¾öÓÚÍøÂç´ø¿í)¡£
ÒÔÏÂÊÇΪÁËʵÏÖ¸ßЧ΢·þÎñÐèҪʵÏֵŦÄÜ£º
1.¶ÔÓÚIPC£¬Ã¿¸ö΢·þÎñ¶¼Ó¦¸ÃʹÓÃRestµ÷ÓûòRPCÀ´µ÷ÓÃÆäËü΢·þÎñ¡£
2.Ò»¸ö΢·þÎñ¿ÉÄÜ»áÓëµ¥¸ö»ò¶à¸ö΢·þÎñͨѶ¡£Ò»¸ö·þÎñ¿ÉÄÜ»áÊDz»¿ÉÓõ쬻òÕßÒòΪ¸ß¸ºÔØ»òijÖÖ·þÎñ´íÎ󣬶øÎÞ·¨ÔÚÏÞ¶¨Ê±¼äÄÚÏìÓ¦¡£ÎªÁËÓ¦¶ÔÕâÖÖ³¡¾°£¬Ó¦¸ÃÓв¿·Ö¹ÊÕÏ»ò»Ø¹ö»úÖÆ¡£
3.²¿ÊðÒ»¿î»ùÓÚ΢·þÎñµÄÓ¦ÓÃÏà±Èµ¥¿éÓ¦ÓöøÑÔ»á¸ü¼Ó¸´ÔÓ£¬ÒòΪ»ùÓÚ΢·þÎñµÄÓ¦ÓÃÓв»Í¬µÄ·þÎñ£¬²¢ÇÒÿ¸ö·þÎñ¿ÉÄÜ»áÔËÐÐÔÚ²»Í¬µÄÈÝÆ÷»òʵÀýÉÏ¡£Òò´ËÐèÒªÒ»ÖÖ·þÎñ×¢²áºÍ·¢ÏÖ»úÖÆ£¬À´Íê³ÉÏëҪͨѶµÄзþÎñµÄ×¢²áºÍ·¢ÏÖ¡£
4.Ò»¸ö¿Í»§¶Ë΢·þÎñ¿ÉÄÜ»áÒòΪµ¥¸ö¹¦ÄÜÀ´µ÷Óöà¸öÔ¶³ÌµÄ΢·þÎñ¡£Õâ¿ÉÄܻᵼÖ¿çÍøÂçrest»òRPCµÄ¸ß¸ºÔص÷Óá£Òò´ËÐèÒªÒ»¸ö·þÎñÍø¹Ø£¬Ëü»á½ÓÊÜÀ´×Ô΢·þÎñµÄÒ»¸öµ÷Óã¬È»ºóÄÚ²¿·Ö·¢Õâ¸öµ÷Óøø¶à¸ö±¾µØ·þÎñµ÷ÓÃ(¶ÔÓÚ·þÎñÍø¹Ø¶øÑÔÊDZ¾µØµÄ)£¬½«ÕâЩ·þÎñµÄ½á¹¹»ã×Ü£¬²¢·µ»Ø¸ø¿Í»§¶Ë΢·þÎñ¡£
5.µ±Í¬Ò»¸ö΢·þÎñÍйÜÓÚͬһÖ÷»úµÄ²»Í¬ÈÝÆ÷ÖÐʱ£¬ÕâÀï¾ÍÐèÒªÒ»¸ö·þÎñ¼¶µÄ¸ºÔؾùºâÀ´·Ö·¢¸ºÔØ£¬²¢ÊµÏÖÔÖ±¸»úÖÆ¡£
·Ö²¼Ê½Ó¦ÓÃÒ²ÐèҪijÖÖÖÐÐÄ»¯ÈÕÖ¾¿ò¼Ü£¬Òò´ËËùÓеÄÊý¾Ý¿ÉÒÔ±»¼¯Öв¢Éú³ÉÈÕÖ¾Êý¾Ý¡£
×ÔÐÐʵÏÖÉÏÊöµÄËùÓÐÌØÐÔÊǺܸ´Ôӵ쬻áÕ¼ÓôóÁ¿Ê±¼ä£¬²¢ÇÒ»áʹ¿ª·¢ÕßÏûºÄ´óÁ¿Ê±¼äÀ´¿ª·¢ºÍ²âÊÔ»ù´¡¿ò¼ÜÅäÖá£È»¶ø£¬Èç¹ûÄãÒѾ¾ß±¸ÁËÉÏÊöµÄÒ»ÇУ¬ÄÇôÄã¾ÍÖ»ÐèÒª¾Û½¹ÓÚÒµÎñÂß¼ÁË¡£
Spring Cloud¿ò¼ÜÌṩÁËÏà¹Ø¹¤¾ßÔÚ·Ö²¼Ê½·þÎñÖпìËÙ¹¹½¨Ò»Ð©»ù´¡Ä£Ê½£¬ÀýÈçÅäÖùÜÀí£¬·þÎñ·¢ÏÖ£¬¶Ï·±£»¤£¬·Ö²¼Ê½session£¬·þÎñÍø¹Ø£¬rest¿Í»§¶ËºÍ·þÎñ¼¶¸ºÔؾùºâÆ÷µÈ¡£Spring
CloudÏîĿͨ¹ýÔÚÏîÄ¿ÖÐÌí¼ÓһЩMavenÒÀÀµÀ´Íê³É³õʼ»¯¡£ÕâЩҲ¿ÉÒÔÓÉʹÓÃspring initializeµÄÏîÄ¿´´½¨¡£
Spring CloudµÄÐí¶à×é¼þÀ´×ÔNetflix¿ªÔ´Èí¼þÖÐÐÄ£¨Netflix
OSS£©£¬ËüÃǶÔÓÚ΢·þÎñ²¿Êð¶øÑÔÊÇÖÁ¹ØÖØÒªµÄ¡£
Spring Cloud»ùÓÚSpring Boot¹¹½¨£¬ÆäÖÐSpring
Boot°üº¬ÁËʹÓÃ×îСÅäÖõÄÄÚǶtomcat·þÎñÆ÷¡£
ÈçÏÂÊÇÔÚAWSÔÆÉÏʹÓÃ΢·þÎñµÄ·Ö²¼Ê½Ó¦Óõļܹ¹Í¼¡£

ÉÏÊöͼÀýÖУ¬ÎÒÃÇÓÐ3¸ö²»Í¬µÄ΢·þÎñ£¬ÆäÖÐÖ÷΢·þÎñʹÓÃREST¿Í»§¶ËÓë΢·þÎñAºÍ΢·þÎñBͨÐÅ¡£Î¢·þÎñAÔËÐÐÓÚ2¸öÈÝÆ÷ÖУ¬Î¢·þÎñBÔËÐÐÓÚͬһʵÀýµÄ2¸öÈÝÆ÷ÖС£Ö÷΢·þÎñ±©Â¶¸ø¿Í»§¶Ë£¬»áͨ¹ý·þÎñ¿Í»§¶ËÓëÈκÎ΢·þÎñA»ò΢·þÎñBµÄʵÀý»¥¶¯£¬Õâ¸ö¿Í»§¶ËÊÇÒ»¿î¸ºÔؾùºâÆ÷¡£Õ⽫»áʹµÃ¸ºÔؾùºâ²»½ö´æÔÚÓÚʵÀý¼¶±ð£¬¸ü´æÔÚÓÚͬһʵÀýµÄ·þÎñ¼¶±ð¡£Õâ¾ÍÊÇËùνµÄ·þÎñ¼¶¸ºÔؾùºâ¡£µ±ÏòÒ»¸ö·þÎñ·¢ËÍÇëÇóʱ£¬¿Í»§¶Ë·þÎñ»áͨ¹ý²éѯEureka·þÎñ×¢²áºÍ·þÎñ·¢ÏÖÈ¡µÃ·þÎñʵÀýµÄµØÖ·¡£
Spring CloudÒѾ֧³ÖʹÓÃEureka×÷Ϊ·þÎñ×¢²á£¬²¢ÇÒEureka·þÎñ×¢²á¿ÉÒÔͨ¹ýÌí¼Ó@EnableEurekaServer±ê×¢¿ªÆô¡£
@SpringBootApplication @EnableEurekaServer public class EurekaServer { public static void main(String[] args) { System.setProperty("spring.config.name", "registration-server"); SpringApplication.run(EurekaServer.class, args); } } |
ÓÃÓÚ·þÎñ×¢²áµÄapplication.yml£º
eureka: instance: hostname: localhost client: # Not a client, don't register with yourself registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ server: port: 1111 # HTTP (Tomcat) port |
ÈκÎ΢·þÎñ¶¼¿ÉÒÔͨ¹ýÌí¼Ó@EnableDiscoverClient±ê×¢£¬½«Eureka·þÎñ×¢²áµÄµØÖ·ÒÔ¼°¶Ë¿Ú·ÅÖÃÓÚapplication.yml»òapplication.propertiesÎļþ£¬ÒÔ½«×Ô¼º×¢²áµ½Eureka·þÎñÆ÷¡£
eureka: client: serviceUrl: defaultZone: http://localhost:1111/eureka/ fetchRegistry: true |
Spring CloudÌṩ¶àÖÖ½ø³Ì¼äͨѶ·½Ê½£¬ÆäÖаüÀ¨Íⲿ¿Í»§¶ËºÍRestÄ£°å¡£Íⲿ¿Í»§¶ËÊÇÊ®·ÖÁéÇÉ¡¢¸É¾»ÒÔ¼°Ò×ÓÚʵÏֵġ£¿ÉÒÔͨ¹ýÌí¼Ó@EnableFeignClient±ê×¢À´¿ªÆôÍⲿ¿Í»§¶Ë¡£
¿Í»§¶ËÓ¦ÓñØÐë´´½¨Ò»¸ö½Ó¿Ú£¬¸Ã½Ó¿ÚʹÓÃ@FeignClient±ê×¢£¬ÐèÅäºÏ·þÎñID£¬ÄÚ²¿µÄ·½·¨Ê¹ÓÃ@RequestMapping±ê×¢¡£
@FeignClient(value = "serviceA") public interface ServiceClientA { @RequestMapping(value = "/user/{userId}", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE }) public UserProfile getUserProfile( @PathVariable("userId") Integer userId); } |
ÎÒÃÇ¿ÉÒÔͨ¹ý´´½¨Ò»¸öеÄÀàÀ´µ÷ÓÃÕâЩ½Ó¿Ú·½·¨£¬ServiceClientBean.java¡£
@Component public class ServiceClientBean { @Autowired private ServiceClientA serviceClientA; @HystrixCommand(fallbackMethod = "defaultMethod") public UserProfile getUserProfile(Integer userId) { UserProfile user=serviceClientA.getUSerProfile(userId); return user; } public UserProfile defaultMethod() { return new UserProfile(); } } |
ͨ¹ýÔÚ@EnableFeignClientsÖÐÌí¼ÓbasePackageClassesÊôÐÔÖµ£¬ËùÓÐ@FeignClientÀà¶¼ÄÜÒÔSpring
beanµÄÐÎʽע²á¡£
@EnableFeignClients(basePackageClasses?=?ServiceClientA.class) |
¿ª·¢Õß¿ÉÒÔÔÚ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼ä¹²ÏíÏàͬµÄ½Ó¿Ú¶¨Ò壬µ«Õâ»áÔö¼Ó¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äµÄñîºÏ¶È¡£
Íⲿ¿Í»§¶Ë×Ô¶¯Ö§³ÖʹÓÃRibbonµÄ¸ºÔؾùºâ¡£RibbonÊǿͻ§¶ËµÄ¸ºÔؾùºâÆ÷£¬Æä¶ÔHTTPºÍTCPÇëÇóÌṩÁË´óÁ¿¿ØÖÆÖ§³Ö¡£ÎÒÃÇ¿ÉÒÔʹÓÃÍⲿÊôÐÔclient.ribbon.*À´ÅäÖÃRibbon¿Í»§¶Ë¡£
ÔÚServiceClientBean.javaÖУ¬ÎÒÃÇÌí¼ÓÁËÒ»¸ö@HystrixCommand±ê×¢À´´¦Àí²¿·Öʧ°Ü¡£´ËÃüÁî»á¸æËßSpring£¬¸Ã·½·¨ÈÝÒ׳ö´í¡£Spring
Cloud¿â°ü×°ÁËÕâЩ·½·¨ÒÔͨ¹ý¶Ï·Æ÷À´ÊµÊ©ÈÝ´íºÍÑÓ³ÙÈÝÈÌ¡£µäÐ͵ÄHystrixÃüÁîºóÃæ¸úׯعö·½·¨¡£ÖÁÓÚ¹ÊÕÏ£¬Hystrix»á×Ô¶¯ÆôÓûعö·½·¨ÌáÐÑ£¬²¢ÇÒ½«Á÷Á¿Òýµ¼ÖÁ»Ø¹ö·½·¨¡£
Èç¹û΢·þÎñAÎÞ·¨ÔÚÏÞ¶¨Ê±¼äÄÚ·¢ËÍÏìÓ¦»òÕßÊǸɴàÖ±½Óå´µô£¬ÄÇôHystrix½«»áµ÷Óûعö·½·¨À´»ñȡĬÈϵÄÏìÓ¦¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýÌí¼ÓHystrixÒDZíÅÌÓ¦ÓÃÀ´²é¿´Hystrixͳ¼ÆºÍ¼à¿Ø¡£
ÕâÀﻹÓÐÒ»¸ö³ÆÎªZuul´úÀíµÄ×é¼þ£¬Äܹ»³äµ±·þÎñÍø¹Ø¡£ÉÏÎĵļܹ¹Í¼ÀýÖв¢Ã»ÓÐÌá¼°¡£·þÎñÍø¹ØÄÚ²¿µ÷Óöà¸ö΢·þÎñ£¬²¢½«À´×ÔÕâЩ΢·þÎñµÄ½á¹û¾ÛºÏ£¬²¢·µ»Ø¸ø¿Í»§¶Ë·þÎñ¡£
Zuul´úÀíÄÚ²¿Ê¹ÓÃEureka·þÎñÆ÷×÷Ϊ·þÎñ·¢ÏÖ£¬Ê¹ÓÃRibbon×÷Ϊ·þÎñʵÀý¼äµÄ¸ºÔؾùºâ¡£
·Ö²¼Ê½Ó¦ÓÃÐèҪijÖÖÖÐÐÄ»¯ÈÕÖ¾¿ò¼Ü£¬Õâ¿ÉÒÔͨ¹ýELK¹¤¾ßÕ»À´¼òµ¥ÊµÏÖ¡£ |