负载均衡

1.什么是负载均衡

负载均衡是一种技术,它帮助管理和分配网络流量,使得多个服务器共同承担处理任务的工作。这样做的目的是为了确保没有一个服务器因为过载而影响服务的质量,同时也能提高整个系统的稳定性和响应速度。当用户的请求进来时,负载均衡器会根据一定的规则,将这些请求分散到不同的服务器上处理。如果其中某个服务器出现问题,负载均衡器还可以将请求转给其他正常工作的服务器,保证服务不会中断。这种技术广泛应用于网站和在线服务中,以支持大量的用户访问。

2.负载均衡的分类

你的描述准确地概括了硬件负载均衡与软件负载均衡的主要区别和特点。下面是更详细的解释:

硬件负载均衡

硬件负载均衡通常指的是专用设备,这些设备设计用于处理和分配网络流量。它们通常具有以下特点:

  • 高性能:专门设计的硬件可以提供比普通服务器更高的性能,尤其是在处理大量并发连接时。
  • 可靠性:这些设备往往具备冗余组件和热插拔功能,以提高系统的稳定性和可用性。
  • 易于管理:它们通常配备有图形界面,方便管理员进行配置和监控。
  • 智能功能:许多硬件负载均衡器提供了高级功能,如健康检查、会话持久性、SSL卸载等。
  • 成本:虽然初期投资可能较高,但对于需要高可用性和高性能的企业来说,长期来看可能是更经济的选择。

软件负载均衡

软件负载均衡则是指运行在标准服务器上的软件解决方案。其特点包括:

  • 灵活性:可以根据现有的IT基础设施轻松部署,适用于各种规模的企业。
  • 成本效益:相比硬件解决方案,软件负载均衡通常成本更低,特别是对于小型和中型企业。
  • 定制化:可以根据特定需求进行调整和定制。
  • 集成:可以与现有的虚拟化和云平台无缝集成。
  • 更新:软件负载均衡器通常更容易升级和维护。

选择

选择硬件还是软件负载均衡取决于组织的具体需求,包括预算、现有基础设施、所需的功能集以及对可靠性和性能的要求。随着技术的发展,两者之间的界限也在逐渐模糊,许多现代解决方案都提供了软硬件结合的选项。

3.引入负载均衡的好处

引入负载均衡,可以将负载(工作任务)进行平衡、分摊到多个执行单元上运行。例如,Web服务器、FTP服务器、企业关键应用服务器和其他主要任务服务器等,协同完成工作任务。

负载均衡器会维护一个可用的服务清单,通过心跳检测来剔除清单中故障的服务端节点。当客户端借助网络发送请求到负载均衡器时,负载均衡器从维护的服务清单里面选择一个服务器,并将客户端请求转发到此服务器,从而提高系统的可用性和稳定性。

第一个Ribbon实例

步骤1:

创建父工程ribbon-parent,将搭建的高可用集群中的5个子项目都复制到ribbon-parent父工程中,并依次添加为Maven项目。
在这里插入图片描述

步骤2:

改造服务提供者-创建PortController类

在项目eureka-provider和eureka-provider-another中新建controller包,并创建PortController类,该类能够返回当前项目的端口号。
在这里插入图片描述
在这里插入图片描述

注意:新建的包要跟主程序启动类Application在同一路径下。

步骤3:

改造服务消费者-含有Ribbon负载均衡功能


(1)添加ribbon依赖

在项目eureka-consumer的pom文件中添加Ribbon的依赖如下:

<dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>

  </dependency>

(2)创建配置类

新建config包,并在该包下创建RibbonConfig类,该类注入restTemplate的Bean,并在这个Bean中加上@LoadBalanced注解,使得restTemplate具有负载均衡功能。
在这里插入图片描述
在这个例子中,restTemplate() 方法返回一个 RestTemplate 实例,由于标注了 @LoadBalanced,所以这个实例将被配置成一个负载均衡客户端。这意味着,当你使用这个 RestTemplate 来调用一个服务时,它会通过负载均衡器来选择一个适当的实例来进行通信,而不是直接指向一个特定的服务实例。

通常情况下,这样的配置会配合服务发现组件(如 Eureka, Consul 等)一起工作,以动态地管理服务实例列表,并根据这些信息来决定请求应该路由到哪个实例。这种方式对于构建微服务架构非常有用,因为它可以帮助隐藏服务实例的具体位置细节,并提供了一个机制来处理实例的故障转移。

(3)创建Service类

新建service包,并在该包下创建一个RibbonService类,在该类的hi()方法中使用restTemplate调用eureka-client的API接口。
在这里插入图片描述
(4)创建Controller类

新建controller包,并在该包下创建一个RibbonController类,在该类上添加@RsetController注解,将RibbonController 标注为一个Controller类。在类中写一个hi ()方法,调用RibbonService的hi()方法。
在这里插入图片描述

步骤4:

测试运行

依次启动服务器eureka-server和eureka-server-another, 服务提供者eureka-provider和eureka-provider-another,服务消费者eureka-consumer。

在浏览器上访问http://localhost:7071,http://localhost:7009,观察服务注册列表。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


问题

遇到大面积爆红,与pom的颜色没变。

在这里插入图片描述
点击file -> Invalidate ->点击启动,无效缓存
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
多尝试两遍,不行再去找别的博客。苦瓜


1. 负载均衡的主要目标是什么?

负载均衡的主要目标包括:

  • 分配网络流量,使各个服务器的负载尽可能均衡。
  • 提高系统的可用性和响应速度。
  • 通过故障转移提高系统的容错能力。
  • 优化资源使用,确保所有服务器都能高效运行。

2. 负载均衡器的作用是什么?

负载均衡器的作用是接收来自客户端的请求,并根据一定的策略将这些请求转发到一组后端服务器中的某一台。此外,负载均衡器还负责监控后端服务器的健康状况,并且能够在服务器发生故障时自动重新分配流量。

3. 常用的负载均衡算法有哪些?请解释其中一两种。

常用的负载均衡算法包括:

  • 轮询(Round Robin):按照顺序将请求分配给后端服务器。
  • 最少连接数(Least Connections):将新的请求分配给当前连接数最少的服务器。
  • IP哈希(IP Hash):根据客户端的IP地址计算出一个哈希值,将请求分配给固定的后端服务器。

例如,轮询算法是一种非常简单的方法,它按顺序循环地将请求分配给后端服务器。这种方法易于实现,但在某些情况下可能不够公平,因为每个服务器的处理能力可能不同。

4. 什么是会话保持(Session Persistence),为什么它很重要?

会话保持是指将来自同一个客户端的请求始终定向到同一个后端服务器。这对于需要维护会话状态的应用非常重要,例如Web应用程序中的购物车功能。通过会话保持,可以确保用户的会话数据不会丢失,并且能够提供一致的服务体验。

原文链接:https://blog.csdn.net/m0_67187271/article/details/142071549

最后修改:2024 年 11 月 22 日
如果觉得我的文章对你有用,请随意赞赏