SpringCloud的Ribbon负载均衡
来源:互联网 发布:linux系统入门使用 编辑:程序博客网 时间:2024/05/24 05:16
SpringCloud的负载均衡
服务器端的负载均衡:在客户端向服务器端发送请求的时候,会先请求到负载均衡器,然后负载均衡器根据自身的算法来将请求转发给某台真正提供业务的服务器。然后该服务器将请求返回的数据给负载均衡器,再由负载均衡器将数据返回给客户端
客户端的负载均衡:在客户端的内部执行的一种算法,在向服务器端发送请求的时候,先执行自己的调度算法算出向哪台服务其发送请求,然后直接发送到该服务器。
特点:由客户端的内部程序实现,不需要额外的负载均衡器软硬件的投入。
springcloud的负载均衡有两种方式:
这篇先说Ribbon的负载均衡:
Ribbon实现客户端的负载均衡
Ribbon是一个基于Http和TCP客户端的负载均衡器。Ribbon可以通过客户端中配置的ribbonServerList服务端列表去轮训的访问以达到负载均衡的作用。当Ribbon和Eureka联合使用时,ribbonServerList会被DiscoveryEnableNIWSServerList重写,扩展成从Eureka注册中心获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。
下面通过实例来使用Ribbon实现负载均衡。
首先需要有一个服务注册中心eureka-server,还需要两个服务提供方。然后建立一个新的springboot,叫做eureka-ribbon。
启动eureka-server,first-service,second-service 可以看到如下界面,两个服务提供方都叫COMPUTE-SERVICE已经被注册进去。
然后开始编写eureka-ribbon的项目
首先在pom.xml中加入如下代码:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.8.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
在应用主类中加上@EnableDiscoveryClient注解来添加发现服务能力,然后创建RestTemplate实例,并通过@LoadBalanced注解来开启负载均衡的能力。
@EnableDiscoveryClient@SpringBootApplicationpublic class EurekaRibbonApplication {@Bean@LoadBalancedRestTemplate restTemplate(){return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(EurekaRibbonApplication.class, args);}}
创建ServiceController来消费service中的add服务,通过restTemplage对象来调用服务,计算10+20的值。
@RestControllerpublic class ServiceController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "/add",method = RequestMethod.GET)public String add(){return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20";,String.class).getBody();}}
在application.properties配置文件中配置eureka服务注册中心
spring.application.name=eureka-ribbonserver.port=3333eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
启动四个应该用,访问两次localhost:3333/add。
可以看到控制台的first-service和second-service各打印一行日志
打开服务端口为1111的可以看到:
打开服务端口为2222的可以看到:
可以看到,之前启动的两个first-service和second-service服务端分别被调用了一次。到这里,我们已经通过Ribbon在客户端已经实现了对服务调用的均衡负载
Ribbon的执行策略
1.RoundRobinRule(轮询模式) 轮询访问 如果有两个服务 那么就会先访问服务1然后再访问服务2 然后再是1和2 轮流访问。
2.RandomRule(随机策略) 随机调用服务来执行。
- SpringCloud的Ribbon负载均衡
- SpringCloud(三)Ribbon负载均衡
- SpringCloud---Ribbon客户端负载均衡
- SpringCloud | Feign如何整合Ribbon进行负载均衡的?
- SpringCloud(四)Ribbon自定义负载均衡
- SpringCloud(五)Ribbon自定义负载均衡插件
- SpringCloud(四)Ribbon自定义负载均衡
- SpringCloud之Ribbon+Rest调用负载均衡
- springcloud使用ribbon实现客户端负载均衡
- SpringCloud 笔记 (二)---- 简单搭建一个服务消费者,实现简单的ribbon负载均衡
- springcloud 中使用eureka/ribbon/Hystrix负载均衡及断路器
- 【SpringCloud】(六):Ribbon实现客户端负载均衡
- SpringCloud 笔记 (六)---- 客户端负载均衡Ribbon
- 自定义Ribbon的负载均衡
- 六、负载均衡-Ribbon 的负载均衡策略
- Ribbon实现服务器端的负载均衡
- 使用配置文件自定义Ribbon的负载均衡
- 五、负载均衡-Ribbon 的使
- PHP 反射API
- apache配置httpd-vhosts实现虚拟主机访问
- 文字两端对齐
- No service of type Factory available in ProjectScopeServices
- MD5.js,前端MD5加密
- SpringCloud的Ribbon负载均衡
- Redis中有序集(Sorted Set)判断某个键的成员存在的设计
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- qlExpress实践手册-常用语法介绍
- 泛海为上海董家渡项目融资90亿 世茂5亿债券将上市
- ssm+redis 如何更简洁的利用自定义注解+AOP实现redis缓存
- spring boot 添加admin监控
- qt学习笔记之QPushButton
- LeetCode week 8 : Longest Increasing Subsequence