Tendermint是一个分布式系统状态复制引擎,用于在多台机器安全一致地复制一个应用。所谓安全性,指的是即使有多达1/3的机器出现任意故障的情况下, Tendermint仍然能够正常工作。
Tendermint是一个分布式系统状态复制引擎,用于在多台机器安全一致地复制一个应用。所谓安全性,指的是即使有多达1/3的机器出现任意故障的情况下, Tendermint仍然能够正常工作。所谓一致性,指的是每一个正常工作的机器都会有着同样的交易日志,计算相同的状态。安全一致的复制是分布式系统中一个基本原则问题,它在各种应用程序(从货币到选举,到基础设施规划等)中的广泛应用的容错能力方面承担了极其重要的作用。Tendermint被设计成易于使用、易于理解,且性能优异,适用于广泛的分布式应用。
正文分布式共识系统成为现代互联网基础设施中的一个关键组件,正助力于每一个主要的互联网应用。本章节内容介绍了必要的背景材料来理解和探讨这些系统。复制状态机(Replicated State Machine)最常见的用来研究和实施分布式共识(distributed consensus)的范例的是复制状态机的范例,其中,一个确定的状态机在数个进程(processes)之间被复制,这样不管部分进程是否失败,这些进程看上去像单个状态机。状态机有一些列输入驱动,这些输入被称作交易(transactions),每一个交易根据其是否有效,可能引起一个状态迁移并返回一个结果。更正式的,交易为数据库上的原子操作(atomic operation),意味着其要么完成要么根本就没有发生,不能返回一个中间状态( intermediate state)。
状态交易逻辑(state transition logic)由状态机的状态转移函数决定,这个函数映射了一个交易和目前的状态到一个新的状态和一个返回值。状态转移函数有时也被称为应用逻辑(application logic)。
订购交易(order the transactions)并且将相应的交易日志( transaction log )复制到每一个进程是共识协议的责任。使用一个确定的(deterministic)状态转移函数意味着在给定同样的交易日志的情况下,每一个进程将计算出相同的结果。
一个复制状态机在多个机器之间复制了一个交易日志和结果状态。交易从客户端接受,运行了共识协议,在交易日志中订购(ordered),最后执行得到最新状态。在图中,每一个菱形代表了单个机器,其中,虚线代表机器间的通讯用来承载进行订购交易( ordering transactions)的共识协议。
Tendermint的目标是创建一个通用目的,高性能,安全和健壮的复制状态机。不同时性(Asynchrony)容错复制状态机(fault-tolerant replicated state machine)的目的是在对上层提供服务的时候,协调网络中的计算机的同步,不管是否存在故障节点。保持同步意味着成功复制交易日志;提供一个有用的服务意味着在处理新交易的时候保持状态机的可用性。传统上系统的这些方面被各自成为安全性(safety)和可用性(liveness)。通俗地,安全性意味着没有任何坏的事情发生;可用性意味着好的事情最终发生。安全违规( violation of safety)意味着存在两个或者更多的有效的,竞争的交易日志。可用性违规(violating liveness )意味着一个无法响应的网络。
通过接受所有的交易可以很容易来满足可用性。通过不接受任何交易可以很容易来满足安全性。因此,状态机复制算法可以被看作在两者之间的一个平衡。一般地,进程在提交一个新的交易在之前,需要对来自于其他进程的信息设立一个阈值。
在同步的环境中,我们对网络消息的最大延迟或者处理器时钟的最大速度作出假设,通过轮流坐庄来提议新的交易,进行大多数投票表决,如果提议者在同步假设的区间内并没有产生任何提议,则跳过(skip)提议者的这一回合。在一个异步的环境中,没有关于网络延迟或者处理器速度的保证的假设,权衡将变得更为困难。事实上,所谓的FLP不可能性结果(FLP impossibility result)证明了在确定的异步进程(单个进程可能会崩溃)之间的分布式共识的不可能性。
该证明意味着,因为进程可能失败,存在协议的有效执行,但进程恰好在某一时间崩溃这样就阻止了共识。因此,我们对共识没有任何保证。