Ribbon:Spring Cloud负载均衡与服务调用组件

问题总结

  1. 负载均衡?
  2. Ribbon实现服务调用?
  3. Ribbon实现负载均衡?
  4. 切换负载均衡策略?
  5. 定制负载均衡策略?

问题答案

  1. 负载均衡

    负载均衡(Load Balance),将用户的请求平分到多个服务器上运行,以扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。

  • 服务端负载均衡

  1. 服务端负载均衡:在客户端和服务端之间建立一个负载均衡服务器(硬件设备:F5,软件:Nginx)。负载均衡服务器维护了一份可用服务端清单,然后通过心跳机制来删除故障的服务端节点,以保证清单中的所有服务节点都是可以正常访问。

  2. 客户端发送请求,全部交给负载均衡服务器(轮询、随机),选择一个服务端进行转发。、

  3. 特点:

    (1)需要建立一个独立的负载均衡服务器。

    (2)负载均衡在客户端发送请求后进行,客户端不知道那个服务器提供服务。

    (3)可用服务端清单存储于负载均衡服务器中。

    • 客户端负载均衡

    1. 客户端负载均衡是将负载均衡逻辑以代码的形式封装到客户端上。客户端从服务注册中心获取服务端列表,并通过(轮询、随机)将请求分配给多个服务提供者。
    • 服务端负载均衡VS客户端负载均衡
    不同点 服务端负载均衡 客户端负载均衡
    是否需要建立负载均衡服务器
    是否需要服务注册中心
    可用服务清单存储位置 负载均衡服务器上(nginx) 服务注册中心
    负载均衡的时机 发送请求,再进行负载均衡 先负载均衡,再发送请求
    客户端是否了解服务提供方消息
  1. Ribbon实现服务调用

    • Ribbon可以与RestTemplate配合使用,以实现微服务之间的调用。
    • RestTemplate是一个用于消费第三方的请求框架,实现了对HTTP请求的封装。例如HEAD、GET、POST、PUT、DELETE等类型的HTTP请求,分别对应RestTemplate中的headForHeaders()、getForObject()、postForObject()、put()、delete()方法。
  1. Ribbon实现负载均衡

Spring Cloud Ribbon提供了一个IRule接口,用于定义负载均衡策略。

序号 实现类 负载均衡策略
1 RoundRobinRule 排序轮询
2 RandomRule 随机选取
3 RetryRule 先轮询,如果获取到的服务实例为null或已经失效,则再指定时间内不断地进行轮询重试,超过指定时间没有获取到则返回null
4 WeighedResponseTimeRule RoundRobinRule的一个子类,对父类进行了扩展。根据平均响应时间,计算所以服务实例的权重,响应时间和服务实例的权重、选中概率成反比。刚启动,统计信息不足,使用轮询
5 BestAvailableRule 先过滤掉故障或者失效的服务实例,选择并发量最小的服务实例
6 AvailabilityFilteringRule 同BestAvailableRule
7 ZoneAvoidanceRule 默认,根据服务所在区域的性能和服务的可用性,来选择服务实例(轮询)
  1. 切换负载均衡策略
  • 再客户端的配置类中,将IRule的其他实现类注入到容器中即可。
  1. 定制负载均衡策略
  • 类似于4

Ribbon:Spring Cloud负载均衡与服务调用组件的更多相关文章

  1. Spring Cloud Feign 声明式服务调用

    目录 一.Feign是什么? 二.Feign的快速搭建 三.Feign的几种姿态 参数绑定 继承特性 四.其他配置 Ribbon 配置 Hystrix 配置 一.Feign是什么? ​ 通过对前面Sp ...

  2. Spring Cloud 负载均衡初体验

    目录 服务搭建 1.注册中心--Eureka Server 2.服务提供方--Service Provider 3.服务消费方--Service Consumer 服务消费 Feign 与断路器 Hy ...

  3. Spring Cloud负载均衡:使用zuul作服务器端负载均衡

    1.目的: 本文简述Spring Cloud负载均衡之服务器负载均衡模式,使用组件为zuul. zuul作为Spring Cloud中的网关组件,负责路由转发.身份验证.请求过滤等等功能,那么我们可以 ...

  4. Spring Cloud Feign声明式服务调用(转载)+遇到的问题

    转载:原文 总结: 1.pom添加依赖 2.application中填写正确的eureka配置 3.启动项中增加注解 @EnableFeignClients 4.填写正确的调用接口 通过原文使用Fei ...

  5. Spring Cloud Alibaba(8)---Feign服务调用

    Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...

  6. Spring Cloud负载均衡:使用Feign作客户端负载均衡

    有了一篇服务端负载均衡后,再来一篇客户端负载均衡,客户端负载均衡很简单,无需在zuul中做多余配置(本示例不引入zuul),只需要在客户端进行Feign引入和配置即可. 准备工作很简单,实现客户端负载 ...

  7. spring Cloud负载均衡Ribbon

    Ribbon饥饿加载 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. 解决方式:开启饥饿加载 ribbon: eager-load: enabled: ...

  8. 笔记:Spring Cloud Feign 声明式服务调用

    在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以我们通常会针对各个微服务自行封装一些客户端类来包装这些依赖服务的调用,Spring Cloud Feign 在此基础上做了进 ...

  9. Spring Cloud Feign 优雅的服务调用

    Fegin 是由NetFlix开发的声明式.模板化HTTP客户端,可用于SpringCloud 的服务调用.提供了一套更优雅.便捷的HTTP调用API,并且SpringCloud整合了Fegin.Eu ...

  10. Spring Cloud 2-Feign 声明式服务调用(三)

    Spring Cloud Feign  1. pom.xml 2. application.yml 3. Application.java 4. Client.java 简化RestTemplate调 ...

随机推荐

  1. mpi转以太网连接300PLC与易控INSPEC上位机软件通讯

    300PLC转以太网与易控 INSPEC 上位机软件通讯 易控 INSPEC 软件通过以太网连接西门子 S7300 系列 PLC, 兴达易控MPI-ETH-XD1.0通讯模块为 PLC 提供以太网通讯 ...

  2. docker入门加实战——docker安装并配置阿里云加速

    docker入门加实战--docker安装并配置阿里云加速 为什么要学习docker 在开发和部署项目的过程中,经常会遇到如下问题: 软件安装包名字复杂,不知道去哪里找 安装软件和部署项目步骤复杂,容 ...

  3. 一次考试的简单T3

    我的第一个想法其实是毫无头绪 根本就想不到dp,直接就写了爆搜后来讲了才知道... 这种dp的状态好像是一类dp的模型,他们的状态都有这样的一维:以第i个数结尾.这样的dp有什么样的标志呢?以第i个数 ...

  4. Python - 字典3

    修改字典项 您可以通过引用其键名来更改特定项的值: 示例,将 "year" 更改为 2018: thisdict = { "brand": "Ford ...

  5. Windows下VC++编译器32位memcpy、memmove函数汇编代码详解

    整理者:赤勇玄心行天道 QQ号:280604597 微信号:qq280604597 QQ群:511046632 博客:www.cnblogs.com/gaoyaguo  blog.csdn.net/c ...

  6. spring-boot集成hikari多数据源

    maven依赖 <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</ ...

  7. Welcome to YARP - 5.身份验证和授权

    目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 ...

  8. Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

    Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 目录 Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 一.前置原则 二.一切皆组合 2.1 一切皆组合 2.2 垂直组合 2.2.1 第 ...

  9. 理解Go中的零值

    在 Go 语言中,零值(Zero Value)是指在声明变量但没有显式赋值的情况下,变量会被自动赋予一个默认值.这个默认值取决于变量的类型,不同类型的变量会有不同的零值.零值是 Go 语言中的一个重要 ...

  10. TypeScript学习小结:基础使用

    TypeScript学习小结:基础使用 某册子买了两年多了,到最近才开始学习TypeScript,拖延症的严重症状了:不过我还是深信人做一件事是需要一个契机的. 学完之后整体感受是:TypeScrip ...