acm-header
登录

ACM通信

实践

调试分布式系统


调试分布式系统,插图

来源:Shutterstock.com

回到顶部

分布式系统给软件开发人员带来了独特的挑战。推理系统节点的并发活动,甚至理解系统的通信拓扑都是很困难的。了解系统活动的一种标准方法是分析系统日志。不幸的是,这可能是一个冗长而复杂的过程。本文将讨论将分布式系统与其他类型的软件区分开来的几个关键特性和调试挑战。本文介绍了几种有前途的工具和正在进行的研究,以帮助解决这些挑战。

分布式系统与单机程序的不同之处在于,前者在为系统提供特殊功能方面是积极的,而后者在呈现软件开发和操作挑战方面是消极的。

非均质性。分布式系统的节点可能包括移动电话、笔记本电脑、服务器类机器等等。节点资源和网络连接中的这种硬件和软件多样性可以使分布式系统更加健壮,但这种异质性迫使开发人员在开发和调试期间管理兼容性。

并发性。多个节点的同时操作导致并发,这可以使分布式系统优于集中式系统。然而,并发可能会引入竞争条件和死锁,这是非常难以诊断和调试的。此外,网络引入了数据包延迟和丢失,加剧了理解和调试并发性的问题。

分布状态。跨多个节点分布系统状态可以消除一个中心点故障并提高可伸缩性,但是分布式状态需要复杂的节点协调来同步跨节点的状态——例如,节点必须确保它们的本地状态一致。分布式算法可以防止潜在的不一致,比如那些保证特定类型的数据一致性和缓存一致性的算法。当系统分布在许多节点上时,开发人员可能会发现重构系统的全局状态是困难的,甚至是不可能的。这使得错误诊断和验证变得复杂。

部分失败。状态和责任的分布允许分布式系统健壮,并在各种故障中幸存下来。例如,谷歌的Spanner系统可以在整个数据中心的故障中幸存下来。2然而,要实现这样的容错,需要开发人员通过复杂的故障模式进行推理。对于大多数分布式系统,容错不能是事后才考虑的;系统的设计必须能够处理故障。这种失效弹性设计起来很复杂,测试起来也很困难。

回到顶部

现有方法

下面是七种方法的概述,旨在帮助软件工程师验证和调试分布式系统。

测试。测试套件执行一组特定的执行,以确保它们的行为正确。分布式系统的大多数测试都是使用手动编写的测试完成的,通常是在响应故障时引入测试,然后最小化测试。14测试是检测错误的有效方法。然而,由于测试执行的次数有限,它不能保证显示所有错误。

模型检查是详尽的测试,通常达到一定的界限(执行中的消息或步骤的数量)。符号模型检查用数学方法表示和探索可能的执行;显式状态模型检查更实用,因为它实际运行程序,控制其执行,而不是试图抽象它。MoDist执行黑箱模型检查,排列消息序列,并改变一个进程相对于系统中其他进程的执行速度。18MaceMC是一种白盒技术,通过为模型检查添加编程语言支持来实现速度的提高。7所有模型检查工具的共同问题是可伸缩性和环境建模,因此它们很少实现保证。

定理证明原则上,可以证明分布式系统没有缺陷。Amazon使用TLA+来验证其分布式系统。11两个最新的系统可以构建一个经过验证的分布式系统实现。威尔第使用Coq工具,其表达类型系统使类型检查等价于定理证明,这得益于Curry-Howard同构;然后将Coq规范编译为分布式系统的OCaml实现。16相比之下,IronFleet使用TLA和hoare -逻辑验证来类似地产生一个经过验证的分布式系统实现。5使用这些工具需要付出巨大的努力,这使得它们最适合于小型、关键核心的新实现。现有的分布式系统还需要其他技术。

记录和回放捕获系统的一次执行,以便以后可以重播或分析该执行。这在调试非确定性行为时特别有用。一个记录和回放工具,例如Friday4或D3S进行8捕获所有非确定性事件,以便准确地再现执行。然而,记录一个复杂的执行可能会非常昂贵,并且可能会改变底层系统的行为。

跟踪跟踪通过系统的数据流,甚至跨数据库、Web服务器、域名服务器、负载平衡器或虚拟专用网络协议等应用程序和协议。13例如,轴心跟踪动态地使用基于java的系统来收集系统中不同点的用户定义指标,并整理结果数据,以提供多个执行的指标的组件间视图。9Dapper是谷歌上用于跟踪基础设施服务的低级跟踪系统。15跟踪比记录和重放更有效,因为它关注数据的特定子集,但它需要对应用程序和协议进行检测,以便在不消耗跟踪元数据的情况下正确转发。

日志分析是一种更轻量级的方法,可用于无法修改的系统。它是一种常见的黑箱方法,使用系统的控制台日志、调试日志和其他日志源来了解系统。例如,Xu等人将机器学习应用到日志中,以检测谷歌基础设施服务中的异常。17来自现实系统的详细日志包含大量有价值的细节,但它们往往太大,以致于程序员无法直接从中受益。

可视化。分布式系统的复杂性激发了对此类系统的可视化工作,以使它们对开发人员更加透明。例如,Theia显示了一个可视化签名,它总结了Hadoop执行的各个方面,比如执行的资源利用率。3.这些签名可用于发现异常并比较执行情况。像Theia这样的工具提供了系统行为的高级摘要。但是,它们不能帮助开发人员理解系统中的底层通信模式,包括消息的分布式排序。

回到顶部

可视化分布式系统执行

如前所述,可视化分布式系统执行的能力可以帮助开发人员理解和调试他们的分布式系统。ShiViz就是这样一个可视化工具,它将分布式系统执行显示为交互式时空图,显式地捕获系统中消息和事件的分布式顺序。此图再现了执行日志中捕获的事件和交互,通过简洁的可视化使排序信息显式显示。开发人员可以展开、折叠和隐藏图表的部分,以及搜索特定的交互模式。ShiViz是一个免费的浏览器应用程序;任何开发人员都可以可视化日志,而不需要安装软件或通过网络发送日志。

为了提供分布式系统执行的丰富而准确的可视化,ShiViz显示了之前关系。给定事件e在节点n, happens-before关系表示逻辑上在前面的所有事件e。根据挂钟时间,其他事件可能已经发生在其他节点上,但是节点n无法分辨其他事件是发生在之前还是之后e,它们不影响的行为e。这种部分顺序可以排除哪些事件不会导致其他事件,识别并发事件,并帮助开发人员在心里重播执行的部分。

图1演示使用一个事务管理器和两个副本的两阶段提交协议的执行。1这个时空图是底层发生前部分顺序的可视化,显示了一个有三个节点的执行。带箭头的行表示事件的部分顺序,每个事件的括号中都有一个相关的向量时间戳。(请参阅附带的侧栏时间戳)。

图2展示了ShiViz可视化执行分布式数据存储系统Voldemort的截图。12屏幕中间是时空图,时间从上到下流动。顶部的彩色框表示节点,下面的竖线是节点时间线。每个节点时间轴上的圆圈表示该节点执行的事件。边连接事件,表示记录的事件发生之前的关系:在图中较高的事件发生在图中较低的事件之前,该事件通过向下路径连接到图。ShiViz用操作扩充了时空图,以帮助开发人员探索分布式系统执行和相应的日志。图2详细介绍这些操作。

回到顶部

理解分布式系统执行

ShiViz帮助开发人员理解事件的相对顺序和事件之间可能的因果链,这对于调试并发行为很重要;查询主机之间的某些事件和交互模式;并在执行对和组之间识别结构上的异同。时空图表示通过可视化事件排序和通信支持第一个目标。下一节将描述支持第二个目标的两个搜索操作,以及与第三个目标对应的多个执行操作。

关键字搜索和结构化搜索操作。ShiViz实现两种搜索操作:关键字搜索和结构化搜索。开发人员可以通过顶部搜索栏访问这两种类型(参见图2).

关键字搜索允许开发人员突出显示图表中包含与查询匹配的字段的所有事件。例如,搜索send将突出显示图表中字段值为send的所有事件。可以使用字段标识符和正则表达式进一步约束结果。例如,查询node=alice && priority=CRITICAL*将只突出在爱丽丝具有匹配正则表达式的优先级字段的节点关键的*。

在结构化搜索中,用户向ShiViz查询通过特定排序模式相关的任何事件集,ShiViz突出显示与此模式匹配的图表部分(事件及其相互连接)。ShiViz包含几个预定义的模式:

  • 请求-响应。源节点发送请求,目标节点返回响应。
  • 广播。一个节点向系统中的大多数其他节点发送消息。
  • 收集。一个节点从大多数其他节点接收消息。

用户还可以组成由节点、节点事件和表示部分顺序的事件之间的连接组成的自定义模式。图3显示这样的自定义模式,描述在一个环中通信的三个节点:节点1只与节点2通信;节点2和节点3;节点3和节点1。绘制此模式允许用户在执行中搜索此三节点环通信的所有实例。ShiViz自动将绘制的模式转换为文本表示(请参阅顶部的搜索栏),并且可以直接编辑、复制和粘贴文本表示。结构化搜索特性允许用户表达事件之间的自定义通信模式,并查询指定模式实例的执行。在执行的特定点上查询子图的存在或不存在可以帮助用户检测异常行为,帮助他们进行调试。

比较处决。ShiViz可以帮助用户理解系统的多次执行。当ShiViz解析多个执行时,用户可以选择分别查看执行还是成对查看执行。

在成对视图中,用户可以通过突出显示它们的差异来进一步比较两个执行。启用时,将按名称比较节点。对于两个执行中都出现的节点,ShiViz通过比较相应的事件描述逐个比较它们的事件。在一个执行中没有出现在另一个执行中的节点或事件被重绘为菱形。

图4演示了两阶段提交协议日志上的这种两两比较。图中选择的两个事件解释了这两个执行之间的区别:两阶段提交在左侧执行中成功地提交了一个事务,但在右侧执行中终止了一个事务。

显式突出显示差异为用户提供了快速检测异常事件或两个执行分离的点的功能。前面描述的搜索特性可以在成对视图中应用,以帮助开发人员跨跟踪检测特定的统一或区分的特性,允许他们更有效地设计和测试他们的系统。

集群执行。为了帮助管理多个执行,ShiViz支持将执行分组到集群中。用户可以根据节点数量或与基本执行的比较进行集群,使用前面描述的差异机制作为距离度量。集群结果显示为列出的执行名称的不同组。

执行集群通过一次提供所有执行的概述,有助于检查和比较多个执行。用户可以快速扫描群集结果,根据它们被排序的组来查看执行的相似或不同之处。集群还允许用户检查与所需度量相匹配的执行子集,从而帮助用户精确定位感兴趣的执行。通过在聚类结果上执行关键字搜索或结构化搜索,可以进一步缩小这个子集。如果集群的对应图包含匹配用户搜索查询的实例,则突出显示集群之间的执行名称。

ShiViz帮助开发人员可视化事件顺序,搜索通信模式,并识别潜在的事件因果关系。这可以帮助开发人员推断执行中事件的并发性、分布式系统状态和分布式故障模式,以及制定关于系统行为的假设,并通过执行可视化验证它们。同时,日志记录的通用性使ShiVector和ShiViz广泛适用于部署在广泛设备上的系统。

ShiViz有一些局限性。ShiViz显示低级的排序信息,这使得它成为理解高级系统行为的糟糕选择。ShiViz可视化是基于逻辑而非实时排序的,不能用于研究某些性能特征。ShiViz工具是作为客户端浏览器应用程序实现的,这使得它具有可移植性,适合于分析敏感日志数据。然而,这种设计选择也限制了它的可伸缩性。ShiViz的一个相关和补充工具是Ravel,它可以可伸缩地可视化并行执行轨迹。6

ShiViz是一个在线部署的开源工具(http://bestchai.bitbucket.org/shiviz/).观看演示ShiViz关键功能的视频http://bestchai.bitbucket.org/shiviz-demo/

回到顶部

致谢

我们感谢帮助开发ShiViz的Perry Liu和Albert Xing;开发了最初ShiVector和ShiViz原型的Jenny Abrahamson;以及帮助评估ShiViz的唐纳德·阿克顿和科林·斯科特。这项工作由NSERC USRA, NSERC发现补助金和国家科学基金会资助CCF-1453474和CNS-1513055。本材料基于DARPA赞助的研究,协议编号为FA8750-12-2-0107。美国政府被授权为政府目的复制和分发再版,尽管有任何版权声明。

ACM队列的q戳相关文章
queue.acm.org

测井分析的进展与挑战
Adam Oliner, Archana Ganapathi和Wei Xu
http://queue.acm.org/detail.cfm?id=2082137

利用应用程序框架
道格拉斯·c·施密特,阿尼鲁达·戈卡莱,和巴拉钱德兰·纳塔拉扬
http://queue.acm.org/detail.cfm?id=1017005

动态环境中的事后调试
大卫·帕切科
http://queue.acm.org/detail.cfm?id=2039361

回到顶部

参考文献

1.伯恩斯坦,哈兹拉科斯,V.,古德曼,N.分布式恢复。数据库系统的并发控制与恢复,第七章。addison - wesley, 1986;http://research.microsoft.com/en-us/people/philbe/chapter7.pdf

2.Corbett, J. C.等。扳手:谷歌的全局分布式数据库。在十人会议记录th操作系统设计和实现Usenix研讨会, 2012;https://www.usenix.org/conference/osdi12/technical-sessions/presentation/corbett

3.Garduno, E., Kavulya, s.p, Tan, J., Gandhi, R., Narasimhan, P. Theia:用于大型Hadoop集群问题诊断的可视化签名。在二十六届会议的议事录th大型安装系统管理国际会议, 2012, 3342;https://users.ece.cmu.edu/~spertet/papers/hadoopvis-lisa12-cameraready-v3.pdf

4.Geels, D., Altekar, G., Maniatis, P., Roscoe, T., Stoica, I. Friday:分布式重放的全局理解。在四人会议记录th网络系统设计与实现Usenix会议、(2007);https://www.usenix.org/legacy/event/nsdi07/tech/full_papers/geels/geels.pdf

5.Hawblitzel, C., Howell, J., Kapritsos, M., Lorch, J. R., Parno, B., Roberts, M. L., Setty, S., Zill, B. IronFleet:证明实用分布式系统是正确的。在二十五次会议的会议记录th操作系统原理研讨会;2015;http://sigops.org/sosp/sosp15/current/2015-Monterey/250-hawblitzel-online.pdf

6.艾萨克斯,K.E.等人。梳理通信毛球:使用逻辑时间可视化并行执行轨迹。IEEE可视化与计算机图形学汇刊, 12(2014年12月),23492358。

7.基利安,C.,安德森,J. W., Jhala, R., Vahdat, A.生命,死亡,和关键的转变:在系统代码中寻找活的bug。在四人会议记录th网络系统设计与实现Usenix会议、(2007);https://www.usenix.org/legacy/event/nsdi07/tech/killian/killian.pdf

8.刘鑫、郭志、王鑫、陈芳、连鑫、唐建军、吴明克、Kaashoek、明芳、张铮。D3S:调试部署分布式系统。在五人会议记录th网络系统设计与实现Usenix研讨会, 2008;423437;http://static.usenix.org/event/nsdi08/tech/full_papers/liu_xuezheng/liu_xuezheng.pdf

9.梅斯,J., Roelke, R., Fonseca, R.枢轴跟踪:分布式系统的动态因果监视。在二十五次会议的会议记录th操作系统原理研讨会、(2015);378393;http://sigops.org/sosp/sosp15/current/2015-Monterey/122-mace-online.pdf

10.分布式系统的虚拟时间和全局状态。在并行与分布式算法国际研讨会论文集, 1989;http://homes.cs.washington.edu/~arvind/cs425/doc/mattern89virtual.pdf

11.纽科姆,C.,拉斯,T.,张,F.,蒙泰亚努,B.,布鲁克,M.,迪尔德夫,M.,亚马逊Web服务如何使用形式化方法。Commun。ACM 58, 4 (2015), 6673;//www.eqigeno.com/magazines/2015/4/184701-how-amazon-web-services-uses-formal-methods/fulltext

12.项目伏地魔;http://www.project-voldemort.com/voldemort/

13.桑巴万,R。R。冯塞卡,R。谢弗,I。冈格,g。你想追踪你的分布式系统吗?来自多年实践经验的关键设计见解。并行数据实验室,卡内基梅隆大学,2014;http://www.pdl.cmu.edu/PDL-FTP/SelfStar/CMU-PDL-14-102.pdf

14.斯科特,C.等。尽量减少分布式系统的错误执行。在十三届会议的议事录th网络设计与实现Usenix研讨会(加州圣克拉拉,2016年3月1618日)291309。

15.西格尔曼,b.h,巴罗佐,l.a,巴罗斯,M,斯蒂芬森,P,普拉卡尔,M,海狸,D, Jaspan, S, Shanbhag, C. Dapper,一个大规模分布式系统跟踪基础设施。谷歌研究,2010;http://research.google.com/pubs/pub36356.html

16.Wilcox, J. R., Woos, D., Panchekha, P., Tatlock, Z., Wang, X., Ernst, M. D., Anderson, T.威尔第:实现和正式验证分布式系统的框架。在36人会议记录thSIGPLAN编程语言设计与实现会议, 2015, 357368;https://homes.cs.washington.edu/~ztatlock/pubs/verdi-wilcox-pldi15.pdf

17.Xu, W., Huang, L., Fox, A., Patterson, D., Jordan, M.体验挖掘谷歌的生产控制台日志。在通过日志分析和机器学习技术管理系统研讨会论文集, 2010;http://iiis.tsinghua.edu.cn/~weixu/files/slaml10.pdf

18.杨,J.,等。MoDist:未修改的分布式系统的透明模型检查。在六人会议记录th网络系统设计与实现Usenix研讨会, 2009, 213228;https://www.usenix.org/legacy/event/nsdi09/tech/full_papers/yang/yang_html/

回到顶部

作者

伊凡Beschastnikhhttp://www.cs.ubc.ca/~bestchai/)致力于改进复杂系统的设计、实施和操作。他是英属哥伦比亚大学计算机科学系的助理教授,在那里他领导着一个学生团队,从事横跨分布式系统、软件工程、安全和网络的项目,特别关注程序分析。

帕蒂王探讨了帮助开发人员理解和比较多个分布式执行的方法,重点是总结不同跟踪之间的相似性和不同点。

看门人尤里布朗http://people.cs.umass.edu/~brun/)致力于自动化系统构建和创建自适应系统。他是马萨诸塞大学阿默斯特分校的助理教授。

迈克尔·恩斯特http://homes.cs.washington.edu/~mernst/)研究使软件更可靠、更安全、更容易生产的方法。他的主要技术兴趣是软件工程、编程语言、类型理论和安全性等。

回到顶部

数据

F1图1。一个有三个节点的执行的时空图。

F2图2。ShiViz截图。

F3图3。结构化搜索功能。

F4图4。执行两阶段提交协议。

回到顶部


版权归作者所有。授权ACM出版权利。

数字图书馆是由计算机协会出版的。版权所有©2016 ACM, Inc.


没有找到条目

登录全面访问
忘记密码? »创建ACM Web帐号
文章内容:
Baidu
map