分布式系统性能分析

5
我想了解在分布式系统中追踪性能瓶颈的可能方法。我知道像X-Trace及其后代(例如Dapper)等工具,但我更关心的是方法论而非特定工具。
换句话说,如果给定一个没有明显瓶颈的分布式系统,你如何研究和改善它的性能?
2个回答

3
我使用了一种方法,它有利有弊。 优点是它有效——当问题被修复后,性能会变得流畅。 缺点是需要大量手动操作。
我甚至写了一本书,介绍了这种方法。 具体操作是收集时间戳事件日志,并将它们合并到一个共同的时间轴上。 然后你要仔细检查,追踪相关消息在异步代理网络中的流动。 你需要寻找不必要的消息循环或不必要的延迟。例如,在查看这张图片时,由于“将状态发布到DB”的任务而导致消息接收被延迟。一旦理解了这一点,发布实际上可以在单独的线程上完成。

这本书叫什么名字? - redblackbit
1
@redblackbit: 构建更好的应用程序。我从来不喜欢这个标题,而且网上的价格也太荒谬了。 - Mike Dunlavey
@MikeDunlavey 有没有其他获取那本书内容的方式(例如,是否可以在线获得)? - JDiMatteo
@JDiMatteo:这是一个Dropbox链接(https://www.dropbox.com/s/rnc97jee37o41z8/BuildingBetterApplications.pdf?dl=0)。如果无法访问,请告诉我。 - Mike Dunlavey
@MikeDunlavey 谢谢!我以前遵循你在 Stack Overflow 上的建议非常成功,并且迄今为止喜欢你的写作风格。 - JDiMatteo
@JDiMatteo:这真是令人欣慰。谢谢。 - Mike Dunlavey

0
说实话,这是一个非常好的问题,对于如何做到最好的方式还没有共识。其中最基本的方法之一是记录日志,你基本上可以将一堆系统事件转储到一个文件中,然后解析这些日志以查找事件之间的时间差,以确定它们所需的时间。另一种方法是跟踪(Xtrace使用的方法)。在跟踪中,你会跟踪请求的生命周期。例如,如果你向使用微服务架构的服务发送请求,你将跟踪线程、进程ID和请求在系统的微服务中经过的延迟时间。

棘手的部分是找出您想要在请求跟踪中跟踪的内容,这将取决于您的分布式系统试图实现什么。例如,性能感兴趣的一个明显指标是延迟,因此您将测量请求在每个服务上花费的时间。另一个可能有趣的指标是争用,因此您可以测量请求通过系统时 CPU 中的争用。许多这些分析工具的问题之一是它们为系统或请求提供总体指标,但当您想要找到性能问题时,您想要确定请求是否是异常值。因此,将请求的延迟、争用和内存使用与系统中的其他类似请求进行比较,以确定它是否异常至关重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接