Ribbon负载均衡

Ribbon负载均衡

        负载均衡一般分为服务器端负载均衡和客户端负载均衡

        所谓服务器端负载均衡,比如Nginx、F5这些,请求到达服务器之后由这些负载均衡器根据一定的算法将请求路由到目标服务器处理

        所谓客户端负载均衡,比如我们要说的Ribbon,服务消费者客户端会有一个服务器地址列表,调用方在请求前通过一定的负载均衡算法选择一个服务器进行访问,负载均衡算法的执行是在请求客户端进行

        Ribbon是Netflix发布的负载均衡器。Eureka一般配合Ribbon进行使用,Ribbon利用从Eureka中读取到服务信息,在调用服务提供者提供的服务时,会根据一定的算法进行负载

在微服务中实现负载均衡

       1. 新建一个微服务的项目,名称为product9001

 

        2.将product9000项目中的内容复制一份到product9001

        1)pom文件

    <dependencies><dependency><groupId>com.leq</groupId><artifactId>leq-service-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--        Eureka Server客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>

        2)核心配置文件,将端口号改为9001

server.port=9001
spring.application.name=leq-service-product
spring.datasource.url=jdbc:mysql://localhost:3306/leq_sc?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=0216eureka.client.service-url.defaultZone= http://LEQCloudEurekaServerA:9200/eureka,http://LEQCloudEurekaServerB:9201/eureka
#eureka.client.register-with-eureka= true
eureka.client.fetch-register= true
eureka.instance.prefer-ip-address= true
eureka.instance.instance-id= ${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.version@

        3)创建包目录,包目录要和生产者的目录一直,然后将produt9000目录下的文件复制一份到product9001中

 

         4)修改启动类的类名为Product901Application,按住快捷键shit+f6就可以改名字

        3. 在page的启动类中添加负载均衡的注解         @LoadBalanced :调用Ribbon负载均衡算法,实现负载均衡功能

         4.    为了看我们的复制均衡是否实现,我们需要在两个product微服务中写获取端口号的方法

        

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("server")
public class ServerConfigController {@Value("${server.port}")private String serverprot;@RequestMapping("getPort")public String findServerPort(){return serverprot;}}

 

 

         5.在page微服务下创建一个获取端口号的方法,来看看我们的负载均衡有没有实现,并重构查询的方法

    @RequestMapping("query/{id}")public Products findById(@PathVariable Integer id){String url ="http://leq-service-product/product/findById/"+id;return restTemplate.getForObject(url,Products.class);}@RequestMapping("getPort")public String getPort(){String url="http://leq-service-product/server/getPort";return restTemplate.getForObject(url,String.class);}

 

 

         6.重新启动product9000,product9001和page9100的微服务,在浏览器访问获取端口的接口,可以发现每次请求时候的端口都会自动变化

 

http://localhost:9100/page/getPort

 

http://localhost:9100/page/query/1

 

 

 

Ribbon负载均衡策略分类

负载均衡策略                                                              类名                                                                                描述

轮询策略                                                              RoundRobinRule                     默认超过10次获取到的server都不可用,会返回一个空的server
随机策略                                                               RandomRule                           如果随机到的server为null或者不可用的话,会while不停的循环选取
重试策略                                                                RetryRule                              一定时限内循环重试。默认继承RoundRobinRule,也支持自定义注
                                                                                                                      入,RetryRule会在每次选取之后,对选举的server进行判断,是否为
                                                                                                                       null,是否alive,并且在500ms内会不停的选取判断。而 RoundRobinRule

                                                                                                                    失效的策略是超过10次,RandomRule是没有失效时 间的概念,只要serverList没都挂
最小连接数策略                                                BestAvailableRule                      遍历serverList,选取出可用的且连接数最小的一个server。该算法里
                                                                                                                    面有一个LoadBalancerStats的成员变量,会存储所有server的运行状
                                                                                                                    况和连接数。如果选取到的server为null,那么会调用RoundRobinRule重新选取
可用过滤策略                                                AvailabilityFilteringRule                 扩展了轮询策略,会先通过默认的轮询选取一个server,再去判断该
                                                                                                                    server是否超时可用,当前连接数是否超限,都成功再返回
区域权衡策略    
(默认策略)                                                        ZoneAvoidanceRule                     扩展了轮询策略,继承了两个过滤器:ZoneAvoidancePredicate和
                                                                                                                        AvailabilityPredicate,除了过滤超时和链接数过多的server,还会过
                                                                                                                        滤掉不符合要求的zone区域里面的所有节点,在一个区域/机房内的服
                                                                                                                        务实例中轮询。 先过滤再轮询

配置Ribbon负载均衡策略

                语法:生产者id.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.策略名(一般都不需要我们配置,使用默认的即可)

         

#随机策略
#leq-service-product.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
#轮循策略
leq-service-product.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20607.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring - 更简单的存取 Bean 对象(使用注解)

目录 一、类注解是什么 二、使用类注解 存取 Bean 对象 1. 准备工作 2. 所以使用五大类注解的规则&#xff1a; 三、五大类注解之间的关系 1. 首先可以查看 类注解的源码如下图&#xff1a; 2. 为什么需要五个类注解&#xff1f; 3. 为什么使用类注解的方式不能使用原类…

使用腾讯云轻量应用服务器搭建网站教程

腾讯云轻量应用服务器怎么搭建网站&#xff1f;太简单了&#xff0c;轻量服务器选择宝塔Linux镜像&#xff0c;然后在宝塔面板上添加站点&#xff0c;以WordPress建站为例&#xff0c;腾讯云服务器网来详细说下腾讯云轻量应用服务器搭建网站全流程&#xff0c;包括轻量服务器配…

A Simple Framework for Contrastive Learning of Visual Representations(论文翻译)

A Simple Framework for Contrastive Learning of Visual Representations 摘要1介绍2 方法2.1 对比学习框架2.2 训练大批量数据2.3 评估协议 3.用于对比表示学习的数据增强3.1.数据增强操作的组合对于学习良好的表示至关重要3.2 对比学习需要更强的数据增强比有监督学习 4. 编…

基于scrcpy的Android群控项目重构,集成Appium服务执行自动化测试用例

系列文章目录 基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构&#xff0c;获取Android屏幕元素信息并编写自动化事件&#xff08;视频&#xff09; 基于scrcpy的Android群控项目重构&#xff0c;获取Android屏幕…

虚拟机中安装RabbitMQ及使用(超详细)

目录 1. 安装Socat 2. 安装Erlang 3. 安装RabbitMQ 4. 开启管理界面及配置 5. 启动 6. 配置虚拟主机及用户 6.1. 用户角色 6.2. Virtual Hosts配置 6.2.1. 创建Virtual Hosts 6.2.2. 设置Virtual Hosts权限 1. 安装Socat 在线安装依赖环境&#xff1a; yum install g…

VBA代码如何切换word和excel(3)

【分享成果&#xff0c;随喜正能量】人不能因为一件好事&#xff0c;高兴一整年&#xff0c;却能因为一个创伤&#xff0c;郁郁终生。痛苦给人的刺激&#xff0c;总是远远大于快乐。成年人的烦恼&#xff0c;和谁说都不合适&#xff0c;悲喜自渡&#xff0c;他人难悟。人最强大…

深度图像Range Image

从点云创建深度图并显示 函数原型 RangeImage::createFromPointCloud (const PointCloudType& point_cloud, float angular_resolution, float max_angle_width, float max_angle_height, …

JVM 调优测试Jmeter 压测

Jmeter 内存不足了&#xff0c;修个5个线程吧 测试结果&#xff1a; Jmeter配置参数 5个线程&#xff0c;每个线程1秒跑1000次 测试串行吞吐量 -XX:PrintGCDetails -Xmx128M -Xms128M -XX:HeapDumpOnOutOfMemoryError -XX:UseSerialGC -XX:PermSize32M GC回收4次 吞吐量138…

菜鸡shader:L10 帧序列动画和极坐标的使用

文章目录 帧序列动画代码最后效果 极坐标代码最后效果 顶点色 这次笔记就直接放最后的效果了&#xff0c;因为课程上老师也没有给代码图片或是什么技巧说明。 下图左边是帧序列动画(鬼火)&#xff0c;右边是极坐标。 帧序列动画 帧序列的原理是对一张有规律行列排序的序列帧…

Pyhon学习之条件判断和循环语句

1.if flag 1 if 1:print(type(True)) if 0:print(name) if flag:print("flag的类型&#xff1a;"str(type(flag)))根据这个结果&#xff0c;可以看出来&#xff0c;这里没有进行类型转换&#xff0c;bool就是int true 就是1 false 就是0 flag 0 if 1:print(type(…

ESP32连接云服务器【WebSocket】

ESP32连接云服务器【ESP32宝塔面板】 文章目录 ESP32连接云服务器【ESP32宝塔面板】&#x1f468;‍&#x1f3eb;内容1&#xff1a;背景&#x1f468;‍⚖️内容2&#xff1a;服务器配置&#x1f468;‍&#x1f4bb;内容3&#xff1a;ESP32配置 &#x1f468;‍&#x1f3eb;…

C++教程——list容器、set容器、map容器

list容器 list构造函数 list赋值与交换 list大小操作 list插入和删除 list数据存取 list反转与排序 set/multiset容器 set大小和交换 set插入与删除 set查找和统计 set和multiset区别 pair对组创建 set容器排序&#xff1a;用仿函数改变默认排序方式 set容器排序&#xff0c;存…