每分钟“ping”数千台服务器的最佳方法是什么?

时间:2011-09-02 17:18:58

标签: ruby-on-rails ruby resque

我为视频游戏运行服务器监控站点。它监控数千台服务器(目前大约15,000台)。

我目前的设置有点笨拙,我想改进它。目前我使用cron将每个服务器提交到resque作业队列。我只是在空闲时重新填充队列,基本上创建了一个不断工作的队列。然后,该作业将尝试打开与所讨论的服务器ip和端口的套接字连接,并在无法连接时将其标记为。

我有20名工人,大约5分钟就完成了工作。我觉得这应该能够更快。

有更好,更快的方法吗?

3 个答案:

答案 0 :(得分:1)

所以,我现在正在做的是做一个TCP套接字连接,它会ping你的游戏服务器。使用TCP的问题显然是它比UDP慢很多。 我建议改为创建一个只检查游戏服务器端口的UDP套接字。

以下是另一个问题的引用:

>        UDP is really faster than TCP, and the simple reason is because
> it's non-existent acknowledge packet (ACK) that permits a continuous
> packet stream, instead of TCP that acknowledges each packet.

在此处阅读此问题:UDP vs TCP, how much faster is it?

根据我对游戏服务器的经验,多数(如果不是100%)现代游戏服务器允许您在UDP套接字上查询它们。然后,这将响应游戏服务器的详细信息。 (我过去常常主持很多服务器)。

基本上,确保使用UDP而不是TCP ...

示例查询

我现在只是在搜索这些信息,并且会更新我的问题...当我找到一些来源时......你想要获取信息的游戏是什么?

答案 1 :(得分:1)

针对典型任务使用典型解决方案。这种情况是关于每n秒可用的检测 - 每日系统管理员任务之一。它不应该超过ICMP,使用SNMP over UDP proto。其中一个完整的解决方案是Nagious / Cacti / Zabbix,它具有内置功能,可以将服务器的所有内容组合在一起:LA,HDD,RAM,IO,NET以及可用的检测。

答案 2 :(得分:0)

您没有提到如何建立套接字连接,但您可能想尝试使用ruby curl绑定:curb而不是net / http。

这通常要快得多。