【问题标题】:What's the best way to 'ping' thousands of servers every minute?每分钟“ping”数千台服务器的最佳方式是什么?
【发布时间】:2011-09-03 02:37:08
【问题描述】:

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

我目前的设置有点乱,我想改进它。目前我使用 cron 将每个服务器提交到 resque 作业队列。我会在队列为空时立即重新填充队列,本质上是创建一个持续工作的队列。然后,该作业将简单地尝试打开与相关服务器 ip 和端口的套接字连接,如果连接失败,则将其标记为关闭。

我有 20 名工人,它可以在大约 5 分钟内完成工作。我觉得这应该能够更快。

有没有更好、更快的方法?

【问题讨论】:

  • 我会说事件服务器(eventmachine,...),但我对它们的经验有点有限,所以我会让专家回答。
  • 我也在考虑 EM,但不确定,如果比我有经验的人更聪明,也不想在死胡同上浪费时间!

标签: ruby-on-rails ruby resque


【解决方案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...

示例查询

我现在只是在搜索此信息,并将更新我的问题...当我找到一些来源时...您正在尝试获取信息的游戏是什么?

【讨论】:

  • 哈哈。据我所知,我的世界是一个 TCP 游戏。我正要检查。但我实际上认为 UDP 在 Minecraft 中是不可能的。 (我要去检查)
  • 好的,是的。 minecraft 是一个只有 TCP 的游戏。与 COD、BF2、CSS 等不同,您无法使用 UDP 套接字查询它,因此除非您可以将负载更多的服务器专用于您的查询,否则我认为您可能已经有了最快的方法。抱歉,这不是您要找的答案。
  • 莱克,不。我只是在寻找一个答案期。如果我这样做的方式已经是最快的,那么线程、EM 或更多服务器可能是唯一的方式:(
  • 以每小时 0.02 的成本创建两个 Amazon EC2 实例,并将它们用作专用投票站,以不断查询您的所有服务器。两个人每月大约需要 28 美元。
  • Layke,我最终将使用您所描述的 EC2 实例。这似乎是迄今为止最好的方法:)
【解决方案2】:

对典型任务使用典型解决方案。这个案例是关于每 n 秒可用的检测 - 日常系统管理员任务之一。它不应该通过 ICMP,使用 SNMP over UDP proto。完整的解决方案之一是 Nagious/Cacti/Zabbix,它们具有内置功能,可以结合您服务器的所有内容:LA、HDD、RAM、IO、NET 以及可用的检测。

【讨论】:

  • 如果没有机会使用自己的监控系统,试试pingdom
  • 首先,我想我没有说清楚,我这样做不是为了我自己。我经营一个提供正常运行时间跟踪服务的网站。其次,我正在检查的服务只能通过 TCP 使用,不能通过其他任何方式使用。如果我正在监视硬件,那就太好了,但是,我不是,我正在监视服务。
  • 我提到我目前拥有超过 15,000 台服务器。 Pingdom 最多允许 30 个。
【解决方案3】:

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

这通常会快得多。

【讨论】:

  • 在 ruby​​ 中使用 TCPSocket 类。
猜你喜欢
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
相关资源
最近更新 更多