热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ribbon实现服务器端的负载均衡

1、怎么实现负载均衡通过注解@LoadBalanced来实现负载均衡,如下面的代码:2、Ribbon的架构与原理3、Ribbon的工作分为两步:1)第一步有限选择Eure

1、怎么实现负载均衡
通过注解@LoadBalanced 来实现负载均衡,如下面的代码:
这里写图片描述

2、Ribbon的架构与原理
这里写图片描述

3、Ribbon的工作
分为两步:
1) 第一步有限选择Eureka Server,它优先选择在同一个Zone且负载较少的Server,
2) 第二步在根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了多重策略,例如轮询round robin、随机Random、根据相应时间加权等。

4、实例说明
4.1、下面,我将举个实例来说明Ribbon的使用。
这里写图片描述

4.2、代码
这里只贴出关键的消费者的重要代码:
工程名称:microservice-consumer-provider-ribbon
Application类ConsumerMovieProviderApplication 代码如下:
这里写图片描述

配置Ribbon策略类 TestConfiguration ,注意,这个类的位置不能再Application类的目录或其子目录下,这是需要强调的。
这里写图片描述

最后,我们来看我们的测试接口类MovieController,我们把所加载的微服务的实例名和端口给打印出来。类代码如下:
这里写图片描述

我们的接口方法为test()方法,分别选择了加载上面已经在Eureka Server中所注册的User微服务,实例名分别为:microservice-provider-user 和 microservice-provider-user2 ,那么我们通过浏览器多测请求接口来查看能打印出什么。
我这里请求了接口5次,打印出的内容为:

这里写图片描述

我们可以看到,调用的实例“microservice-provider-user”顺序为:7901、7901、7900、7900、7900、7901、7901、7900,所以这个按照我们配置的策略—RandomRule(随机策略)来随机分配User提供者的。
好,接着看实例“microservice-provider-user2”的调用顺序为:7902、7903、7902、7903、7903、7902、7902、7903,所以这个也是按照我们配置的随机策略来随机分配User提供者的。

但是,我们上面的Ribbon策略类时放在非Application目录及其子目录下的,那如果我们要放在期目录或子目录下,那么办。这里我就放在与Application类同目录下。

1)首先,我们需要在Application同目录下增加一个注解类 ExcludeFromComponentScan,如下代码:
public @interface ExcludeFromComponentScan {

}

这个类没有内容。
2)其次,我们需要在Application类上面增加注解@ComponentScan ,如下所示:

这里写图片描述

说明一下,这里添加的这个注解是:排除掉有注解ExcludeFromComponentScan的策略类。

3) 然后,我们还需要在策略类上添加这个注解,如下:
这里写图片描述

4) 最后,我们启动这个服务,并在浏览器中调用接口,看看输出结果能否成功。
这里写图片描述

结果:实例“microservice-provider-user”调用顺序:7900、7901、7900、7901、7900、7901、7900、7901,很明显这不是随机策略,采用的是轮询策略。
实例“microservice-provider-user2”调用顺序:7903、7903、7903、7902、7903、7902、7903、7903,很明显这是随机策略。因为我们有配置排除策略的模式,在Application类上,我们注解了@RibbonClient,并且将策略TestConfiguration配置应用到了实例“microservice-provider-user2”上。

5、Ribbon Client 配置文件配置
上面已经做了Java代码配置,现在我们来进行配置文件配置,首先先以上面Java配置的工程复制一个工程,然后删除策略类TestConfiguration,和注解类ExcludeFromComponentScan;同时将Application类的注解@RibbonClient和@ComponentScan去掉。完成这些之后,开始进行配置。
这里写图片描述

上面的英文是摘自官网API文档中的部分,“定制Ribbon Client”,其中有几个关键点,

1) You can configure … in .ribbon.*
这里的意思就是说:你可以配置外部属性来配置Ribbon Client,在配置外部属性时应该使用.ribbon.*的格式来配置,这里的其实就是上面Java配置中对应的实例名,如:microservice-provider-user。

好,下面来进行配置,配置文件application.yml
这里写图片描述

配置完成之后,就可以启动Appcliation,然后再到浏览器中访问,并查看结果,结果如下:
这里写图片描述

结果:我们上面配的实例是”microservice-provider-user”,在打印出的结果,我们可以看到打印结果7901和7900是随机的;而实例”microservice-provider-user2”的访问结果明显是有规则的7902、7903,是轮询策略。


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
author-avatar
weidnermennenga_153
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有