[日报] Ribbon、Eureka、Nginx、负载均衡

这篇具有很好参考价值的文章主要介绍了[日报] Ribbon、Eureka、Nginx、负载均衡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、Ribbon和Eureka的关系

二、Eureka知识笔记(个人理解)

三、关于Ribbon和Nginx的负载均衡区别

1、位置&工作方式

2、策略

3、集中式与分布式

四、杂项

1、版本问题

2、一些课堂内容订正

3、Spring Cloud生态给出的替代方案

Spring Cloud LoadBalancer

Spring Cloud Consul

完成度比较


前言

        这次的文章会偏主观和实用性,因为这些内容可以讲的东西太多了,因此我只会根据老师布置的题目和需求,结合搜索工具、内容进行针对性定制化。

一、Ribbon和Eureka的关系

        Ribbon和Eureka在微服务架构中共同协作以实现服务的动态负载均衡。Eureka作为服务发现组件,负责管理服务实例的注册与发现。而Ribbon则是客户端负载均衡器,它根据Eureka Client提供的注册信息来选择合适的服务实例进行请求分发。

        注意这里你经常看到的一个词:服务发现件组。这玩意有点类似反向代理,但是它并不会去代理任何业务,职责非常单一:发现、注册。主观概念上完成了“反向代理”的,其实是Ribbon(同时它还提供了负载均衡,像Nginx)。

        但是它和反向代理又有区别:Ribbon确实承担了类似于反向代理的一些功能,因为它需要决定将请求发送到哪个服务实例。但是Ribbon的工作是在客户端完成的,而传统的反向代理则是作为服务器端的组件来操作。

二、Eureka知识笔记(个人理解)

        当项目架构变成微服务阶段时,不同服务之间需要靠网络进行通信。为了解决原始的HttpClient需要把url写死的问题,引入了服务发现件组(如Eureka、RestTemplate等一套解决方案。

        使用Eureka和服务发现机制的本质,是将服务实例的地址(IP和端口)管理从静态配置转移到了动态注册和发现。服务实例在启动时会将自己的地址信息注册到Eureka,而消费者通过Eureka来发现服务实例。这样服务的部署和扩缩容变得更加灵活,不需要手动修改和维护服务消费者的配置。

        如果你使用了服务集群来提升性能,那么需要使用相同的spring.application.name来向Eureka注册(因为Eureka是根据服务名分服务的),Ribbon进行负载均衡。

        这一套解决方案的流程大致是:

  1. 启动Eureka服务
  2. 启动微服务(自动向Eureka注册)
  3. 客户端通过Ribbon向Eureka服务提交需求,获取到服务列表
  4. 通过负载均衡算法,挑出适合的服务实例去调用

三、关于Ribbon和Nginx的负载均衡区别

1、位置&工作方式

        这是最明显的区别,因为:

  • Nginx是一个服务端的负载均衡器,它作为反向代理服务器,处理到达服务器的所有请求,并将它们分发到后端的多个服务实例中
  • Ribbon是一个客户端负载均衡器,它在微服务架构中运行,通过从服务注册中心(如Eureka)拉取服务列表,然后在客户端本地进行负载均衡算法处理,选择一个服务实例进行调用

2、策略

  • Nginx支持多种负载均衡策略,如轮询、最少连接数、IP哈希
  • Ribbon允许开发者自定义负载均衡策略,可以更灵活地根据需要选择不同的算法

3、集中式与分布式

  • Nginx是集中式的,所有请求都会经过Nginx服务器进行处理和路由
  • Ribbon是分布式的,每个客户端独立进行服务发现和负载均衡,这样可以减少单点故障的风险,并且可以更好地扩展

四、杂项

1、版本问题

        2.7.13版本的spring boot需要用3.1.x(比如3.1.8)版本的spring cloud,问就是去maven官网挨个试过去得到的结论

2、一些课堂内容订正

         老师建议使用@Resource而不是@Autowired,我有不同的看法。首先,他是在用字段注入进行讲解——但实际开发环境中,应该选用构造器注入的方式。而Spring官方推荐的构造器注入是使用注解@Autowired的(据说是因为这样可以确保依赖的不可变性和非空性)。 

        其次,老师推荐使用@Resource的原因是,它默认是按名注入而不是@Autowired的按类型注入。但是这里他没有讲

@Bean("ye,it's its name")
public SomeService(@Qualifier("ye,it's its name") RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

 这种写法(硬编码仅供解说展示,非编程习惯)

        为什么要用构造器注入而非字段注入呢?

  1. 不可变性: 使用构造器注入可以创建不可变的对象,这意味着一旦构造器通过注入创建了对象,其依赖就不能被更改。这有助于保证对象状态的一致性和安全性
  2. 依赖明确性: 构造器注入强制要求提供所有必需的依赖,这样可以在对象创建时就确保所有的依赖都被正确地提供,避免了空指针异常的风险
  3. 易于测试: 构造器注入使得对象更容易进行单元测试,因为测试时可以通过构造器直接传递模拟或者存根对象
  4. 减少Spring依赖: 字段注入需要依赖于Spring容器的反射机制来注入依赖,而构造器注入则可以在不使用Spring特定功能的情况下实现,这使得代码更加独立和可移植
  5. 预防循环依赖:使用构造器注入可以在应用启动时就发现循环依赖的问题,因为如果存在循环依赖,Spring容器无法创建Bean实例,这样就可以在编译时而不是运行时解决这些问题。而字段注入可能会隐藏循环依赖的问题,因为它允许Spring容器通过反射机制先创建Bean实例,然后再进行依赖注入。这可能导致运行时错误,因为Bean实例已经被创建,但是它们的依赖却没有被正确地处理。

所以,如果要我二选一,综合考虑下我更推荐使用@Autowired。(另外它是Spring自家的,有种莫名的靠谱感)

提一嘴:如果一个类只有一个构造方法,Spring框架会默认使用这个构造方法来进行依赖注入,无需添加任何注解(相反,如果有多个构造方法,必须添加@Autowired注解),从Spring 4.3版本开始这个特性就已经被包含在内了。这样可以减少你使用注解,让代码变得更加优美(但也会让可读性下降)。

3、Spring Cloud生态给出的替代方案

        事实上,Spring Cloud生态已经提出了Eureka和Ribbon的升级替换方案:

Spring Cloud LoadBalancer

        旨在替代 Ribbon。

  • Spring Cloud LoadBalancer 是 Spring Cloud 提供的一个客户端负载均衡器,旨在替代 Ribbon。它提供了一种更加轻量级和灵活的负载均衡解决方案,与 Ribbon 相比,Spring Cloud LoadBalancer 提供了更简化的 API 和更灵活的扩展机制
  • Spring Cloud LoadBalancer 支持多种负载均衡策略,并且可以与服务发现组件(如 Eureka、Consul)集成,以实现动态的服务发现和负载均衡

Spring Cloud Consul

        虽然没有明确想替换Eureka的目的,但是:

  • Spring Cloud Consul 是 Spring Cloud 提供的一个服务发现和配置管理工具,基于 Consul 实现。Consul 是一个开源的分布式服务发现和配置工具,可以用于构建分布式系统中的服务注册、发现和配置管理
  • Spring Cloud Consul 提供了与 Consul 的集成,可以通过 Consul 实现服务的注册与发现,同时还可以利用 Consul 的健康检查功能来实现服务的动态负载均衡

完成度比较

        Spring Cloud LoadBalancer 和 Spring Cloud Consul 都是 Spring Cloud 生态系统中的重要组件,它们提供了现代化的服务发现和负载均衡解决方案。相较于 Ribbon,Spring Cloud LoadBalancer 提供了更简单、更灵活的负载均衡功能,而 Spring Cloud Consul 则提供了与 Consul 集成的服务发现和配置管理功能

        从功能和设计上来说,Spring Cloud LoadBalancer 和 Spring Cloud Consul 可以看作是对 Ribbon 的进一步完善和扩展,更符合现代微服务架构的需求。因此,它们在某种程度上可以看作是 Ribbon 的升级版本,提供了更加全面和先进的功能文章来源地址https://www.toymoban.com/news/detail-841023.html

到了这里,关于[日报] Ribbon、Eureka、Nginx、负载均衡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud之负载均衡与服务调用(Ribbon)

    目录 Ribbon 简介 负载均衡 简介 负载均衡方式 服务端负载均衡 工作原理 特点 客户端负载均衡 工作原理 特点 对比 实现 负载均衡策略 切换负载均衡策略 定制负载均衡策略 超时与重试 单个服务配置 全局配置 服务调用 示例         Ribbon 是 Netflix 公司发布的开源组件,其

    2024年02月08日
    浏览(51)
  • Ribbon:Spring Cloud负载均衡与服务调用组件

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

    2024年02月03日
    浏览(46)
  • 【Spring Cloud】Ribbon 中的几种负载均衡策略

    负载均衡通常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。 服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使

    2024年02月15日
    浏览(61)
  • Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月08日
    浏览(53)
  • 【Spring Cloud】Ribbon 实现负载均衡的原理,策略以及饥饿加载

    在前文《深入理解 Eureka 注册中心的原理、服务的注册与发现》中,介绍了如何使用 Eureka 实现服务的注册与拉取,并且通过添加 @LoadBalanced 注解实现了负载均衡。这种自动化的背后隐藏着许多疑问: 服务是在何时进行拉取的? 负载均衡是如何实现的? 负载均衡的原理和策略

    2024年02月07日
    浏览(47)
  • 【springcloud 微服务】Spring Cloud Ribbon 负载均衡使用策略详解

    目录 一、前言 二、什么是Ribbon 2.1 ribbon简介 2.1.1  ribbon在负载均衡中的角色

    2024年02月02日
    浏览(64)
  • 4-Spring cloud之搭建Ribbon负载均衡——服务器上实操(下)

    我们在上篇文章的基础上继续Ribbon的负载均衡,为了更清晰,再放一次架构图,如下: 关于图的更多解释,请看Ribbon负载均衡上篇。 关于上篇请看下面文章,如下: 3-Spring cloud之搭建Ribbon负载均衡——服务器上实操(上). Ribbon负载均衡的规则都定义在IRule接口中,而IRule有

    2024年02月12日
    浏览(52)
  • Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon

    Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon 目前主流的负载均衡方案有两种,一种是集中式均衡负载,在消费者与服务提供者之间使用独立的代理方式进行负载,比如F5、Nginx等。另一种则是客户端自己做负载均衡,根据自己的请求做负载,Ribbon就属于客户端自己

    2024年02月09日
    浏览(55)
  • Spring Cloud Alibaba全家桶(三)——微服务负载均衡器Ribbon与LoadBalancer

    本文为 微服务负载均衡器Ribbon与LoadBalancer 相关知识,下边将对 什么是Ribbon (包括: 客户端的负载均衡 、 服务端的负载均衡 、 常见负载均衡算法 ), Nacos使用Ribbon , Ribbon内核原理 (包括: Ribbon原理 , Ribbon负载均衡策略 , 饥饿加载 ), Spring Cloud LoadBalancer (包括:

    2024年02月02日
    浏览(41)
  • springCloud之Eureka之负载均衡Ribbon

    说完了注册中心Eureka,虽然Eureka可以实现服务的发现和调用,但在微服务体系中,服务的发现和调用往往是需要伴随着负载均衡这个概念一体的。而在SpringCloud中自然也存在着与Eureka配套的负载均衡组件,也就是Ribbon组件。 Ribbon介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包