我为视频游戏运行服务器监控站点。它监控数千台服务器(目前大约15,000台)。
我目前的设置有点笨拙,我想改进它。目前我使用cron将每个服务器提交到resque作业队列。我只是在空闲时重新填充队列,基本上创建了一个不断工作的队列。然后,该作业将尝试打开与所讨论的服务器ip和端口的套接字连接,并在无法连接时将其标记为。
我有20名工人,大约5分钟就完成了工作。我觉得这应该能够更快。
有更好,更快的方法吗?
答案 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。
这通常要快得多。