何时选用区块链的工程分析
全世界都因区块链激动不已,我也被它吸引住了。我最关心的问题是:我什么时候应该考虑用区块链作方案?从探索这个领域的第一天起,浏览各种技术、政治、金融和随之而来的炒作等交叉内容,我仍然很难找到直接的答案。几个月后,我终于明白如何纯粹的把它当成一项技术来评估——客观地把它和作为全球变革和颠覆的工具的目标分开。
作为数据库的区块链
第一步就是找一个框架以分析区块链。很幸运,它刚好属于一个非常成熟和研究充分的范畴:后端数据库。很简单,一条区块链就是一个数据库——它允许你持久存储数据并稍后检索。现在的问题是,它属于什么类型的数据库?
要注意一个要点,没有哪样数据库天生有用或者无用。每种数据库都做了一些不同的取舍,这样的取舍给予它可能对某些问题有用的属性。如果你曾用过的数据库,用起来很差劲,可能是它不适合你的应用。
那么它是哪一类数据库?
作为分布式系统,数据库受CAP定理约束,必须在某些功能之间做选择。区块链属于数据库的“最终一致性”子类,它选择牺牲其数据的完全一致性。这意味着,数据库中的所有节点不保证始终具有相同和最新的信息。
通常,牺牲这样的保证以支持高工作负载时更高的吞吐量和高可用性。比如Cassandra, CouchDB和Riak这样的最终一致性数据库常见于解决扩容问题。相比之下,区块链并没有能力支持跟这些传统数据库相近的吞吐量。
最终一致性数据库的另外挑战就是会发生以下情形:
1、用户A连接了美国的一个节点,他在区块链上写了一篇很棒的帖子。
2、美国和欧洲之间的网络中断了。
3、用户A把他帖子的链接发给他欧洲的朋友用户B(连接了欧洲的节点),用户B找不到这个帖子。因为他所在节点还没有收到美国节点的更新。
所有最终一致性系统都必须处理的问题是,无论是中断一秒钟还是几个小时,要如何在他们建立通讯之后合并两个不同步的数据库。
在这个场景中,解决冲突很容易。美国节点的帖子只要插入到欧洲节点即可,因为欧洲节点中不存在这篇帖子。但是,如果两个用户在网络中断期间协作共同编辑同一篇帖子呢?两个版本的帖子同时存在直到中断结束,他们必须合二为一。
像Cassandra这样的数据库简单的确定实体的最后一个修改版本选作当前状态。虽然这不是理想的选择,因为其中一个用户会丢失他的修改,但这是可以接受的损失,因为在大多数领域中,不同位置的两个用户不可能同时修改同一个实体。美国和欧洲的两个数据库可以一个实体接一个实体合并他们的数据,仅当出现两个地方的实体都修改时才会一个实体覆盖另一个实体。
但是,区块链以相当不同的方式来处理冲突。如果美国和欧洲网络分隔了,导致两个不同版本的数据库。它只是简单的确定重新连接,以保留中断期间收到更多流量的那个完整版本(即更长的链)。这意味着如果美国的版本赢了,欧洲版本的所有修改即使没有冲突也会丢弃。重申,这意味着即使大多数互动只是欧洲用户之间发生的,并没有和美国的版本产生冲突,所有的这些写入也都会不管三七二十一丢弃。
从这一点上看,与这个范畴中的其他数据库相比,区块链似乎是一个劣质的数据库。但是,就如我之前提到过的,没有毫无用处的数据库。区块链每件事都做得比其他数据库糟,它舍弃了这些必定挽回了一些别的东西。
拜占庭容错
通常,当你建立数据库集群的时候,你可以控制它的每个节点。拜占庭容错允许存在多方(基本上任何人)向集群贡献节点的系统。这里的复杂性在于,可能会有恶意的行为者试图用假的的信息破坏数据。拜占庭容错系统能够在一定程度上容忍不良行为者。如果你想深入了解拜占庭容错,维基百科条目实际上解释得很清楚。
这是大多数区块链实现提供的核心特性。它是区块链比别的数据库做得更好的地方,也应该是你的应用为什么要选用区块链的唯一原因。如果拜占庭容错不能为你的用例创造巨大的优势,那么区块链并不比其他传统数据库更值得考虑。去中心化不是免费的,它必须是你的产品的根本需求你才去使用它。
现在我们已经将区块链的优势缩小到这个单一特征,我们可以从工程的角度缩小到现实世界。从哲学的角度看,去中心化对我来说是非常有趣的。由分离的各方运行的一个系统,为了一个共同的目标贡献资源,具有天生的吸引力。没有人想要受大型中心化实体的摆布。
但这只是个人喜好。拜占庭容错如何在区块链被吹捧成革命的行业中客观地提供可量化的技术优势,仍然未有答案。由银行和政府控制的旧的、根深蒂固的系统不会冒险转向区块链这条艰难道路,它的所有的权衡都是简单的出于哲学原因。“<旧概念>现在由区块链驱动”这样的公式短期内可以促使加密币价格创造奇迹,但是尚未产生它应有的价值,以使其长期可持续。
参考:https://blog.ironbay.digital/the-blockchain-problem-space-bd94d2babb51
网友评论