当前位置: 首页 > news >正文

织梦末班和dw建设网站哪个方便优化建一个商城网站多少钱

织梦末班和dw建设网站哪个方便优化,建一个商城网站多少钱,网站开发的公司推荐,兰州市网站建设什么是负载均衡? 如果一个服务对应多个实例,我们需要把流量合理的分配给多个实例;当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源,中, 按照⼀定的规则合理分配负载. 服务端负载…

什么是负载均衡?

如果一个服务对应多个实例,我们需要把流量合理的分配给多个实例;当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源,中, 按照⼀定的规则合理分配负载.

服务端负载均衡

⽐较有名的服务端负载均衡器是Nginx. 请求先到达Nginx负载均衡器, 然后通过负载均衡算法, 在多个服务器之间选择⼀个进⾏访问.

客户端负载均衡

把负载均衡的功能以库的⽅式集成到客⼾端, ⽽不再是由⼀台指定的负载均衡设备集中提供.
⽐如Spring Cloud的Ribbon, 请求发送到客⼾端, 客⼾端从注册中⼼(⽐如Eureka)获取服务列表, 在发 送请求前通过负载均衡算法选择⼀个服务器,然后进⾏访问.
Ribbon是Spring Cloud早期的默认实现, 由于不维护了, 所以最新版本的Spring Cloud负载均衡集成的是Spring Cloud LoadBalancer(Spring Cloud官⽅维护)
客⼾端负载均衡和服务端负载均衡最⼤的区别在于服务清单所存储的位置

使用Spring Cloud LoadBalancer实现负载均衡

1.给RestTemplate这个Bean添加@LoadBalanced注解。

2.修改远程调用代码的url的IP端口号为服务名称。

负载均衡策略

负载均衡策略是一种思想,无论哪种负载均衡器,它们的负载均衡策略都是相似的。Spring Cloud LoadBalancer仅支持两种负载均衡策略:轮询策略和随机策略。

  1. 轮询(Round Robin):轮询策略是指服务器轮流处理用户请求,这是一种实现最简单,也是最常用的策略。
  2. 随机选择(Random):这个策略是指随机选择一个后端服务器来处理新的请求。

自定义负载均衡策略

Spring Cloud LoadBalancer 默认负载均衡策略是 轮询策略, 实现是 RoundRobinLoadBalancer, 如果服务的消费者如果想采⽤随机的负载均衡策略, 也⾮常简单
  1. 自定义随机算法对象, 通过 @Bean 将其加载到 Spring 容器中
public class LoadBalancerConfig {
        @Bean
        ReactorLoadBalancer<ServiceInstance> randomLoadBalancer (Environment
environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
                String name =
environment.getProperty(LoadBalancerClientFactory. PROPERTY_NAME );
                System.out.println( "==============" +name);
                return new
RandomLoadBalancer (loadBalancerClientFactory.getLazyProvider(name,
ServiceInstanceListSupplier.class), name);
        }
}

   2.使⽤ @LoadBalancerClient 或者 @LoadBalancerClients 注解在RestTemplate 配置类上⽅, 使⽤ @LoadBalancerClient 或 @LoadBalancerClients 注解, 可以对不同的服务提供⽅配置不同的客⼾端负载均衡算法策略. 

@LoadBalancerClient(name = "product-service", configuration = LoadBalancerConfig.class)
@Configuration
public class BeanConfig {
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate (){
                return new RestTemplate ();
        }
}
@LoadBalancerClient 注解说明
1. name: 该负载均衡策略对哪个服务⽣效(服务提供⽅)
2. configuration : 该负载均衡策略 ⽤哪个负载均衡策略实现.

LoadBalancer原理

LoadBalancer 的实现, 主要是 LoadBalancerInterceptor , 这个类会对 RestTemplate 的请
求进⾏拦截, 然后从Eureka根据服务id获取服务列表,随后利⽤负载均衡算法得到真实的服务地址信息,替换服务id
public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {public ClientHttpResponse intercept(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException { URI originalUri = request.getURI();String serviceName = originalUri.getHost();Assert.state(serviceName != null, "Request URI does not contain a valid hostname: " + originalUri);return (ClientHttpResponse)this.loadBalancer.execute(serviceName, this.requestFactory.createRequest(request, body, execution));}
}

可以看到这里的intercept方法,拦截了用户的HttpRequest请求,然后做了几件事:

1. request.getURI() : 从请求中获取uri
2. originalUri.getHost():从uri中获取路径的主机名, 也就是服务id
3. loadBalancer.execute 根据服务id, 进⾏负载均衡, 并处理请求
继续往下面看
public class BlockingLoadBalancerClient implements LoadBalancerClient {    public <T> T execute(String serviceId, LoadBalancerRequest<T> request) throws IOException {String hint = this.getHint(serviceId);LoadBalancerRequestAdapter<T, TimedRequestContext> lbRequest = new LoadBalancerRequestAdapter(request, this.buildRequestContext(request, hint));Set<LoadBalancerLifecycle> supportedLifecycleProcessors = this.getSupportedLifecycleProcessors(serviceId);supportedLifecycleProcessors.forEach((lifecycle) -> {lifecycle.onStart(lbRequest);});//根据serviceId,和负载均衡策略, 选择处理的服务ServiceInstance serviceInstance = this.choose(serviceId, lbRequest);if (serviceInstance == null) {supportedLifecycleProcessors.forEach((lifecycle) -> {lifecycle.onComplete(new CompletionContext(Status.DISCARD, lbRequest, new EmptyResponse()));});throw new IllegalStateException("No instances available for " + serviceId);} else {return this.execute(serviceId, serviceInstance, lbRequest);}}
//根据serviceId,和负载均衡策略, 选择处理的服务public <T> ServiceInstance choose(String serviceId, Request<T> request) {//获取负载均衡器ReactiveLoadBalancer<ServiceInstance> loadBalancer = this.loadBalancerClientFactory.getInstance(serviceId);if (loadBalancer == null) {return null;} else {
//根据负载均衡算法, 在列表中选择⼀个服务实例Response<ServiceInstance> loadBalancerResponse = (Response)Mono.from(loadBalancer.choose(request)).block();return loadBalancerResponse == null ? null : (ServiceInstance)loadBalancerResponse.getServer();}}

 负载均衡跟LoadBalancer就介绍到这里,如果想深入了解,可以去继续阅读源码~

http://www.hyszgw.com/news/73114.html

相关文章:

  • 内江市住房和城乡建设局网站宣传片制作公司资质
  • 免费在线做高考试题的网站国际新闻头条最新消息
  • 做电商网站的公司简介建站公司怎么接单
  • 梦幻创意网站建设保定哪个公司做网站好
  • 做自己的网站有什么用潍坊外贸网站建设
  • 上海网站建设哪家技术好建个企业网站多少钱
  • 英文网站seo发展前景平面设计外包平台
  • 花店网站建设需求盱眙在仕德伟做网站的有几家
  • 京东不让卖网站制作么开网站做网站赚钱吗
  • 网站流量 seo响应式网站模板的特点
  • 网站有备案 去掉备案中国建设银行分行网站
  • 人才网站常州自助做网站
  • 上海网站建设多少手机网站建设
  • 中国建设工程造价管理协会网站查询营销网店推广的软文
  • 新手做淘宝哪个网站比较好改变网站的域名
  • app需要网站有哪些长春网站建设中心
  • 旅游商业网站策划书网站建设南京
  • 网站建设新闻中心wordpress伪静态路径
  • 比较好的外贸网站wordpress 注册链接
  • 郑州那家做网站便宜镇江网站seo
  • 烟台网站制作方案网站结构模板
  • 网站 设计 文档云南网站设计哪家专业
  • 网站广告策划wordpress去除发布者
  • 重庆工业建设网站谷歌外链工具
  • 南昌做网站设计怎么把电脑字体导入wordpress
  • 网站验证码目录济南网站制作平台
  • 1999年怎样建立企业网站百度广告服务商
  • 屏蔽收索引擎抓取网站微软做网站
  • 我做的网站怎么是危险网站在wordpress注册的博客
  • 个人网站开发平台有哪些手机上如何制作小程序