springcloud的两种负载均衡策略

前言:

  之前写了通过Ribbon+RestTemplate实现调用服务,此处我再系统的说一下两者的区别

一、springcloud的负载均衡策略

  1、Ribbon 

是基于Netflix Ribbon实现的一套客户端 负载均衡的工具,类似Nginx主要功能时提供客户端的软件负载均衡算法LB就是负载均衡,集中式(F5),进程内(Nginx),消费者可以自动看从Eureka中拿到对应的服务列表,默认进行轮询RoundRobinRule

下图是RestTemplate的自带的7中均衡策略

我们在之前通过Ribbon+RestTemplate实现调用服务的时候,在获取RestTemplate的方法上加了@LoadBalanced ,实现默认轮询,如果需要更改其均衡策略,则在配置类中声明想要的均衡策略

具体实现参考:https://www.cnblogs.com/guanyuehao0107/p/11819375.html

@Configuration
public class RestConfig {

    @Bean    //通过RestTemplate来实现调用接口
    @LoadBalanced     //表示RestTemplate开启了负载均衡
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
    //重新创建一个均衡策略,表示不使用默认
    @Bean
    public IRule getIReule(){ //通过获取一个IRule对象,
        return  new RandomRule();  //达到的目的,用我们重新选择的随机,替代默认的轮训方式
    }
}

2、消费者controller层

    //声明一个接口
//    private static  final String HTTP_NAME = "http://localhost:8001/product/";
    private static  final String HTTP_NAME = "http://MICROSERVICE-PRODUCT";
    @Autowired
    private RestTemplate restTemplate;
    @Resource
    private DiscoveryClient client;   //我这个微服务想要被别人去发现
    @GetMapping("/consum/find/{id}")
    public User findone(@PathVariable("id")Integer id){
        String url = HTTP_NAME+"/product/findone/"+id;
        return  (User) restTemplate.getForObject(url,User.class);
    }
    @GetMapping("/consum/findAll")
    public List<User> getAll(){
        List<User> users = restTemplate.getForObject(HTTP_NAME + "/product/list", List.class);
        return users;
    }

2、Fegin的配置 

  Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,在api层只需要创建一个接口,然后在上面添加注解即可

步骤如下:

1、导入依赖,创建接口的微服务,以及消费者微服务都需要引入

 <!-- Feign依赖 -->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
     <version>2.1.0.RELEASE</version>
</dependency>

2、创建消费者层

@RestController
public class Usercontroller {
    @Resource  //调用的是API层的接口
    private UserService userService;
    @GetMapping("/consum/find/{id}")
    public User findone(@PathVariable("id")Integer id){
        return  userService.findById(id);
    }
    @GetMapping("/consum/findAll")
    public List<User> getAll(){
        return userService.findAll();
    }
}

3、在消费者的模块的启动类上加上 @EnableFeignClients(basePackages = {"com.ghh"}) //扫描另外一个Feign的接口

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.ghh"}) //扫描另外一个Feign的接口
public class ConsumStart_Feign {
    public static void main(String[] args) {
        SpringApplication.run(ConsumStart_Feign.class,args);
    }
}

4、在api层要创建一个接口,以及加上一个注解@FeignClient(value = "MICROSERVICE-PRODUCT"),表名调用的提供者或者服务名称

@FeignClient(value = "MICROSERVICE-PRODUCT")
public interface UserService {
        @GetMapping("/product/findone/{id}")
        public User findById(@PathVariable("id") Integer id);
        @GetMapping("/product/list")
        public List<User> findAll();
}

三、Ribbon+RestTemplate和Feign的区别

 1、实际开发中,对服务依赖的调用可能不止一处,往往一个接口会被多处调用,如果使用Ribbon+RestTemplate,就需要在每一个模块都要创建一个配置类,而且,各社区中javaweb也倾向于面向接口编程

 2、通常针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用,所以,Feign在此基础上做了进一步封装,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),完成对服务提供方的接口绑定

 3、使用Feign是通过接口的方法调用Rest服务,该请求发送给Eureka服务器,通过Feign直接找到服务接口。Feign融合了Ribbon技术,所以也支持负载均衡。

原文地址:https://www.cnblogs.com/guanyuehao0107/p/11831814.html

时间: 2024-11-06 07:43:00

springcloud的两种负载均衡策略的相关文章

nginx的几种负载均衡策略

转自https://www.cnblogs.com/1214804270hacker/p/9325150.html 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器. 二.Nginx负载均衡策略 负载均衡用于从"upstream"模块定义的后端服务器列表中选取一台服务器接受用户的请求.一个最基本的upstream模块是这样的,模块内的server是服务器列表: #动态服务器

Ribbon负载均衡策略配置

在这里吐槽一句:网上很多文章真是神坑,你不看还好,看了只会问题越来越多,就连之前的问题都没有解决!!! 不多说了,Ribbon作为后端负载均衡器,比Nginx更注重的是请求分发而不是承担并发,可以直接感知后台动态变化来指定分发策略.它一共提供了7种负载均衡策略: 策略名 策略声明 策略描述 实现说明 BestAvailableRule public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule 选择一个最小的并

几种软负载均衡策略分析

公司去年上了F5,好用是好用,但是费用太高昂了,所以最近一直在研究软负载均衡这一块儿,恰巧今年年初谷歌开源了seesaw,让自己可以绕过很多弯路.特此总结下之前了解的负载均衡策略. -Sunface 在分布式系统中,负载均衡是非常重要的环节,通过负载均衡将请求派发到网络中的一个或多个节点上进行处理.通常来说,负载均衡分为硬件负载均衡及软件负载均衡.硬件负载均衡,顾名思义,在服务器节点之间安装专门的硬件进行负载均衡的工作,F5便为其中的佼佼者.软件负载均衡则是通过在服务器上安装的特定的负载均衡软件

nginx 负载均衡策略

nginx 负载均衡策略 1. 轮询 轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如: upstream backend {server backend1.example.com;server backend2.example.com;} 这种情况是每个server都使用相同的权重,默认值为1 可以手动设定权重,例如 upstream backend {server backend1.example.com weight=5;server backend

负载均衡策略

在实际应用中,我们可能不想仅仅是把客户端的服务请求平均地分配给内部服务器,而不管服务器是否宕机.而是想使Pentium III服务器比Pentium II能接受更多的服务请求,一台处理服务请求较少的服务器能分配到更多的服务请求,出现故障的服务器将不再接受服务请求直至故障恢复等等. 选择合适的负载均衡策略,使多个设备能很好的共同完成任务,消除或避免现有网络负载分布不均.数据流量拥挤反应时间长的瓶颈.在各负载均衡方式中,针对不同的应用需求,在OSI参考模型的第二.三.四.七层的负载均衡都有相应的负载

数据库读写分离和负载均衡策略

最近在学习数据库的读写分离和主从复制,采用的是一主多从策略,采用轮询的方式,读取从数据库的内容.但是,假如某一台从数据库宕机了,而客户端不知道,每次轮选到此从数据库,不都要报错?到网上查阅了资料,找到一篇不错的博文,不仅讲了解决方案,也详细的讲述了数据库的分区,分表,集群和负载均衡策略,博文原址http://www.cnblogs.com/zhongxinWang/p/4262650.html 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互

撸一撸Spring Cloud Ribbon的原理-负载均衡策略

在前两篇<撸一撸Spring Cloud Ribbon的原理>,<撸一撸Spring Cloud Ribbon的原理-负载均衡器>中,整理了Ribbon如何通过负载均衡拦截器植入RestTemplate,以及调用负载均衡器获取服务列表,如何过滤,如何更新等的处理过程. 因为,负载均衡器最终是调用负载均衡策略的choose方法来选择一个服务,所以这一篇,整理Ribbon的负载均衡策略. 策略类 RandomRule RoundRobinRule RetryRule WeightedR

Nginx专题(2):Nginx的负载均衡策略及其配置

摘要:本文介绍了Nginx的负载均衡策略,一致性hash分配原理,及常用的故障节点的摘除与恢复配置. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方数据团队高级技术经理 周恒<Nginx的细枝末节> 分享者:宜信支付结算八方数据团队高级技术经理 周恒 原文首发于支付结算技术团队公号:野指针 前篇Nginx专题(1):Nginx之反向代理及配置详细介绍了Nginx功能之一--反向代理.本篇文章将重点介绍Nginx功能之二--负载均衡. 为了增加对负载均衡的好

Nginx的负载均衡策略及配置

转:https://www.cnblogs.com/yixinjishu/p/12028327.html 为了增加对负载均衡的好感,我们先了解负载均衡能实现什么. 将多个服务器节点绑定在一起提供统一的服务入口. 故障转移,在意外发生的时候,可以增加一层保险,减少损失. 降低上线运维复杂度,实现平滑上线.运维和开发同学都喜欢. 下面正式进入主题. 一.Nginx的负载均衡策略 负载均衡就是将请求“均衡”地分配到多台业务节点服务器上.这里的“均衡”是依据实际场景和业务需要而定的. 对于Nginx来说