什么是更高效的 - 阅读Jolokia的JMX或通过REST apis获取指标

时间:2017-06-27 02:51:45

标签: java solr jmx jolokia

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

  1. 通过Jolokia和
  2. 阅读JMX mbeans
  3. 通过metrics REST apis
  4. 阅读指标

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

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

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

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

    我们希望选择其中一种方法来从所有Solr节点每分钟查询指标并推送到grafana。

    对此的一些建议会很棒。

1 个答案:

答案 0 :(得分: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,这是一个标准,它更适用于不同的环境。

但最后,只有真正的基准才能给你答案。