
本文主要从数据写入和数据查询作为切入点,对比Thanos和VictoriaMetrics,包括以下几个维度:
关于Thanos和VictoriaMetrics的架构,大家可以参考利用Prometheus 打造企业分布式监控平台(3)--远程读写之战。这里就不再重复讲述了。
Thanos需要以下步骤来在Prometheus中设置数据写入的链路:
VictoriaMetrics需要在Prometheus配置中设置remote_write部分,因此Prometheus会将所有已抓取的数据复制到VictoriaMetrics远程存储中。
Thanos Sidecar以2小时为单位上传本地Prometheus数据,这意味着如果本地磁盘损坏或意外删除数据,则可能会丢失每个Prometheus实例上最近添加的数据最多2个小时。
从查询组件到Sidecar的传入查询可能会对数据上载过程产生负面影响,因为这些任务是在单个Sidecar进程中执行的。理论上,可以运行单独的Sidecar来将数据上载到对象存储和查询。
VictoriaMetrics:每个Prometheus实例都会通过remote_write API立即将所有已抓取的数据复制到远程存储(例如VictoriaMetrics),在将数据抓取和写入到远程存储之间可能会有几秒钟的延迟,这意味着Prometheus可能会丢失几秒钟的数据本地磁盘损坏或意外删除数据,因为其余数据已被复制到远程存储。
Prometheus v2.8.0 +从预写日志(WAL)将抓取的数据复制到远程存储中,这意味着它不会因与远程存储的临时连接错误或远程存储的临时不可用而丢失数据。
因此,如果端点出现问题,我们只需要停止在预写日志中的位置并尝试重新发送失败的样本批次,就不会丢失数据或引起内存问题,因为它不会继续读取写入数据-ahead log,直到成功发送数据为止。2.8更新有效地使用了恒定数量的内存,并且缓冲区实际上是不确定的,仅取决于磁盘的大小。Thanos。在Compactor和Store网关之间存在竞争,这可能导致数据不一致或查询失败。
VictoriaMetrics。借助存储体系结构,数据始终保持一致。
Thanos。通常,插入性能良好,因为Sidecar只是将Prometheus创建的本地数据块上载到对象存储中。来自Query组件的大量查询可能会稍微减慢数据上载过程。Compactor可能是限制每个对象存储桶提取速度的因素如果新上载的块超过了Compactor的性能。
VictoriaMetrics。Prometheus使用额外的CPU将本地数据复制到远程存储中,与Prometheus执行的其他任务(例如数据抓取,本地存储整理和规则评估)所花费的CPU时间相比,该CPU时间非常小。每个CPU核心具有良好的提取性能。
Thanos Sidecars在上传数据块时依赖对象存储可扩展性。S3和GCS具有出色的可扩展性。
VictoriaMetrics:仅增加vminsert和vmstorage的容量,可以通过添加新节点或切换到功能更强大的硬件来增加容量。
Thanos需要设置和监视以下组件在数据查询链路上:
VictoriaMetrics提供了开箱即用的Prometheus查询API,因此无需在VictoriaMetrics集群之外设置任何组件,只需将Grafana和其他Prometheus查询API客户端指向VictoriaMetrics。
Thanos.Query组件需要与所有Sidecar以及所有Store网关的有效连接,以便为传入的查询计算出完整的有效响应。这对于在不同数据中心或可用性区域中具有许多Prometheus实例的大规模设置而言可能是个难题。
在使用大对象存储桶时,存储网关可能会启动缓慢,因为它需要在启动之前从存储桶中加载所有元数据。有关详细信息,请参阅此问题。这可能会成为升级过程中的痛点。
VictoriaMetrics的查询链路仅接触群集内vmselect和vmstorage节点之间的本地连接,与Thanos设置中的数据中心间连接相比,此类本地连接具有更高的可靠性和可用性。
所有VictoriaMetrics组件均针对短启动时间进行了优化,因此可以快速升级。
当某些Sidecars或Store网关不可用时,默认情况下,Thanos允许部分响应:
在QueryAPI或StoreAPI的查询中,部分响应可能是错过的结果。如果其中一个StoreAPI返回错误或超时派生了另外几个返回成功,则可能会发生部分响应。当某些vmstorage节点不可用时,VictoriaMetrics还通过返回部分响应来优先考虑可用性而不是一致性。可以通过设置-search.denyPartialResponse选项来禁用此行为。
总体而言,由于前一部分中所述的较高可用性,VictoriaMetrics返回的部分响应数量应比Thanos低得多。
Thanos。由于最慢的Sidecar或Store网关限制了Query组件的选择性能,因为Query组件在返回结果之前会等待所有Sidecars和Store网关的所有响应。
通常,Sidecars和Store网关之间的选择性能并不均衡,因为它取决于许多因素:
VictoriaMetrics的select性能受vmselect和vmstorage节点的数量及其硬件配置的限制,只需增加这些节点的数量或切换到功能更强大的硬件以扩展选择性能,vminsert即可在可用的vmstorage节点之间平均分配传入数据。 vmstorage节点之间的性能:VictoriaMetrics已针对速度进行了优化,因此与Thanos相比,它应提供更好的性能指标。
为了提高选择性能,可以在具有相同配置的多个查询组件之间分配负载。可以在同一对象存储桶的多个存储网关之间分配负载,以提高其性能。用于扩展Sidecar后面的单个Prometheus实例的性能。因此,Thanos的选择路径可伸缩性受到最慢的Sidecar + Prometheus对的限制。
与Thanos相比,VictoriaMetrics群集提供了更好的选择路径可扩展性,因为vmselect和vmstorage组件可以独立扩展到任意数量的节点。群集中的网络带宽可能成为可扩展性的限制因素.VictoriaMetrics针对低网络带宽使用进行了优化,以便减少这个限制因素。
Thanos。在不同的可用性区域中运行多个查询组件。
如果单个区域不可用,则来自另一个区域的查询组件将继续提供查询服务,因为某些Sidecars或Store网关可能位于不可用区域中,所以它可能会返回部分结果。
VictoriaMetrics在不同的可用区中运行多个集群,配置每个Prometheus以将数据同时复制到所有集群。
如果您具有一对Prometheus HA对,并且每对中都具有复制副本1和复制副本2,则将复制副本1配置为将数据复制到第一个集群,而复制副本2应该将数据复制到第二个集群。
如果单个可用区域不可用,则来自另一个区域的VictoriaMetrics群集将继续接收新数据并为查询提供完整响应。
Thanos和VictoriaMetrics使用不同的方法来提供长期存储,全局查询视图和水平可伸缩性:
PS:
https://zhuanlan.zhihu.com/p/135899052
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69999831/viewspace-3130397/ ,如需转载,请注明出处,否则将追究法律责任。