答案就是本文的主角——TLA+。 我们对 TLA+ 做了一些探索,用 TLA+ 为 TDengine 的分布式算法建模(基于物联网场景下改进的 Raft 算法),以保证其性能和正确性。 同样,通过 TLA+ 可以描述某一时刻系统的状态。下面的例子就是 TLA+ 描述 Paxos 节点 value chosen 的语句。 通过 TLA+,可以很显然地看出它们的含义。同样,这里也不展开,后续用到时再详细介绍。 6 系统设计与验证 有了 TLA+,我们就可以大胆地设计分布式系统了。 TLA+ Tools 截图如下: 这是一篇概述性的文章,让大家先对 TLA+ 有一个大概的了解。后续会详细介绍 TLA+ 的技术细节,以及 TLA+ 在 TDengine 中的实践过程。
另外,Lamport所开发的规格语言TLA+使得工程师能够以一种精确的、数学的方式描述程序的目标。 Quanta:在分布式系统领域研究了这么多年之后,是什么让您开始了创建TLA+的工作? 有了TLA+,我就能够以一种足够严谨的方式用数学去表达它们。后来证明,TLA+的确做得很出色。重要的是,不要试图用编程语言来编写算法:如果你真的想把事情做好,你需要用数学的术语来编写你的算法。 TLA是能够一种让证明过程具有完全的形式化的逻辑,而且TLA+也是基于TL逻辑的一套完整语言。 Quanta:像TLA+这样的规范语言在工业中使用得不是很广泛,是吗?您认为这是为什么? 在弥合这一鸿沟之前,TLA+是不会收获大量用户的。我希望我至少能让教授并发编程的人明白他们需要TLA+。那样的话,TLA+也许还有希望被更多人使用。
另外,Lamport所开发的规格语言TLA+使得工程师能够以一种精确的、数学的方式描述程序的目标。 Quanta:在分布式系统领域研究了这么多年之后,是什么让您开始了创建TLA+的工作? 有了TLA+,我就能够以一种足够严谨的方式用数学去表达它们。后来证明,TLA+的确做得很出色。重要的是,不要试图用编程语言来编写算法:如果你真的想把事情做好,你需要用数学的术语来编写你的算法。 TLA是能够一种让证明过程具有完全的形式化的逻辑,而且TLA+也是基于TL逻辑的一套完整语言。 Quanta:像TLA+这样的规范语言在工业中使用得不是很广泛,是吗?您认为这是为什么? 在弥合这一鸿沟之前,TLA+是不会收获大量用户的。我希望我至少能让教授并发编程的人明白他们需要TLA+。那样的话,TLA+也许还有希望被更多人使用。
值得注意的是,他创造了一种名为TLA+(行动的时间逻辑)的 "规范语言"。 在从事了这么多年的分布式系统工作后,是什么让你又开始搞TLA+的? 在20世纪70年代,当人们对程序进行推理时,实际上是在证明程序本身的属性,再以编程语言的方式陈述出来。 而TLA+则是基于此的完整语言。 Lamport因在分布式系统方面的工作在2013年获得了A.M. 图灵奖。他提出的Paxos算法,现在已经成为一个行业的通行标准。 对于那种精度很重要的应用,你需要非常严格,需要像TLA+这样的东西,特别是在涉及到并发的情况下,而在这些系统中通常会有并发。 在这个鸿沟被填平之前,TLA+是不可能拥有大量用户的。我希望我至少能让教并发编程的人明白,他们需要TLA+。这样也许才会有一些希望。 我感觉,你对现在的计算机科学教育不太满意。
值得注意的是,他创造了一种名为TLA+(行动的时间逻辑)的 "规范语言"。 在从事了这么多年的分布式系统工作后,是什么让你又开始搞TLA+的? 在20世纪70年代,当人们对程序进行推理时,实际上是在证明程序本身的属性,再以编程语言的方式陈述出来。 而TLA+则是基于此的完整语言。 Lamport因在分布式系统方面的工作在2013年获得了A.M. 图灵奖。他提出的Paxos算法,现在已经成为一个行业的通行标准。 对于那种精度很重要的应用,你需要非常严格,需要像TLA+这样的东西,特别是在涉及到并发的情况下,而在这些系统中通常会有并发。 在这个鸿沟被填平之前,TLA+是不可能拥有大量用户的。我希望我至少能让教并发编程的人明白,他们需要TLA+。这样也许才会有一些希望。 我感觉,你对现在的计算机科学教育不太满意。
您可能听说过 TLA+,但如何使用它进行调试?FizzBee 是一种新的形式化方法系统,您可以在一个周末内掌握它。 为什么形式化方法没有流行起来 用于分布式系统规范的最流行的形式化方法工具是 TLA+。虽然许多人认识到它改善其工作的潜力,但障碍在于缺乏学习或使用 TLA+ 的时间。 即使在亚马逊,Chris Newcombe,他最初在亚马逊开始使用 TLA+,在说服同事采用 TLA+ 时也面临挑战,因为工程师只有在必要或高管授权的情况下才有空闲时间。 使用 TLA+ 表达某些算法可能需要复杂的数学公式,而使用 Python 的熟悉语法可以轻松地传达相同的逻辑。 但是,需要注意的是,像 TLA+ 这样的工具出了名的难以使用。
TLA+ 结合了时序逻辑和动作逻辑,提供了一种工具来描述系统的行为以及在不同状态之间的转换。虽然 TLA+ 本身并不是一种协议,但它是一种强大的建模和验证工具,可以用来设计和验证各种协议。 在讨论 TLA+ 的建模过程中,我们通常涉及到以下步骤: 定义系统的状态和动作:使用 TLA+ 语言描述系统的状态变量和它们之间的转换关系。 验证模型:使用 TLA+ 的模型检查工具(如 TLC)验证模型是否符合指定的性质。 TLA+ 建模的 Mermaid 图 详细步骤说明 1. Model Checking(模型检查) 提交模型: Modeler 使用 TLA+ 语言编写模型,并将模型提交给 TLC(TLA+ 的模型检查工具)。 实现软件 形式化验证工具: TLC Model Checker:用于验证 TLA+ 模型是否符合指定的性质。 Apalache:一种 TLA+ 模型检查工具,增强了对大规模模型的验证能力。 8.
Hudi PMC 成员告诉我salt的想法,我立即在 TLA+ 规范中添加了盐支持。当两个瞬间或文件切片在时间戳上发生冲突时,它们会被识别并按salt进行排序。 TLA+ 规范已准备就绪。模型检查将告诉我们关于 Hudi 声称的 ACID 保证的什么?此外,它是否会回答第一部分中关于单调发行的时间戳的问题,其操作执行顺序不正常? 第三部分将介绍这些内容,我们将查看模型检查 TLA+ 规范的结果。
在第 3 部分中,我们将重点介绍模型检查 TLA+ 规范的结果,并回答这些问题。 此 TLA+ 规范仅对我到目前为止解释的逻辑进行建模: • 仅提交操作类型。 1 • 单调Ts=FALSE • ConcurrencyControl=1(乐观) • KeyConflictCheck=TRUE • PutIfAbsentSupported = FALSE 在 TLA 在经历了在 TLA+ 中对 Hudi 进行建模的过程后,从正确的角度来看,最重要的是时间戳不应该发生冲突,至少在使用不支持 PutIfAbsent 的存储服务时是这样。 结论 这种分析的范围有限,但到目前为止,模型检查 TLA+ 规范的结果与 Apache Hudi 文档并发控制的多写入器部分中讨论的保证相对应。
之前我们做了很多 TLA+ 的论证工作,也有一些简单的测试,1.0 之后我们开始使用 TLA+ 系统进行论证,保证我们的实现在设计上面都是正确的。
对于这些功能来说,P与Leslie Lamport的TLA+和Gerard Holzmann的SPIN相似。但与TLA+和SPIN不同的是,P程序也可以编译成可执行的C代码。
实际系统需要在以下方面权衡: 一致性与可用性 延迟与吞吐量 正确性与实现复杂度 Chubby选择强一致性牺牲了部分可用性,这种设计适合其作为锁服务的定位 算法验证的挑战 证明分布式算法正确性的方法: 形式化验证(如TLA
(TLA+) 这应该会是一个持续更新的路线图,同时也欢迎大家的意见和建议。 如何系统性的学习分布式系统?
图 3 数据准备过程 大模型在形式化细分任务上的能力对比 通过对五种形式化语言(Coq, Lean4, Dafny, ACSL, TLA+)在形式化证明写作上六种细分能力对比,研究团队获得了一些有趣的发现 研究团队构建了包含 18000 对高质量指令 - 响应对的微调数据集(fm-alpaca)与评估集(fm-bench),覆盖 5 种主流的形式化语言(Coq, Lean4, Dafny, ACSL, TLA
Lamport在一些视频(TLA+课程、访谈等)中提及Paxos并不是一个简单的算法。 事实上,对于这两个事件,我们对其理解的有些片面。
[1] • 第 3 部分 - 对 TLA+ 规范进行建模检查。[2] 我可能会扩展分析以包括读时合并表以及同步和异步表服务(清理、压缩等)。 快速浏览 TLA+ Next 状态公式 TLA+ 规范的下一个状态公式反映了所描述的写入路径。 在 TLA+ 规范中,编写器在将文件组分配给新键时会不确定地选择文件组。这可能会导致读取中出现重复项,如此处所述。
Meel新加坡国立大学GPU加速的并行SAT求解Eric Mercer杨百翰大学从Dafny模型生成Java测试的符号执行Peter Müller苏黎世联邦理工学院基于TLA+规范的Rust程序验证Suha
Meel新加坡国立大学GPU加速的并行SAT求解Eric Mercer杨百翰大学从Dafny模型生成Java测试的符号执行Peter Müller苏黎世联邦理工学院基于TLA+规范的Rust程序验证Suha
Meel新加坡国立大学支持GPU的并行SAT求解Eric Mercer杨百翰大学从Dafny模型生成Java测试的符号执行Peter Müller苏黎世联邦理工学院针对TLA+规范的Rust程序验证Suha
理论正确性的验证 我们使用 TLA+ 对理论正确性进行验证,TLA+ 是为并行和分布式系统设计的建模语言,能够模拟出所有可能发生的情况,来保证理论的正确性。 [up-635c23afb41a33f8ff415a70c50c8b288ce.png] 图 4 - 形式化验证过程 使用 TLA+ 对模型进行形式化验证需要先定义初始状态,然后定义 Next 过程和验证正确性的 因为 Next 是可能会发生的过程,所有一次 Next 调用可能会产生多种执行路径,TLA+ 会搜索所有可能的路径,确保在这个并行系统中,任意一种顺序都不会违反我们所定义的约束。 虽然 TLA+ 能够从理论上验证正确性,但这一方法也有着各种限制: 复杂度随过程量指数级提示,如果搜索路径过于复杂,要完成期望深度的搜索可能需要消耗大量的时间。 理论上的正确不能防止实现上的错误。