Ribbon实现负载均衡

Ribbon实现负载均衡

1.什么是Ribbon

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。

2.Ribbon能做什么

1.LB负载均衡是什么

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。
常见的负载均衡有软件Nginx,LVS,硬件 F5等

1.集中式LB

即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;

2.进程内LB

将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
实现:负载均衡+RestTemplate调用

3.Ribbon的功能

Ribbon是一个部署在调用端并在生产的云服务项目中经过考验的进程间通信库。Ribbon主要提供

  • 客户端负载均衡
  • 容错处理
  • 支持多协议的异步通信。支持HTTP、TCP、UDP协议。
  • 支持缓存和批量处理
4.Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别

Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

6.Ribbon默认自带的负载规则
  1. com.netflix.loadbalancer.RoundRobinRule 轮询

  2. com.netflix.loadbalancer.RandomRule 随机

  3. com.netflix.loadbalancer.RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务

  4. WeightResponseTimRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择

  5. BestAvaliableRule 会像过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

  6. AvaliabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例

  7. ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能喝server的可用性选择服务器

    7.Ribbon的组件

    Ribbon 主要有五大功能组件:ServerList、Rule、Ping、ServerListFilter、ServerListUpdater、LoadBalancer

    3.Ribbon负载均衡的搭建

    1.创建多个服务提供者

    提供者端口:10088

    提供者端口2:10086

    消费者客户端端口:10087

    2.修改pom文件

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
    dependency>
    

    注:如果已经添加了Client依赖者不需要添加上面所述的依赖

    <dependency>
    	<groupId>org.springframework.cloudgroupId>
    	<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    

    3.在启动类里面添加注解

    package cn.hxr;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class App {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		SpringApplication.run(App.class, args);
    	}
    	@Bean
    	##ClientRibbon依赖引出
    	@LoadBalanced
    	public RestTemplate restTemplate(){
    		return new RestTemplate();
    		
    	}
    }
    

    4.修改Controller层

    public class UserController {
    	
    	@Autowired
    	private RestTemplate restTemplate;
    	
    	@GetMapping("/{id}")
    	public User querbyId(@PathVariable("id") Integer id){
    		##这里需要填写实例名称配置文件中springapplicationname后面的名字
    		String url="http://SpringCloud-service/user/"+id;
    		User uv=restTemplate.getForObject(url, User.class);
    		System.out.println(uv);
    		System.out.println(url);
    		return uv;
    	}
    

    5.启动eureka注册中心服务提供者服务消费者

    访问localhost:10087/1

​ 进行测试有数据返回则搭建完成

你可能感兴趣的:(负载均衡,ribbon,服务器)