MST

星途 面试题库

面试题:微服务架构下负载均衡与服务发现的协同机制

在微服务架构里,负载均衡和服务发现紧密相关,请详细说明它们是如何协同工作的,以及这种协同机制对系统的可用性和可扩展性有哪些影响。
44.2万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

负载均衡与服务发现协同工作原理

  1. 服务发现
    • 服务注册:微服务实例启动时,会向服务发现组件(如 Consul、Eureka 等)注册自身的地址、端口、服务名称等元数据信息。例如,一个用户服务实例启动后,会将自己的 IP 地址 192.168.1.100,端口 8080 以及服务名称 user - service 注册到 Eureka 服务器。
    • 服务维护:服务发现组件会定期检查已注册服务实例的健康状态。比如 Consul 可以通过健康检查脚本或者心跳机制来判断服务是否正常运行。如果发现某个服务实例不健康,会将其从可用实例列表中移除。
  2. 负载均衡
    • 基于服务发现结果进行负载均衡决策:负载均衡器(如 Nginx、Ribbon 等)会从服务发现组件获取可用服务实例列表。以 Ribbon 为例,它与 Eureka 集成后,会定时从 Eureka 获取 user - service 的可用实例列表。
    • 负载均衡算法应用:负载均衡器根据一定的算法(如轮询、随机、加权轮询等)将客户端请求分配到具体的服务实例上。例如,采用轮询算法时,Ribbon 会按顺序依次将请求发送到 user - service 的各个可用实例上。

对系统可用性的影响

  1. 故障转移:当某个服务实例出现故障时,服务发现组件能及时检测并将其从可用列表中移除。负载均衡器就不会再将请求发送到该故障实例,而是自动将请求转发到其他健康的实例上,从而保证系统整体的可用性。例如,若 user - service 的一个实例因内存溢出崩溃,Eureka 检测到后通知 Ribbon,Ribbon 后续请求就不会再发往该故障实例。
  2. 健康检查机制增强可用性:服务发现组件的健康检查机制和负载均衡器的重试机制相结合,进一步提高系统可用性。如果负载均衡器发现某个实例响应超时,会尝试将请求发送到其他实例,同时服务发现组件持续检查故障实例的恢复情况,恢复后重新纳入可用列表。

对系统可扩展性的影响

  1. 动态扩展:当需要扩展微服务时,只需启动新的服务实例并让其注册到服务发现组件。负载均衡器会自动感知新实例的加入,并将请求分配到新实例上,实现系统的动态扩展。比如,随着用户量增加,启动更多 user - service 实例注册到 Eureka,Ribbon 自动将请求均衡到新实例,系统处理能力随之提升。
  2. 资源优化:通过负载均衡和服务发现的协同,系统可以根据不同服务实例的负载情况进行动态调整。例如,对于负载过高的实例,负载均衡器可以减少分配到该实例的请求,将更多请求发送到负载较低的实例,优化系统资源利用,进一步提升系统的可扩展性。