【问题标题】:What is more performant - reading JMX by Jolokia or getting metrics by REST apis什么是性能更高的 - 通过 Jolokia 读取 JMX 或通过 REST apis 获取指标
【发布时间】:2017-06-27 02:51:44
【问题描述】:

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

  1. 通过 Jolokia AND 读取 JMX mbeans
  2. 通过metrics REST apis读取指标

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

看来,基于 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。

对此有一些建议会很棒。

【问题讨论】:

    标签: java solr jmx jolokia


    【解决方案1】:

    没有明确的答案(也没有任何基准)。但由于 Jolokia 可以被视为 REST 类 接口,我预计不会有任何显着差异。实际上,ActiveMQ 使用 Jolokia 作为其metrics 'REST' interface

    需要考虑以下成本因素:

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

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

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

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

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

    【讨论】:

    • 谢谢罗兰。我更新了我的问题。我们更关心通过 2 种方法获取指标对服务器的影响,并希望选择对服务器负担最小的一种。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2016-10-24
    • 2011-11-17
    相关资源
    最近更新 更多