在SLB中使用轮询算法
1 简介轮询算法
系统设计中的轮询 是定期收集数据或监控设备状态的重要方法。这里概述了背景、其重要性、应用、策略和挑战。
轮询是系统设计中使用的一种方法,用于定期检查状态或从多个来源收集数据。它涉及以预定的时间间隔持续查询或检查设备或其他组件,以查看是否有任何新信息或是否满足某些条件。
在系统设计的上下文中,轮询通常涉及中央系统(如服务器)定期向多个客户端设备或节点发送请求,以收集信息或确定其状态。
这可能包括检查更新、检索数据或验证某些任务是否已完成。
轮询在各个领域的系统设计中起着重要作用。以下是它很重要的原因:
资源管理:轮询使系统设计人员能够有效地管理资源。通过安排轮询间隔,他们可以平衡及时更新数据的需求与系统中的可用资源。
兼容性:轮询可以与各种设备和系统配合使用,使其成为系统设计的多功能选择。除了基本通信协议之外,它不需要专门的硬件或软件支持,因此可以在许多上下文中访问。
故障检测和处理:轮询可以帮助检测设备或进程中的故障或故障。如果源未能在合理的时间范围内响应轮询请求,它可以触发警报或启动恢复过程,从而提高系统可靠性。
可扩展性:轮询可以扩展以适应大量源。通过管理轮询间隔和优先级,系统设计人员可以确保更频繁地查询关键数据源,同时减少查询不太重要的数据源,从而保持系统性能和响应能力。
集成:轮询可以无缝集成到现有系统和架构中。无论是独立应用程序还是大型分布式系统的一部分,都可以调整轮询以适应系统设计的特定要求和约束。
2 轮询的方法和策略
轮询机制有多种形式,每种形式都针对不同的要求和系统体系结构量身定制。以下是一些常见的轮询机制:
- 常规轮询:
这是最简单的轮询形式,其中控制实体定期查询源。该间隔可以是固定的,也可以根据系统负载或数据更新的紧急程度等因素动态调整。
在此策略中,控制实体以固定的固定间隔轮询数据源。
这种方法很容易实现,但如果轮询间隔太短,则可能导致资源使用效率低下,如果轮询间隔太长,则可能导致不必要的资源使用。
- 自适应轮询:
在自适应轮询中,轮询间隔会根据数据变化率、源的响应能力或当前系统负载等因素动态调整。这有助于优化资源使用和响应能力。
比如指数回退就是一种用于处理数据源暂时不可用或过载情况的技术。
轮询间隔不会不断重试失败的轮询请求,而是会随着每次连续失败而呈指数级增加,从而允许源有时间在重试之前恢复。
- 基于优先级的轮询:
在需要轮询多个源的系统中,基于优先级的轮询可确保查询更关键的源比查询不太关键的源更频繁。这种优先级有助于确保根据数据的重要性有效地分配资源。
比如当满足某些条件或阈值时,基于阈值的轮询会触发轮询过程。
例如,当发生一定级别的数据积累或检测到特定事件或条件时,可能会启动轮询,确保在最相关的时候收集数据。
- 分组轮询:
分组轮询涉及将相似的来源分组在一起,然后集体轮询它们,而不是单独轮询它们。这通过最大限度地减少发送的轮询请求数和收到的响应数来减少开销,这在处理大量源时尤其有用。
分组轮询涉及将相似的数据源分组在一起,然后集体轮询它们,而不是单独轮询它们。
这通过最大限度地减少发送的轮询请求数和收到的响应数来减少开销,这在处理大量源时尤其有用。
- 事件驱动型轮询:
在事件驱动型轮询中,控制实体触发轮询请求以响应特定事件或条件,而不是定期触发。此方法有助于减少不必要的轮询,并且可以提高数据更新不定期的系统中的响应能力。
事件驱动轮询会触发轮询过程以响应特定事件或条件,而不是定期触发。
这种方法减少了不必要的轮询并提高了响应能力,尤其是在数据更新不定期或不可预测的系统中。
- 异步轮询:
在异步轮询中,控制实体异步启动轮询请求,允许它在等待响应的同时继续执行其他任务。这种方法提高了整体系统吞吐量和响应能力,尤其是在高并发性系统中。
异步轮询异步启动轮询请求,允许控制实体在等待响应的同时继续执行其他任务。
这可以提高整体系统吞吐量和响应能力,尤其是在高并发性系统中。
3 轮询的使用场景
轮询机制因其多功能性和从多个来源收集数据的有效性而应用于各种领域和系统。以下是一些常见的使用案例和应用程序:
- 网络监控:
轮询广泛用于网络监控系统,以收集有关网络性能、流量和设备状态的数据。
网络监控工具会定期轮询网络设备(如路由器、交换机和服务器),以收集有关带宽使用情况、数据包丢失、延迟和错误率的信息。
在系统监控中,轮询用于持续检查各种组件的运行状况和性能。这可能涉及轮询服务器或其他设备上的 CPU 和内存使用情况、网络延迟、磁盘空间等。
- 服务器监控:
轮询用于服务器监控系统,以收集与服务器运行状况、资源使用情况和性能相关的指标。
安装在服务器上的监控代理会定期轮询系统指标,例如 CPU 使用率、内存利用率、磁盘 I/O 和网络流量,以检测问题、优化资源分配并确保系统可靠性。
许多系统与外部 API 集成以交换数据。轮询可用于定期从这些 API 请求数据。例如,天气应用程序可能每小时轮询一次天气 API 以获取更新的预报。
- IoT 设备管理:
在 IoT(物联网)系统中,轮询用于管理和监控连接的设备。
IoT 平台使用轮询机制从部署在各种环境中的传感器、执行器和 IoT 设备收集数据,从而实现对 IoT 基础设施的实时监控、分析和控制。
轮询可用于检查新的通知或消息。例如,消息应用程序可能会每隔几秒钟轮询一次服务器,以检查是否有新的消息发送给用户。
- 数据库监控:
数据库监控系统采用轮询来收集性能指标、查询执行统计数据和数据库运行状况信息。
监控工具会定期轮询数据库服务器,以收集有关数据库连接、事务、查询吞吐量和资源利用率的数据,从而帮助数据库管理员优化数据库性能并解决问题。
在具有数据库后端的系统中,轮询可用于定期查询数据库以获取新记录或对现有记录的更改。例如,电子商务平台可能会每隔几秒钟轮询一次数据库,以检查是否有新订单或库存水平更新。
- 应用程序性能监控 (APM):
APM 解决方案采用轮询来收集有关应用程序性能、响应时间和用户体验的数据。
部署在服务器、容器或虚拟机上的监控代理会定期轮询应用程序指标,例如响应时间、错误率和资源利用率,使开发人员和 IT 运营团队能够识别性能瓶颈、解决问题并优化应用程序性能。
比如应用系统在文件处理系统中,轮询可用于监视目录中的新文件。例如,文件上传服务可能会定期检查目录中是否有要处理的新文件。
- 优点
可预测性:轮询允许可预测的数据收集间隔,这对于在时间至关重要的系统中进行规划和资源分配可能有益。
控制:轮询可以控制何时收集数据,使系统设计人员能够有效地管理资源并根据数据源的重要性确定数据源的优先级。
兼容性:轮询可以与各种设备和系统配合使用,使其成为系统设计的多功能选择。除了基本通信协议之外,它不需要专门的硬件或软件支持。
容错:轮询可以帮助检测设备或进程中的故障或故障。如果源未在合理的时间范围内响应轮询请求,它可以触发警报或启动恢复过程,从而提高系统可靠性。
简单:轮询通常比中断或事件驱动编程等其他方法更易于实现,尤其是在缺乏对这些功能的硬件或软件支持的系统中。
4 在SLB负载均衡中
该算法将新的传入连接分发到 旋转基础。对于第一个连接,算法会选择一个服务器 随机分配连接,并为其分配连接。对于后续连接, 该算法循环遍历 Server 列表并将负载重定向到 Servers 挨次。
无论每个服务器的功能和其他方面如何,例如, 服务器上的现有连接数或其响应时间,所有 可用服务器轮流分配下一个连接。
此算法可确保所有服务器接收相同数量的请求, 因此,它最适合所有服务器都具有相等 capacity 和所有请求的处理负载可能相似。
对于指定的每种轮询方法,应设置许多属性参数:
- 端口
使用 TCP 或 HTTP 选项时用于轮询的端口号。
可以指定多个端口号,在这种情况下,将轮询所有端口,并且所有端口都必须 响应以将服务器视为联机。最多可以将 16 个端口号指定为逗号 separated list 的 list 进行轮询。
- 间隔
轮询尝试之间的间隔(以毫秒为单位)。默认设置为 10,000 和最小值 允许的值为 100 毫秒。
- 样本
计算 Percentage Loss 和 Average Latency用作样本量的轮询尝试次数 。 默认设置为 10,允许的最小值为 1。
- 最大轮询失败次数
允许的最大失败轮询数 。如果超过此数量,则认为服务器处于脱机状态。
- 最大平均延迟
轮询请求和响应之间允许的最大毫秒数。如果此 阈值,则服务器被视为脱机。
Average Latency 的计算方法是 Samples of polls 的服务器响应时间求平均值。如果轮询尝试 未收到响应,则它不会包含在平均计算中。
5 轮询的挑战
资源开销:不断轮询设备或进程可能会消耗大量系统资源,尤其是在具有许多源的大型系统中。这可能导致效率低下和运营成本增加。
延迟:轮询会引入延迟,因为数据仅按设定的时间间隔收集,而不是在生成时立即可用。在实时数据至关重要的系统中,轮询引入的延迟可能是一个重大缺点。
同步问题:轮询多个源会带来同步挑战,尤其是在源具有不同的更新速率或响应时间时。在轮询源之间保持一致性和协调性可能很复杂,尤其是在分布式系统中。
可扩展性:随着要轮询的源数量的增加,可扩展性成为一项挑战。管理轮询间隔、优先级和资源分配变得更加复杂,如果处理不当,系统性能可能会降低。
并发性:在具有高并发性的系统中,协调多个轮询过程可能具有挑战性。确保有效处理轮询请求并及时处理响应需要仔细设计和实现。
7 小结
存在多种轮询替代方案,它们为数据检索和系统设计提供了不同的方法。以下是一些常见的替代方案:
事件驱动编程:在事件驱动编程中,系统响应外部源触发的事件,例如用户交互或数据更新。事件驱动型系统比基于轮询的系统响应更快、更高效,因为它们仅在事件发生时处理数据,从而减少空闲时间和资源使用。
推送通知:推送通知系统将数据从源发送给收件人,而无需持续轮询。当新数据可用时,源会将数据推送给收件人,无需收件人轮询更新。
消息队列:消息队列系统将数据的创建者与使用者分离,允许异步处理数据,而无需连续轮询。创建者将消息推送到队列,使用者在消息可用时从队列中检索消息。
Pub/Sub(发布/订阅)系统:Pub/Sub 系统使系统能够订阅特定主题或频道,并在将新数据发布到这些主题时接收通知。这将数据创建者与使用者分离,并允许在没有连续轮询的情况下高效分发数据。
远程过程调用 (RPC):RPC 系统允许系统调用远程主机上的过程或函数并检索结果,而无需连续轮询。这样可以在分布式系统之间实现高效通信,而无需不断查询。
缓存:缓存系统在本地存储经常访问的数据,从而减少了对远程源的持续轮询的需要。通过缓存数据,系统可以提高性能并减少延迟,尤其是对于读取密集型工作负载。
- 点赞
- 收藏
- 关注作者
评论(0)