前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud Alibaba学习笔记 ——(七、负载均衡专题)

SpringCloud Alibaba学习笔记 ——(七、负载均衡专题)

作者头像
Gorit
发布2021-12-30 17:33:46
8500
发布2021-12-30 17:33:46
举报
文章被收录于专栏:Gorit 带你学全栈系列

SpringCloud Alibaba —— 负载均衡专题

Author: Gorit Date:2021年1月 Refer:阿里云大学 2021年发表博文: 12/50

七、负载均衡专题

7.1 本地负载均衡器

7.1.1 什么是本地负载均衡器?

什么是本地负载均衡器:我们的消费者从我们的注册中心上获取接口调用地址列表。 本地实现负载均衡算法(轮询,随机、hash一致性、权重)等原理:获取接口地址列表,采用算法获取选择一个接口地址实现本地 rpc 远程调用

本地负载均衡器:

  1. 自己写
  2. ribbon (SpringCloud 第一代 Netifix旗下)
  3. loadbalancer(SpringCloud 自己研发)

ribbon ? loadbalancer?

SpringCloud Rest 或者 Openfeign 都是默认支持 ribbon

7.1.2 本地负载均衡与 Nginx 的区别

Nginx 属于服务器端负载均衡器。客户端所有的请求都统一交给 Nginx,再有 Nginx 转发到真实的服务器实现负载均衡

本地负载均衡器:属于客户端负载均衡

Nginx 实现负载均衡与本地实现负载均衡器应用场景

  1. Nginx 实现对我们服务器实现负载均衡器 一般用于 tomcat/jetty 服务器
  2. 本地负载均衡器属于客户端负载均衡器:一般用于微服务远程调用,比如 dubbo、restTemplate、openfeign 或者 rpc 远程调用框架。

7.1.3 使用 loadbalanced 实现负载均衡(基于 Ribbon)

SpringCloud 中 rest 或者 openfeign客户端默认都是使用 ribbon 实现负载均衡器

在 restTemplate 注入的方法加上 @LoadBalanced 注解

代码语言:javascript
复制
    @Bean
    @LoadBalanced // 解决无法使用 http://服务名/接口名 实现 rpc 远程调用
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

在 orderService 中新增一个方法

代码语言:javascript
复制
    /**
     * 基于 ribbon 实现本地负载均衡
     * @return
     */
    @GetMapping("/ribbon/order")
    public Object getOrderToRibbonUser() {
        String result  = restTemplate.getForObject("http://gorit-member/user", String.class);
        return "订单调用会员返回结果:"+result;
    }

这样就实现了基于 ribbon 的负载均衡,实现效果和上面一样,这里就不贴图了。

7.1.4 使用 loadBalancerClient 实现负载均衡

代码语言:javascript
复制
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;

   @Autowired
    private LoadBalancerClient loadBalancerClient;

   /**
     * 根据 loadBalancerClient 实现负载均衡器
     * @return
     */
    @GetMapping("/load/order")
    public Object loadBalancerClientMenber() {
        ServiceInstance result = loadBalancerClient.choose("gorit-member");
        return "订单调用会员返回结果:"+result;
    }

返回结果:

订单调用会员返回结果:RibbonServer{serviceId=‘gorit-member’, server=10.9.9.117:8080, secure=false, metadata={preserved.register.source=SPRING_CLOUD}}

订单调用会员返回结果:RibbonServer{serviceId=‘gorit-member’, server=10.9.9.117:8082, secure=false, metadata={preserved.register.source=SPRING_CLOUD}}

7.2 Openfeign 客户端使用

一、案例

案例:openfeign

SpringCloud 第一代采用 feign 第二代采用 openfeign

Openfeign 客户端作用:是一个 WEB 声明式的 Http 客户端远程调用,底层封装了 HttpClient技术。

Openfeign 是 springcloud 自己研发的。

二、微服务项目架构 项目架构模式

gorit-openfeign-parent 整个依赖父类

  • gorit-service-api 开放的 api 接口 定义了接口是没有任何的代码实现
    • gorit-service-api-member 会员提供开放接口
    • gorit-service-api-order 订单提供开放接口
      • gorit-service-impl 对我们开放的 api 接口实现
      • gorit-service-impl-member
      • gorit-service-impl-order

微服务架构基本的样式:最大的特点能够服用

三、相关特点

注意 feign 客户但调用的事项,如果请求参数没有加注解 @RequestParam,会采用 post 请求发送

Openfeign 默认是支持 负载均衡,ribbon

在微服务架构中服务的命名不能有下划线。

Rest、openfeign 都学习

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringCloud Alibaba —— 负载均衡专题
  • 七、负载均衡专题
    • 7.1 本地负载均衡器
      • 7.1.1 什么是本地负载均衡器?
      • 7.1.2 本地负载均衡与 Nginx 的区别
      • 7.1.3 使用 loadbalanced 实现负载均衡(基于 Ribbon)
      • 7.1.4 使用 loadBalancerClient 实现负载均衡
    • 7.2 Openfeign 客户端使用
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档