Ribbon软负载 (F版)
Spring Cloud
为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态)。使用Spring Cloud开发人员可以快速地完成实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作
Ribbon
Ribbon
是 Netflix
开源的基于 HTTP
和 TCP
的客户端负载均衡器框架,目前也已被 Spring Cloud
团队集成在 spring-cloud-netflix
子项目下,主要用于客户端软负载功能,内部已实现了 随机
、轮训
、权重
、减压(选取压力最小的)
等常见的负载算法,同时也提供了 ILoadBalance
与 IRule
两个接口方便我们自己编写适合自己的负载算法
- 负载均衡
- 容错
- 多协议(HTTP,TCP,UDP)支持异步和反应模型
- 缓存和批处理
交互图
交互图
Try
要尝试 Spring Cloud Ribbon
首要的就是准备一个服务注册中心,还不太清楚的可以在回头看看上一章 认识Eureka
,这里就不做过多赘述了,准备 eureka-server(回顾上一章)
、product-server
、order-server
三个项目,后面的两个可以理解为上一章的 eureka-client
Eureka Server
详情参考上一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码
Product Server
一个普通的 Eureka Client
即可,详情参考上一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码
Order Server
一个普通的 Eureka Client
依赖
细心的小伙伴会发现,这和一个普通的 Eureka Client
也没啥区别啊,没任何额外依赖的,那是因为在 spring-cloud-starter-netflix-eureka-client
中已经帮我们依赖过 spring-cloud-starter-netflix-ribbon
了。假如使用 consul
、zookeeper
、etcd
等容器为服务发现为者时,就必须依赖 spring-cloud-starter-netflix-ribbon
包
1 |
<dependencies> |
配置文件
在 src/main/resources
目录下创建一个 bootstrap.yml
的文件,写上 eureka 相关配置信息
1 |
server: |
主函数
各位小伙伴对 Spring Boot
中的 RestTemplate
应该都不陌生,它是由 Spring Boot
提供而不是 Spring Cloud
,无负载功能,为了方便开发者,Spring Cloud
团队提供了一个 @LoadBalanced
注解(默认采用轮训算法)
1 |
package com.battcn; import org.springframework.boot.SpringApplication; |
控制器
客户端(order-server:7702
)从 Eureka Server
同步了 product-server:7703
和 product-server:7704
这个时候它是如何知晓注册表中的信息呢?上一章中遗留了一个知识点就是 DiscoveryClient
,通过它就可以获得注册表中客户端的信息了,下列代码块演示了 DiscoveryClient
的简单用法,更多 API 可以自行尝试
1 |
package com.battcn.controller; import org.springframework.beans.factory.annotation.Autowired; |
Why
有的小伙伴对上面的内容会存在一些疑问,为什么没有写 IP:PORT 了,而是写了一串字符,它是怎么做到的?
1 |
用通俗的概念来说,它就是编码与解码操作,还记得 Eureka Server UI 中 Application 吗? |
效果图
自定义 IRule
假如我们不想使用轮训了,换换口味改成随机算法,又或者想自己写一套适合自己的负载算法,可以用下面这种方式
1 |
package com.battcn.config; import com.netflix.loadbalancer.IRule; |
Ribbon软负载 (F版)的更多相关文章
- spring cloud 系列第3篇 —— ribbon 客户端负载均衡 (F版本)
源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.ribbon 简介 ribbon是Netfix公司开源的负载均衡组件,采用服 ...
- SpringCloud Netflix Ribbon(负载均衡)
⒈Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负 ...
- 使用ZooKeeper实现软负载均衡(原理)
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,提供的功能包括配置维护.名字服务.分布式同步.组服务等. ZooKeeper会维护一个树形的数据结构,类似于Windows资源管理器 ...
- vmware linux top si高以及网卡队列、软负载相关优化
今日,测试公司自行开发的一rpc中间件,期间发现top si的比例很高,且几乎只有一个cpu是繁忙的,其他均基本为0. 经查,si主要是系统软中断,最后确定是网卡导致的系统中断.于是,往上搜了下资料, ...
- 基于Ubuntu12.04-server版的openstack F版搭建步骤
本文为双节点搭建,分为计算(IP1)和控制节点(IP2) 说明: 计算节点组件: 1.mysql 2.keystone 3.Nova 4.glance 5.rabbitmq 控制节点组件: 1.cin ...
- Spring Cloud Ribbon——客户端负载均衡
一.负载均衡负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意思 ...
- 趣味编程:CPS风格代码(C#,F#版)
CPS风格代码(C#版) using System; namespace fp { class CPS { static int add(int x, int y) => x + y; stat ...
- 软工 · BETA 版冲刺前准备(团队)
软工 · BETA 版冲刺前准备(团队) 过去存在的问题 组员之间缺乏沟通,前后端缺乏沟通协作 组员积极性不高 基础知识不够扎实 手动整合代码效率过低 我们已经做了哪些调整/改进 通过会议加强组员之间 ...
- Spring Cloud:使用Ribbon实现负载均衡详解(下)
在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...
随机推荐
- Java实现 蓝桥杯VIP 基础练习 2n皇后问题
基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一 ...
- Java实现 LeetCode 403 青蛙过河
403. 青蛙过河 一只青蛙想要过河. 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有). 青蛙可以跳上石头,但是不可以跳入水中. 给定石子的位置列表(用单元格序 ...
- Java实现 蓝桥杯VIP 算法提高 去注释
算法提高 去注释 时间限制:1.0s 内存限制:256.0MB 去注释 问题 给你一段C++代码,将其中的注释去除后输出剩余的代码. 注释共有两种形式: 1. 行注视:以//开头,一直作用到行尾为止. ...
- Java实现第八届蓝桥杯包子凑数
包子凑数 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔 ...
- repo 导出本地 git tag 给他人
背景 使用 repo 管理了多个 git 仓库,有时需要将本地仓库的tag同步给其他人,但又不能直接推到远程(例如权限问题). 实际场景举例 本地复现了一个问题,需要让其他人回退到相同环境来排查. 本 ...
- Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to...异常处理
这个是打开Android Studio项目报的错误提示,单纯从上面的提示还是不能太直接的知道什么问题.后来我想这个项目的Gradle版本与我当前AS使用的版本不一致,可能是这个问题. 修改build. ...
- Cookie默认不设置path时,哪些请求会携带cookie数据
默认不设置path的时候,只会在请求和servlet同路径的情况下才会携带cookie中存储的数据,包含同级目录和下级目录 例如: 在http://localhost:8080/day01/test/ ...
- Java基础?看完以后再也不惧怕面试了
前言 这篇文章主要是Java基础部分,主要分为3个部分:Java集合.Java多线.JVM:这些东西帮助我面试成功率提升了很多.后面还有中间件Spring.Redis.RocketMQ等等吧,祝愿大家 ...
- DML_Data Modification_UPDATE
DML_Data Modification_UPDATE写不进去,不能专注了...... /* */ ------------------------------------------------- ...
- 循序渐进VUE+Element 前端应用开发(10)--- 基于vue-echarts处理各种图表展示
在我们做应用系统的时候,往往都会涉及图表的展示,综合的图表展示能够给客户带来视觉的享受和数据直观体验,同时也是增强客户认同感的举措之一.基于图表的处理,我们一般往往都是利用对应第三方的图表组件,然后在 ...