为了知道该网站是否以HTTP 202响应,每5分钟ping列表每5分钟ping列表的最佳方法是什么?

没有真正的想法是将20个URL保存在数据库中,然后运行数据库并ping每个网址。但是,当一个人没有回答时会发生什么?之后那些会发生什么?

另外,是否有更好的解决方案?恐怕列表可以增长到20000个网站,然后没有足够的时间在我需要ping的5分钟内将它们全部播放。

基本上,我在描述Pingdom,Uptimerobot和喜欢的工作方式。

我正在使用Node.js和Ruby构建此系统。我还倾向于使用MongoDB来保存所有ping的历史记录和监视结果。

建议?

谢谢一堆!

有帮助吗?

解决方案

github

我真的很喜欢node.js,我想解决这个问题,并希望很快在github上共享一些代码以实现这一目标。请记住,我现在只有一个非常基本的设置 https://github.com/alfredwesterveld/freakinping

为了知道该网站是否以HTTP 202响应,每5分钟ping列表每5分钟ping列表的最佳方法是什么?

ping(ICMP)

首先,我想知道您是否想真正做 ping(ICMP) 或者,如果您只想知道网站是否返回使用代码200(确定)并衡量所花费的时间。我相信您真的不想做ping,而只是一个http请求并测量时间。我之所以问这个,是因为(我相信)从node.js/ruby/python pinging无法从普通用户那里完成,因为我们需要原始插座(root用户)才能从编程语言中执行ping(iCMP)。例如,我找到了这个 ping python中的脚本(我也相信我在某个地方看到了一个简单的红宝石脚本,尽管我不是一个非常大的Ruby程序员),但需要root访问。我不相信node.js的ping模块甚至还没有一个ping模块。

消息队列

另外,是否有更好的解决方案?恐怕列表可以增长到20000个网站,然后没有足够的时间在我需要ping的5分钟内将它们全部播放。

基本上,我在描述Pingdom,Uptimerobot和喜欢的工作方式。

您需要实现这种规模的是使用 消息队列 例如 Redis, beanstalkd 或齿轮。在pingdom的规模上,一个工作过程不会削减它,但是在您的情况下(我认为)一个工人会做。我认为(假设)Redis将是最快的消息队列,因为C(node.js)扩展名,但我应该再次对其进行对抗BeanStalkd的标准,这是另一个流行的消息队列(但尚无C扩展名)。

恐怕清单可以增长到20000个网站

如果您达到该规模,则可能必须拥有主机多个盒子(很多工作线程/进程)才能处理负载,但是您还没有达到该规模,而Node.js很快。尽管我不确定(您需要执行/运行一些基准),但它甚至可以使用一个盒子来处理该负载。

数据存储/redis

我认为这可以在Node.js(我真的很喜欢Node.js)中很容易实现。我这样做的方式是将Redis用作我的数据存储,因为它很疯狂!

PING: 20000 ops 46189.38 ops/sec 1/4/1.082
SET: 20000 ops 41237.11 ops/sec 0/6/1.210
GET: 20000 ops 39682.54 ops/sec 1/7/1.257
INCR: 20000 ops 40080.16 ops/sec 0/8/1.242
LPUSH: 20000 ops 41152.26 ops/sec 0/3/1.212
LRANGE (10 elements): 20000 ops 36563.07 ops/sec 1/8/1.363
LRANGE (100 elements): 20000 ops 21834.06 ops/sec 0/9/2.287

使用 node_redis(使用Hredis(Node.js)C库)。我会使用REDIS添加URL 萨德.

每5分钟运行任务

这可以在没有任何努力的情况下实现。我会用 setInterval(callback, delay, [arg], [...]) 反复测试服务器的响应时间。获取所有URL callback 从Redis使用 . 。我会使用所有URL(消息)将所有URL(消息)放在消息队列上 rpush.

检查响应(时间)

但是,当一个人没有回答时会发生什么?之后那些会发生什么?

我可能不完全理解这句话,但是这里是。如果一个人失败,那就失败了。您可以尝试在5秒内再次检查响应(时间),也可以尝试查看它是在线的。应该为此设计一种精确的算法。之后,除非与同一家服务器达到同一服务器,否则与以前的URL无关。我猜想也清楚地考虑了一些事情,因为那时您不应该同时将所有这些URL per到同一家服务器,而是排队排队之类的东西。

处理URL

从工作过程(现在只有一个就足够了),从redis发出消息(url) BRPOP 命令。从列表中检查url(消息)的响应时间(消息),并从列表中获取NEXT URL(消息)。我可能会同时提出几个请求以加快流程。

其他提示

没有“基本方法”,因为您必须处理很多用例:

  • HTTP重定向,
  • https页,
  • 请求超时,
  • 您用于ping的服务器的CPU负载,
  • 您需要的报告类型(可用性?正常运行时间?响应能力?停机时间?)
  • 如何按时间汇总QoS测量
  • 您收集的数据的寿命(每五分钟每五分钟,每五分钟都会产生大量数据)
  • 实时警报
  • 等等

pingdom等不是“基本”工具,如果您想要类似的东西,您可能想为此付费或依靠现有的开源替代方案。我肯定知道这一点,因为我自己构建了一个远程监视应用程序。它称为正常运行时间,是用node.js和mongodb编写的,它托管在github(https://github.com/fzaninotto/uptime)上。努力开发它花了几个星期的努力,所以请相信我:这并不容易。

使用监视工具,例如Zabbix,Nagios,Blah等等,可以按质量数量测量服务器的各种参数。

如果您想在JS中实现它,则您可以执行时间间隔-ED HTTP请求,然后确定HTTP返回状态代码,并使用XPATH或REGEX验证某些元素是正确的

对于Ruby,一个守护程序过程并使用线程池(多线程思想)和URI打开以查看HTTP代码和内容,请使用XPath验证内容是否正确。

如果您很好奇,我创建了一个名为Pinger的应用程序,可以执行此操作。它建在Ruby上的Ruby和Resque上:

https://github.com/austinthecoder/pinger

有一些免费的质量服务为我们提供非常稳定的网站UP时间检查和通知。您可以检查此说明并查看 http://fastjoomlahost.com/how-to-to-monitor-website fime

您也可以使用node.js使用 节点ping-monitor 包裹。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top