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

重庆知名做网站的公司5万左右的新能源汽车推荐

重庆知名做网站的公司,5万左右的新能源汽车推荐,dw建设网站视频,网站网上推广文章目录 多机部署,负载均衡-LoadBalance1. 开启多个服务2. 什么是负载均衡负载均衡的实现客户端负载均衡 3. Spring Cloud LoadBalance快速上手使用Spring Cloud LoadBalance实现负载均衡修改IP,端口号为服务名称启动多个服务 负载均衡策略自定义负载均衡策略 LoadBalance原理… 文章目录 多机部署,负载均衡-LoadBalance1. 开启多个服务2. 什么是负载均衡负载均衡的实现客户端负载均衡 3. Spring Cloud LoadBalance快速上手使用Spring Cloud LoadBalance实现负载均衡修改IP,端口号为服务名称启动多个服务 负载均衡策略自定义负载均衡策略 LoadBalance原理 多机部署,负载均衡-LoadBalance 1. 开启多个服务 多复制两个服务,将服务全部启动起来 此时多次访问原来的接口,发现 调用的还是同一个 我们对代码进行修改: Service public class OrderService {private static final Logger log LoggerFactory.getLogger(OrderService.class);Autowiredprivate OrderMapper orderMapper;Resourceprivate DiscoveryClient discoveryClient;Autowiredprivate RestTemplate restTemplate;private static AtomicInteger atomicInteger new AtomicInteger(1);private static ListServiceInstance instances;PostConstructpublic void init() {instances discoveryClient.getInstances(product-service);}public OrderInfo getOrderList(int orderId){OrderInfo orderInfo orderMapper.getOrderList(orderId);int index atomicInteger.getAndIncrement() % instances.size();EurekaServiceInstance instance (EurekaServiceInstance) instances.get(index);String url instance.getUri() /product/getProduct?productId orderInfo.getProductId();log.info(url);ProductInfo productInfo restTemplate.getForObject(url,ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;} }通过轮询的方式去将请求均衡的分配到不同的实例上,这就是负载均衡 2. 什么是负载均衡 负载均衡是高并发,高可用系统必不可少的关键组件 当服务流量增大的时候,通常会采用增加机器的方式进行扩容,负载均衡就是用来在多个机器或者其他资源中,按照一定的规则合理分配负载,也就是负载均衡策略 负载均衡的实现 负载均衡分为服务端负载均衡和客户端负载均衡 服务端负载均衡 指的是在服务端进行负载均衡的算法分配 例如Nginx就是比较出名的服务端负载均衡器,请求会先到达Nginx负载均衡器,然后通过负载均衡算法,在多个服务器之间选择一个进行访问 客户端负载均衡 在客户端进行负载均衡的算法分配 就是将负载均衡的功能以库的方式集成到客户端,而不是由一台指定的负载均衡设备集中提供 比如Spring Cloud的Ribbon,请求发送到客户端,客户端从注册中心(比如Eureka)获取服务列表,在发送请求的时候通过负载均衡算法一个服务器,然后进行访问 但是Ribbon是Spring Cloud早期的默认实现,由于不维护了,现在最新版本的Spring Cloud 负载均衡集成的是Spring Cloud LoadBalance(Spring Cloud官方维护) 客户端负载均衡器和服务端负载均衡器的最大区别在于服务清单存储的位置 3. Spring Cloud LoadBalance 快速上手 使用Spring Cloud LoadBalance实现负载均衡 给RestTemplate这个Bean 添加 LoadBalance注解 Configuration public class BeanConfig {LoadBalancedBeanpublic RestTemplate restTemplate() {return new RestTemplate();} }修改IP,端口号为服务名称 Service public class OrderService {private static final Logger log LoggerFactory.getLogger(OrderService.class);Autowiredprivate OrderMapper orderMapper;Autowiredprivate RestTemplate restTemplate;public OrderInfo getOrderList(int orderId){OrderInfo orderInfo orderMapper.getOrderList(orderId);String url http://product-service/product/getProduct?productId orderInfo.getProductId();log.info(url);ProductInfo productInfo restTemplate.getForObject(url,ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;} }启动多个服务 进行6次访问 为了方便观察,我们在product-service里面加上日志 此时进行访问 可以看到请求被均匀的分布在3个实例上 负载均衡策略 负载均衡策略是一种思想,无论是哪种负载均衡,他们的负载均衡策略都是相似的.Spring Cloud LoadBalance仅支持两种负载均衡策略:轮询策略以及随机策略 轮询:轮询策略指的是服务器轮流处理用户的请求.这是一种实现最简单,也最常用的策略随机选择:随机选择策略是指随机选择一个后端服务器来处理新的请求 自定义负载均衡策略 Spring Cloud LoadBalance默认的负载均衡策略是轮询策略.实现是RoundRobinLoadBalance 如果想使用随机的负载均衡策略: 定义随机算法对象,通过Bean将其加载到Spring容器里面 这里我们使用Spring Cloud LoadBalancer提供的RandomLoadBalance public class LoadBalanceConfig {BeanReactorLoadBalancerServiceInstance randomLoadBalance(Environment env, LoadBalancerClientFactory clientFactory) {String name env.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(clientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);} }注意:不用Configuration注释,要求这个类在组件扫描范围内 使用LoadBalancerClieent或者LoadBalancerClients注解在RestTemplate配置类上方,就可以实现对不同的服务提供方配置不同的客户端负载均衡算法策略 LoadBalancerClient(name product-service,configuration LoadBalanceConfig.class) Configuration public class BeanConfig {LoadBalancedBeanpublic RestTemplate restTemplate() {return new RestTemplate();} }其中,name表示该负载均衡策略对哪个服务生效(服务提供方),Configuration表示负载均衡策略 LoadBalance原理 LoadBalance的实现,主要是LoadBalanceInterceptor,这个类会对RestTemplate的请求进行拦截,然后从Eureka根据服务id获取服务列表,然后利用负载均衡算法得到真实的服务地址信息,替换服务Id public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {private LoadBalancerClient loadBalancer;private LoadBalancerRequestFactory requestFactory;public LoadBalancerInterceptor(LoadBalancerClient loadBalancer, LoadBalancerRequestFactory requestFactory) {this.loadBalancer loadBalancer;this.requestFactory requestFactory;}public LoadBalancerInterceptor(LoadBalancerClient loadBalancer) {this(loadBalancer, new LoadBalancerRequestFactory(loadBalancer));}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方法,拦截了用户的请求后,做了以下几件事: request.getURI()从请求中获取urioriginalUri.getHost()从uri中获取路径的主机名,也就是服务IdloadBalancer.execute根据服务Id,进行负载均衡,并处理请求 我们继续看execute方法 public T T execute(String serviceId, LoadBalancerRequestT request) throws IOException { String hint this.getHint(serviceId); LoadBalancerRequestAdapterT, TimedRequestContext lbRequest new LoadBalancerRequestAdapter(request, this.buildRequestContext(request, hint)); SetLoadBalancerLifecycle 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); } }public T ServiceInstance choose(String serviceId, RequestT request) {// 获取负载均衡器ReactiveLoadBalancerServiceInstance loadBalancer this.loadBalancerClientFactory.getInstance(serviceId);if (loadBalancer null) {return null;} else {// 根据负载均衡算法,在列表中选择一个服务实例ResponseServiceInstance loadBalancerResponse (Response)Mono.from(loadBalancer.choose(request)).block();return loadBalancerResponse null ? null : (ServiceInstance)loadBalancerResponse.getServer();} }
http://www.w-s-a.com/news/180638/

相关文章:

  • 深圳市南山区建设局网站公司简介网页
  • 免费小程序制作软件爱站网站seo查询工具
  • 承接电商网站建设缔烨建设公司网站
  • 网站运营介绍十大国外室内设计网站
  • 网站建设完毕后怎么加后台电影购买网站怎么设计
  • 空间ip地址访问网站音乐分享 wordpress
  • 做网站一单能挣多少wordpress主题文件夹在哪
  • 视频社区app源码台州优化网站
  • 保定高端网站建设做微商好还是开网站好
  • 有什么方法在淘宝发布网站建设设计wordpress评分
  • 自己做的网站怎么爬数据库酷播wordpress
  • 广州哪家做网站还可以黑龙江省建设厅网站的电话
  • 青海省高等级公路建设管局网站国内做led灯网站有
  • 做网站成功建设银行网站网址
  • 自动生成网站上海十大活动策划公司
  • 企业网站建设源码HTML论述市场营销对网站设计的影响
  • 网站设计常见问题建设工程网上质检备案网站
  • 网站怎样优化文章关键词建设网站需要钱吗
  • 加强网站建设和管理的通知重庆网站推广产品
  • 网站建设术语解释百度发布信息的免费平台
  • 情公司做的网站seo与网站优化 pdf
  • 做一个购物网站多少钱江阴市住房和城乡建设局网站
  • 网站建设都包括哪些ps怎么做网站首页和超链接
  • 怎样低成本做网站推广编辑网站教程
  • 邯郸网站建设信息网站开发报价人天
  • 王店镇建设中心小学网站酷玛网站建设
  • 网站需求方案wordpress博客主题推荐
  • 网站安全证书过期怎么办那个视频网站最好最全网址
  • 外贸上哪个网站开发客户建行个人网上银行登录入口
  • 空间除了可以做网站还能干什么qq钓鱼网站