Jaeger与Zipkin:分布式跟踪平台该选谁

革命的思想,通常从一开始被认为很愚蠢。以Twitter为例:在2006年该应用出现时,大多数人都很难看到其潜力。更糟糕的是,当时很多人认为Twitter不仅很奇怪,而且也不可靠。

很快,Twitter成为了移动时代的杀手级应用,但Twitter的后端系统无法应对其突发流量。这是因为,大多数后端软件都是作为单体应用程序编写的。这些系统不仅脆弱,而且难以扩展和维护。

为了创建更具弹性和可伸缩性的系统,在线服务采用了微服务的分布式架构。像许多革命性的想法一样,这既解决了现有问题,又带了了许多新问题。特别是,在高度分散的环境中运行的微服务更难监控和调试。

分布式跟踪平台,旨在帮助各种规模的公司监控其软件系统并对其进行故障排除。

在本文中,我们将研究ZipkinJaeger这两个工具,旨在使分布式应用和基于微服务的软件架构更易于监视和管理。我们将研究这些工具的功能,优点和缺点,并就为什么要选择其中一种给出建议。

可观察性:美好的新世界

在介绍这些工具之前,让我们更深入地研究遇到的问题及其解决方案背后的理念。

单体应用程序就像一辆旧车:一旦它开始发出怪异的声音或感觉有些不对劲,我们大多数人就可以找出什么不对劲。如果我们有足够的经验,我们就会潜入引擎罩并进行修复。但是分布式系统更像是一辆现代汽车:它要是出了点问题,如果没有专门的工具或知识,它就不会提示你如何修理它。

微服务使你能够构建具有高冗余度的分布式系统,这些冗余系统还提供高水平的可伸缩性和可靠性。但是,由于它们的体积小,相互通信的特性和高冗余性使系统问题更难以定位,调试和修复。此外,现有的监视和跟踪软件,主要使用于单体应用程序。

分布式体系结构是黑匣子。但是,可以通过工程师所谓的observability进行监视,它使你可以通过收集和观察系统输入和输出信息,来判断系统状态。

分布式跟踪使系统,可以使用诸如OpenTracingOpenCensusOpenTelemetry之类的平台进行观察。这些平台使你可以跟踪和记录用户请求信息以及它们通过的系统。

解决方案到位后,你将需要Zipkin和Jaeger之类的工具来处理收集到的数据。

背景和功能

Zipkin和Jaeger之间的竞争源于他们共同的历史。

Zipkin

Zipkin早于Jaeger,是Google Dapper的开源版本,由Twitter进一步开发。Zipkin基于Java语言的应用程序,其中包含很多服务,每个服务都实现Zipkin具体的某一个功能,并包括一个用户界面和用于跟踪软件系统框架的界面。每个服务还提供了一系列存储引擎来持久存储数据,例如内存数据库,MySQL,Cassandra和Elasticsearch。

此外,Zipkin还提供了传输机制(如RabbitMQ,Scribe,HTTP和Kafka)以及用于在Cassandra中存储数据的基于节点的服务器。Zipkin支持大多数流行的高级语言,包括C#,Java和JavaScript。

Jaeger

Jaeger由Uber创建,并用Go语言编写。它除了Zipkin的功能集外,Jaeger还提供了动态采样,REST API,基于ReactJS的UI界面,以及对Cassandra和Elasticsearch内存数据存储的支持。为了实现这些功能,Jaeger相比Zipkin采取了一种不同的,更分散的方法。

Jaeger的体系结构包括一个客户端,该客户端向代理发出跟踪,代理监听入站跨度(spans)并将其路由到收集器。然后,收集器将验证,转换并保留跨度(spans)。

Jaeger的分布式体系结构使其具有高度可扩展性。Jaeger还具有独特的数据收集方式:与其他尝试收集轨迹和跨度(spans)的系统不同,Jaeger会对监视的数据进行动态采样。这种方法不仅可以处理突然的流量激增,而且可以提高Jaeger的整体性能。

Zipkin和Jaeger对比

Zipkin和Jaeger的优势:

Zipkin成熟

Zipkin是更成熟的平台。它拥有广泛的行业支持,拥有庞大而活跃的社区。Zipkin用Java编写,非常适合企业环境。但是,它也支持大多数流行的高级语言,如果你不知道或不喜欢Java,那么这很好。无论你选择哪种语言,Zipkin都支持OpenTracingOpenCensusOpenTelemetry(这三大开放跟踪框架),并具有广泛的可扩展性选项和工具集成。

Jaeger性能高

Jaeger与Zipkin大致相似,但具有一些独特的功能。首先,它具有更现代的设计和体系结构。其分布更广泛的方法具有高度的灵活性和高性能。Jaeger为你提供了一个基于Web的UI,你可以轻松地对其进行部署和扩展。

Jaeger社区通过提供良好的文档资料和一系列部署选项来弥补Jaeger相对不成熟的问题。Jaeger还支持Cloud Native Computing Foundation(CNCF),尽管这不是标准的建议,但应予以考虑。

Zipkin和Jaeger的劣势:

Zipkin灵活性低

由于Zipkin是两者中的较老者,因此其较旧的设计使用的模块化程度较低,与新的竞争对手相比,它速度更慢且灵活性更低。尽管对于较小的系统,这种差异可能无关紧要,但是随着系统开始增长或需要快速扩展,这可能会成为问题。Zipkin的模块化程度较低的设计缺乏新方法的灵活性,可能会影响其整体性能。

Zipkin的核心组件是用Java编写的,这对于任何重视稳定性而不是性能的组织都非常有用。Zipkin提供了支持许多开发语言,但没有对一些流行语言(如Python,Ruby和PHP)进行支持。

Jaeger复杂且难以维护

Jaeger可能会更新,但这并不一定意味着它会更好。实际上,许多人(尤其是企业IT部门的人)会将Jaeger的相对不成熟视为劣势。Jaeger选择Go作为主要语言,Go是作为一种系统语言编写的,但是它远没有Java流行。这意味着你可能必须学习一种新的语言,而不是去学习一种已知的语言。

Jaeger的另一个既是福也是祸的领域是其更现代的设计。这种体系结构在性能,可靠性和可伸缩性方面提供了很多好处,但是它也更加复杂且难以维护。

Zipkin或Jaeger:哪一种适合你?

在给出建议之前,我们先总结一下Zipkin和Jaeger的优缺点。在选择时,你还应考虑组织的结构,监视需求以及团队内部的技术专长。此外,你还应该考虑组织和团队是喜欢新颖还是更成熟的技术。

Zipkin和Jaeger都是收集、跟踪分布式系统数据的好选择。它们非常相似,并且都可以胜任。它们都支持分布式跟踪框架(如OpenCensus,OpenTracing和OpenTelemetry)。另外,Zipkin和Jaeger具有广泛的扩展性选项和工具集成,并且都支持虚拟化和容器化。两种工具都依赖于内存存储,并且面临类似的数据丢失问题。

对于那些重视稳定性的组织,Zipkin是更好的选择。它更加成熟,拥有越来越大的社区。Zipkin具有广泛的行业支持,其基于Java开发使其适用于目前的IT世界。

Jaeger虽然缺乏成熟度,但它具有速度快和灵活性高的特点,还有更高的性能,并且更易于扩展。Jaeger的开发语言支持比Jaeger要好,还支持CNCF。

译文链接:https://thenewstack.io/jaeger-vs-zipkin-battle-of-the-open-source-tracing-tools/

K8S中文社区微信公众号

评论 抢沙发

登录后评论

立即登录