SpringCloud学习(4)——Ribbon负载均衡
Ribbon概述
SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具。
简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软件的负载均衡算法, 将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项, 如:连接超时, 重试等。就是在配置文件中列出Load Balancer(简称LB)后面所有的机器, Ribbon会自动的帮助你基于某种规则(如简单的轮询,随机连接等)去连接这些机器, 我们也很容易使用Ribbon实现自定义的负载均衡算法。
负载均衡分为:集中式负载均衡和进程内负载均衡。
- 集中式负载均衡: 在服务的消费方和提供方之间使用独立的负载均衡设施(可以是硬件: 如F5, 也可以是软件: 如Nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方。
- 进程内负载均衡: 将负载均衡逻辑集成到服务消费端, 消费端从服务注册中心获取有哪些地址可用, 然后再从这些地址中选出合适的服务器。
Ribbon就属于进程内负载均衡, 它只是一个类库, 集成于消费端进程中, 消费放通过它获取到服务提供方的地址。
搭建Ribbon负载均衡
因为Ribbon是客户端负载均衡工具, 所以我们要在消费端搭建Ribbon环境, 即在microservicecloudconsumerdept80工程中搭建。
修改microservicecloudconsumerdept80:
application.xml
修改配置Bean文件:ConfigBean.java添加@LoadBalanced注解, 以方便的实现Ribbon的负载均衡
修改启动类:
为了更符合微服务的调用方式, 我们将访问host+port方式修改为用微服务名称访问:
测试: 启动顺序, 服务注册中心必须优先启动。在浏览器中输入http://localhost/consumer/dept/get/1出现下列页面即成功。
架构说明
搭建服务提供者集群
创建microservicecloudproviderdept8002, microservicecloudproviderdept8003将microservicecloudproviderdept8001中的源码粘贴到此两个module中。
修改microservicecloudproviderdept8002
pom.xml: 将dependencies 标签中的所有依赖全部拷贝到pom文件中
application.yml: 修改端口号, 修改微服务实例id, 修改数据库
修改启动类:
测试: 先启动注册中心, 再启用服务提供者, 最后启动服务消费者
此三个库数据轮流出现, 说明测试成功!
总结: Ribbon其实就是一个软负载的客户端组件, 它可以和其他所需请求的客户端结合使用, 和Eureka结合只是其中的一个实例。
Ribbon核心组件IRule
IRule根据特定算法从服务列表中选取一个要访问的服务。默认算法是轮询。
源码结构
修改默认算法
在消费端ConfigBean.java中添加下面的方法
Ribbon自定义
官方文档给出明确警告: 这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下, 否则我们自定义的这个配置类就会被所有Ribbon客户端所共享, 也就是说达不到特殊化定制的目的了。
意思就是, 不允许和启动类在同一个包以及子包下。
此自定义负载均衡算法是根据轮训改编, 当一台服务被调用5次之后再调用下一台服务。
在启动类添加@RibbonClient注解
GitHub源码
https://github.com/wcd19901010/microservicecloud
SpringCloud学习(4)——Ribbon负载均衡的更多相关文章
- 最适合新手入门的SpringCloud教程 6—Ribbon负载均衡「F版本」
SpringCloud版本:Finchley.SR2 SpringBoot版本:2.0.3.RELEASE 源码地址:https://gitee.com/bingqilinpeishenme/Java ...
- SpringCloud学习笔记:负载均衡Ribbon(3)
1. RestTemplate简介 RestTemplate是Spring Resource中一个访问第三方RESTful API接口的网络请求框架. RestTemplate是用来消费REST服务的 ...
- SpringCloud学习(5)——Feign负载均衡
Feign概述 Feign是声明式的Web服务客户端, 使得编写Web服务客户端变的非常容易, 只需要创建一个接口, 然后在上面添加注解即可. Feign旨在使编写Java Http客户端变的更容易. ...
- 008 SpringCloud 学习笔记4-----Ribbon负载均衡
1.Ribbon概述 实际环境中,我们往往会开启很多个itcast-service-provider的集群.此时我们获取的服务列表中就会有多个,到底该访问哪一个呢? Eureka中已经帮我们集成了负载 ...
- SpringCloud学习笔记(2):使用Ribbon负载均衡
简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...
- SpringCloud的入门学习之概念理解、Ribbon负载均衡入门
1.Ribbon负载均衡,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端.负载均衡的工具. 答:简单的说,Ribbon是Netflix发布的开源项目,主要功能 ...
- SpringCloud学习笔记(五):Ribbon负载均衡
简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡的工具 .(重点:客户端) 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提 ...
- SpringCloud全家桶学习之Feign负载均衡----Feign(四)
一.Feign概述 (1)Feign是什么? 官网地址:https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-f ...
- SpringCloud系列之客户端负载均衡Netflix Ribbon
1. 什么是负载均衡? 负载均衡是一种基础的网络服务,它的核心原理是按照指定的负载均衡算法,将请求分配到后端服务集群上,从而为系统提供并行处理和高可用的能力.提到负载均衡,你可能想到nginx.对于负 ...
随机推荐
- python单元测试之参数化
paramunittest下载地址:https://pypi.python.org/pypi/ParamUnittest/ 当然我们也可以通过pip install paramunittest方式进行 ...
- 7. I/O复用
一.I/O复用的特点 能同时监听多个文件描述符 自身是阻塞的 当多个文件描述符同时就绪时,如果不采取额外的措施,程序就只能按顺序依次处理其中的每一个文件描述符 由于其第三个特点,所以服务器程序看起来仍 ...
- 20162328蔡文琛 week06 大二
20162328 2017-2018-1 <程序设计与数据结构>第6周学习总结 教材学习内容总结 队列元素按FIFO的方式处理----最先进入的元素最先离开. 队列是保存重复编码k值得一种 ...
- SDN练习一
SDN练习第一题 题目描述 实现网络拓扑: 具体要求: 南向接口采用OpenFlow 协议. 可查看网络的拓扑信息视图. H1.H2.H3.H4 任意两两可互通. 实现思路 利用mininet可视化图 ...
- 《IT小小鸟》读后感
我是来自大一的小小鸟,想要飞却没有一对坚硬的臂膀! 看了<IT小小鸟>了解了学长和学姐们的大学经历后开始让我反思我的大学生活.学长和学姐们通过自身的经历来告诉我们,应该怎么样规划好大学生涯 ...
- 【转载】mysql建表date类型不能设置默认值
如题,mysql建表date类型的不能设置一个默认值,比如我这样: CREATE TABLE `new_table` ( `biryhday` datetime NULL DEFAULT '1996- ...
- 【bzoj5146】有趣的概率 微积分
题目描述 "可爱的妹子就像有理数一样多,但是我们知道的,你在数轴上随便取一个点取到有理数的概率总是0,"芽衣在床上自顾自的说着这句充满哲理的话,"诶,柚子,我写完概率论的 ...
- Android四大组件之Intent(续)
- Educational Codeforces Round 55 Div. 2 翻车记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- UVA - 11997(巧妙的优先队列)
题意: 有k个整数数组,各包含k个元素,在每个数组中取一个元素加起来,可以得到kk个和,求这些和中最小的k个值 解析: 从简单的情况开始分析:经典方法,对原题没有思路,那么分析问题的简化版 这是对于两 ...