您现在的位置是:首页 > 正文

springcloud——客户端Eureka Client实现负载均衡 Ribbon

2024-04-01 00:55:54阅读 1

一、简介

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

LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。常见的负载均衡有软件Nginx,LVS,硬件 F5等。相应的在中间件,例如:dubbo和SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义。 

负载均衡的实现方式有两种,分别是服务端的负载均衡和客户端的负载均衡:

服务端负载均衡:当浏览器向后台发出请求的时候,会首先向反向代理服务器发送请求,反向代理服务器会根据客户端部署的ip:port映射表以及负载均衡策略,来决定向哪台服务器发送请求,一般会使用到nginx反向代理技术。

客户端负载均衡:当浏览器向后台发出请求的时候,客户端会向服务注册器(例如:Eureka Server),拉取注册到服务器的可用服务信息,然后根据负载均衡策略,直接命中哪台服务器发送请求。这整个过程都是在客户端完成的,并不需要反向代理服务器的参与。

 

Eureka与Ribbon配合使用架构图


Ribbon在工作时分成两步:

  • 第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server
  • 第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址

其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。

二、为服务消费者实现Ribbon

(一)、创建一个microservicecloud-consumer-80工程

1、引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Ribbon相关 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
</dependencies>

2、添加配置application.yml

server:
  port: 80
eureka:
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

网站文章

  • 引用和指针那些事

    对一个数据建立一个“引用”,其作用是为一个已经定义的变量起一个别名【1】引用的格式 类型&amp; 引用的变量名(别名)=定义过的变量名 比如有一个变量a,想给他起一个别名:int a=10; //定义一个变量aint&amp; b=a; //声明b是a的引用cout&lt;&lt;a&lt;&lt;endl; //10cout&lt;&lt;b&...

    2024-04-01 00:55:48
  • 万事开头难? 喵小DI玩“羊了个羊”可不难

    万事开头难? 喵小DI玩“羊了个羊”可不难

    DI-sheep 版 羊了个羊

    2024-04-01 00:55:42
  • UML的学习专题

    根据大神的博客,进行学习UML-统一建模语言

    2024-04-01 00:55:18
  • Django 路径

    django BASE_DIRimport osBASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) PROJEC...

    2024-04-01 00:55:09
  • 【Springboot】springboot中使用mybatis操作数据库

    【Springboot】springboot中使用mybatis操作数据库

    新建springboot项目的时候,选择好web,mybatis,JDBC在application.properties或者application.yml中配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:33...

    2024-04-01 00:55:02
  • 静态连接(dynamic link)和动态连接(static link)初步理解

    前两天配置QT和VTK环境,焦头烂额啊,第一次配置个环境配置这么费劲的,这俩工具都不是微软出的开发库,需要自己编译,编译时间那个长。。。3,4个小时啊,等的花都谢了,好不容易编译好了,又出现了各种问题。 首先,早就听说过这两个库是跨平台的,当时觉得好牛逼啊,作为一个鄙视wind

    2024-04-01 00:54:37
  • mediawiki 详细安装

    1、首先在http://sourceforge.net/projects/wampserver/files/WampServer%202/WampServer%202.2/下载2.2版本,http://sourceforge.net/projects/wampserver/files/WampServer%202/是各个版本的安装文件。根据自己的系统确定安装32位的还是64位的 2、双击进行安装

    2024-04-01 00:54:29
  • 42. Trapping Rain Water 计算储水量

    给定一个数组, 表示高度,计算存水量。例子:Input: [0,1,0,2,1,0,1,3,2,1,2,1]Output: 6方法1:动态规划int trap(vector<int>& height) { if (height.empty()) { return 0; } int n = height.size(); int lef...

    2024-04-01 00:54:22
  • 从订单信息页面进入订单详细商品页面,最简单的MVC思想

    从订单信息页面进入订单详细商品页面,最简单的MVC思想

    前言习惯上图,看流程图把,下面是具体实现以后的一个流程图。步骤- (1)点击订单详情,进入订单详情列表,展示订单的一下基本信息,在上图框内,可随机输入查询信息,查询具体订单信息。(2)点击订单商品详情,进入具体订单,图中进入订单编号1的商品页面,可以看到具体商品信息,从数据库我们建立一张表,关联订单跟具体商品的关系。正文直接上代码吧,简单粗暴,因为之前有

    2024-04-01 00:53:58
  • 使用C/C++实现Java的Native方法接口(JNI)(4)JNI数据类型

    在Java程序中使用native接口(JNI)调用外部的使用C/C++实现的函数

    2024-04-01 00:53:45