1

Solr 等几个基于 Java 的项目提供了两种获取指标的方法:

  1. 通过 Jolokia AND 读取 JMX mbeans
  2. 通过度量 REST API读取度量

从理论上讲,什么会更高效?
(假设现在是一个单节点集群)。

看起来基于 Jolokia 的指标可能性能更高,因为 Jolokia 进程不会像 Jetty 那样通过服务器的 Web 容器。相反,Jolokia 会在 java-process-to-java-process 级别获取 JMX 指标。REST API 肯定更容易理解和解析。但是,它涉及进行将通过码头的 REST 调用,可能会为每个请求占用一个线程?等等等等

Server ---> JMX ---> Jolokia ---> REST api of Jolokia
Server ---> REST api of Server itself

Jolokia 在这方面是不是更轻量级?请注意,轻量级意味着对服务器的影响,而不是整体延迟。metrics-fetch 调用应该尽可能减少对服务器的负担,metrics-fetch 调用的整体延迟实际上并不那么重要。

我们希望在其中一种方法之间进行选择,以每分钟从所有 Solr 节点查询指标并推送到 grafana。

对此有一些建议会很棒。

4

1 回答 1

1

没有明确的答案(也没有任何基准)。但是由于 Jolokia 可以被视为类似REST 的接口,我预计不会有任何显着差异。事实上,ActiveMQ 使用 Jolokia 作为其度量标准“REST”接口

需要考虑以下成本因素:

  • (内部)指标查询本身
  • 序列化到/从 JSON / XML
  • 运输费用
  • HTTP 处理开销

每个指标访问在这里都有类似的成本。对于公开指标,Jolokia 还使用 HTTP 服务器(JVM 内部服务器或 Jetty 等外部服务器),因此没有太大区别。

最大的可能差异可能是序列化成本(承担了很大一部分负载),因此它取决于所使用的 JSON 序列化库。Jolokia 在这里使用 json-simple,众所周知它非常快速

但是,一个非常重要的方面是应该查询哪些指标。由于每个自定义指标 API(如您所指的 Solr)都以各种格式公开不同类型的指标,因此您需要调整您的监控解决方案以适应它。相比之下,由于 Jolokia 公开了作为标准的 JMX,因此它更适用于不同的上下文。

但最后,只有真正的基准测试才能为您提供答案。

于 2017-06-27T06:09:06.080 回答