知名网站建设定制Spring Cloud Ribbon 及 Loadbalancer

Ribbon 知名网站建设定制提供了一套负载均衡的解决方案。

知名网站建设定制目前业界主流的方案可分成两类:

  • 知名网站建设定制集中式负载均衡:即在 consumer 和 provider 知名网站建设定制之间使用独立的负载均衡设施(可以是硬件,如 F5, 也可以是软件,如 nginx), 由该设施负责把 访问请求 通过某种策略转发至 provider;
  • 进程内负载均衡:将负载均衡逻辑集成到 consumer,consumer 从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的 provider。

负载均衡策略,常见的有:

策略类  命名描述
RandomRule随机策略随机选择server
RoundRobinRule轮询策略按照顺序选择server(ribbon默认策略)
RetryRule重试策略在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server
BestAvailableRule最低并发策略逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server
AvailabilityFilteringRule可用过滤策略过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值)
ResponseTimeWeightedRule响应时间加权重策略根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间
ZoneAvoidanceRule区域权重策略综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server

案例:(由于Ribbon停更,且目前eureka中的负载均衡被loadbalancer取代,下面的是loadbalancer案例)

config增加配置

  1. package com.example.eurekaclient2.config;
  2. import org.springframework.cloud.client.ServiceInstance;
  3. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  4. import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
  5. import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
  6. import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
  7. import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.core.env.Environment;
  11. import org.springframework.web.client.RestTemplate;
  12. @Configuration
  13. public class RibbonConfig {
  14. @Bean
  15. @LoadBalanced //启用负载均衡注解
  16. public RestTemplate getRestTemplate(){
  17. return new RestTemplate();
  18. }
  19. /**
  20. * 策略改为随机
  21. */
  22. @Bean
  23. public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
  24. LoadBalancerClientFactory loadBalancerClientFactory){
  25. String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
  26. return new RandomLoadBalancer(loadBalancerClientFactory
  27. .getLazyProvider(name, ServiceInstanceListSupplier.class),
  28. name);
  29. }
  30. }

启动类增加修改策略的引用 @LoadBalancerClients

  1. @LoadBalancerClients(defaultConfiguration = {RibbonConfig.class})
  2. @SpringBootApplication
  3. //如果配置文件配置了注册中心相关配置,则默认开启注册中心注解(@EnableEurekaClient)
  4. public class EurekaClient2Application {
  5. public static void main(String[] args) {
  6. SpringApplication.run(EurekaClient2Application.class, args);
  7. }
  8. }

controller

  1. @RestController
  2. public class ClientConntroller {
  3. @Autowired
  4. private RestTemplate restTemplate;
  5. @RequestMapping("/postRest")
  6. private String postRest(){
  7. Persion ps = new Persion();
  8. ps.setUserName("卢大宝");
  9. //包含响应的一些信息
  10. ResponseEntity<Persion> pp = restTemplate.postForEntity("http://LUDB-CLIENT-1/postUser", ps, Persion.class);
  11. Persion p = pp.getBody();
  12. return p.getUserName();
  13. }
  14. }

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发