statsd和石墨的高度可用,可通过网络访问和可扩展的部署


17

我想设置statsd / graphite,以便我可以记录在HTML设备上运行的JS应用程序(即不在封闭的LAN环境中,并且可能包含大量我不直接控制的传入数据)。

我的约束:

  • 入口点必须使用HTTP:这是通过简单的HTTP-to-UDP-statsd代理(例如github上的httpstatsd)解决的
  • 必须抵抗单个服务器的故障(以对抗墨菲定律:)
  • 必须水平可扩展:网络规模,宝贝!:)
  • 架构应尽可能简单(且便宜)
  • 我的服务器是虚拟机
  • 数据文件将存储在Filer设备上(带有NFS)
  • 我可以使用tcp / udp硬件负载平衡器

简而言之,数据路径:[客户端]-(http)-> [http2statsd]-(udp)-> [statsd]-(tcp)-> [石墨]-(nfs)-> [文件管理器]

到目前为止,我的发现:

  • 缩放http2statsd部分很容易(无状态守护程序)
  • 缩放statsd部分似乎并不简单(我想对于诸如sum,avg,min,max ...之类的汇总数据,我最终会在石墨中得到不连贯的值)。除非HTTP守护程序进行一致的哈希处理以分片密钥。也许是个主意...(但接着是HA的问题)
  • 缩放石墨零件可以通过分片(使用碳中继)来完成(但这也不能解决HA问题)。显然,几个耳语实例不应该写入相同的NFS文件。
  • 扩展文件管理器部分不是问题的一部分(但是IO越少越好:)
  • 缩放Web应用程序似乎很明显(尽管我尚未测试),因为它们仅读取共享的NFS数据

因此,我想知道是否有人可以共享可靠的statsd / graphite部署经验和最佳实践?


阅读Etsy关于StatsD的博客文章上的评论后,他们写道他们每10秒钟提供StatsD 10,000-30,000个指标。我建议将一个http2statsd客户端链接到一个statsd服务器,如果发送到statsd的度量标准数量成为瓶颈,则将其分片。
pkhamre 2012年

您最终实现了吗?如果可以,您可以分享详细信息吗?
gf_

Answers:


1

有一个具有一致哈希值的statsd代理,这使得可以在多个statsd聚合器之间分散statsd流量,每个聚合器都使用自己的一组度量标准名称。它是体系结构中至关重要的可伸缩性元素,可让您扩展statsd流程。

石墨也很棘手,但是希望您不需要无限的规模,并且可以通过服务或其他一些静态参数进行精细的分片。

最难的部分是扩展webapp,这很大程度上取决于您最重的图形查询。但是,您始终可以预先汇总最难图形的数据并摆脱大部分负担。

我一直在使用HostedGraphite来避免所有这些痛苦,这些家伙已经实现了自己的Carbon Riak后端并在那里进行所有缩放。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.