请选择 进入手机版 | 继续访问电脑版
设为首页 收藏本站
开启辅助访问

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

切换风格 立即注册 找回密码

Java教程网

Java教程网 门户 程序人生 查看内容

如何用架构师思维解读区块链技术?

2018-4-21 23:04| 发布者: wenzhilanyu| 查看: 219| 评论: 0|来自: uml.org.cn

摘要: 很多童鞋反馈,区块链技术有点绕,有点晦涩,大都是一知半解,理解不够通彻。但在阿里技术专家郑吉看来,区块链特别是比特币本身,并没有使用高大上复杂的新技术,只是对现有技术的组合。其天才的地方体现在系统的架 ...

很多童鞋反馈,区块链技术有点绕,有点晦涩,大都是一知半解,理解不够通彻。但在阿里技术专家郑吉看来,区块链特别是比特币本身,并没有使用高大上复杂的新技术,只是对现有技术的组合。其天才的地方体现在系统的架构上,体现在把金融学,货币学,博弈学,甚至是哲学思想体现在比特币的系统架构上。如果单纯从系统中的技术点着手学习研究,那么往往就会觉得有点绕,有点晦涩。这就像我们在平时工作中了解某个系统,如果首先搞清楚业务本身,了解清楚系统架构的设计,再去看具体的实现技术,从大局到面到点,那么就有豁然开朗的感觉。

今天,郑吉将试着帮助大家转换视角,从架构的思维分析去解析比特币,从而对区块链技术有一个更深入的理解。

准备工作

区块链不是一种技术实现,而是一个系统的架构设计,使用一系列的技术组合用于完成去中心化的数据存储。比特币在区块链之上融入了金融学,货币学,博弈学,甚至一定程度的哲学思想,用于电子货币的发行,运行和交易。在学习区块链之前有一些基础知识需要提前掌握好,后面将不再对具体技术展开描述,而是从这个技术解决了什么问题,为什么要用这个技术这个角度去描述。

P2P

不可逆算法

不对称加密算法

Merkle树

CAP理论

最终一致性算法

比特币要做什么?

如果你是一个架构师,做一个系统的架构,你首先要搞清楚这个系统要做什么?要解决一个什么问题?带着这个问题进行分析,设计系统整体的架构。对于比特币也一样,首先搞清楚比特币是要做什么,要解决什么问题?然后带着这些问题去解析比特币的技术实现。

如果用一句话来描述比特币要做什么,那么可以这样描述:做一个去中心化电子货币发行交易系统。这里有三个关键词:

1. 去中心化

2. 电子货币发行

3. 电子货币交易

分析和设计

本章针对上述比特币的三个关键词,去中心化,电子货币发行,货币交易,进行分析和设计。

去中心化

当今世界的所有货币交易都是有一个第三方可信任的金融机构提供服务处理,任何人不能访问由这个第三方机构中心化存储的数据,理论上来说如果这个金融机构发生了欺诈或倒闭,那么存储在这个机构中的货币,以及所做的交易就会存在风险。 当然比特币的去中心化,不是因为担心这种风险,而是根本就不需要这个第三方机构了。这也是区块链的强大颠覆性之一,凡是需要某个第三方可信任的机构需要安全保存处理的数据,都可以去中心化安全存储,所有人都可以访问。

从技术角度分析,如何做到去中心化?

中心化对应的就是分布式,去中心化就是分布式。把原先存储在某个第三方机构,中心化存储的数据,进行分布式存储。

分布式存储要解决的3个基本问题

1. 网络结构

2. 数据不可篡改性

3. 最终一致性

网络结构

去中心化的分布式存储是指整个发行的电子货币,以及货币交易数据由不同机构,不通个人的成千上万的计算机共同存储,共同维护了同一份相同的数据,只有共同维护的这份相同的数据才是认为最终正确的数据,任何个人篡改自己的数据都没有意义,并且存储的数据所有人都可访问。

如果做为架构师,你会选择什么样的网络结构去实现这个分布式存储?一种方式是可采用类似Hadoop中HDFS的方式,由某个中心节点NameNode进行协调访问,但这种方式就会带来单点风险,破坏了中心节点,整个体系都将不可访问。或者采用Cassandra无中心化投票机制维护整个集群状态,但是这种方式在全球化开放式部署中会导致根本无法收敛。

所以比特币采用了一种更加简单直接的方式,利用P2P协议维护整个比特币网络集群,不需要某个中心节点协调节点之间的通信,不需要所有机器投票维护集群状态。而是通过P2P协议进行节点之间的数据传输,任何节点都可以随时加入或者离开比特币网络集群,而不会对比特币网络集群产生影响,也不需要特意去修复这个集群中的故障机器。

利用P2P协议进行节点之间数据传输主要有两个功能点:

a. 把需要存储的数据广播到所有节点上进行储存。

b. 查询整个网络集群中所有节点的最新数据,如果自己节点的数据与大部分节点的数据不一致,则更新自身的数据与大部分节点存储的数据一致。

比特币是去中心化存储,最大的风险是整个比特币网络集群被破坏,篡改了整个网络存储的数据。但是上述第二个功能点能够有效的防止这种风险,由于系统会自动更新为整个集群中大部分节点存储的相同数据,所以要篡改数据,必须要同时篡改整个网络一半以上的数据,这不是说做不到,但是比特币利用区块链的方式再加上利益博弈机制,当你拥有这种能力的时候,也不需要去做篡改这种投入产出比这么低的事了,在数据不可篡改性一节中再详细描述。

通过图示看一下比特币网络结构的运行:

Jack把某一笔交易数据往A服务器上提交,A服务器验证数据合法性后存储到自身的数据库中,同时把这笔交易数据点对点的传输到比特币网络集群的所有B,C,D,E节点上。A和所有其它的B,C,D,E节点保持点对点通信,自动更新为这个集群中大多数节点维护的相同的数据。如果B,C,D三台服务器保存的数据相同,但是与A,E不一致,则A和E自动更新为与B,C,D相同的数据。所以Jack的这笔交易,需要等待这个比特币网络集群中所有节点都接受到,并且认为合法存储后,才认为这笔交易成功完成。当然在现实情况下,不需要等待所有节点都确认完成,通常只需要少数服务器确认完成后即可认为交易完成,因为每个服务器维护的自身与整个网络集群的数据状态,当少量服务器都认为与整个集群一致时,此时从概率上就是一致的。在最终一致性一节中将继续对这种网络结构下的数据存储进行描述。


123下一页

鲜花

握手

雷人

路过

鸡蛋

最新评论

关闭

站长推荐 上一条 /1 下一条

小黑屋|手机版|Archiver|Java教程网    

GMT+8, 2018-10-24 11:00 , Processed in 0.187500 second(s), 21 queries .

Powered by Discuz X3.2

© 2001-2013 JAVA教程网

返回顶部