区块链, 比特币这些概念最近都很火, 但很多人搞不清楚它究竟是啥, 准备从技术的角度, 从架构的角度, 用通俗的语言谈谈楼主的理解
究竟啥是区块链?
答 : 一句话, 区块链是一个存储系统
更细一点, 区块链是一个 没有管理员, 每个节点都拥有全部数据的分布式存储系统
通常所见的存储系统是啥样的?
答 : 如上图, 一块空间存储数据, 一个软件管理数据, 提供接口写入数据, 这是存储系统, 例如 mysql
普通的存储系统会有什么常见的问题?
答 : 常见的有两个问题:
数据存在一个地方很危险, 空间损坏数据就丢了, 用技术的话说即 数据不高可用
写入点只有一个, 用技术的话说即 单点控制
如何保证数据高可用?
答 : 解决高可用要冗余, 如上图, 如果能把数据冗余到多个地方, 就能保证高可用, 一个地方的数据挂了, 另外的地方仍存有数据例如 mysql 主从集群, 以及磁盘的 RAID 都是这个原理
这里需要强调两点:
数据冗余往往会引发 一致性问题 , 例如 mysql 主从集群中的 读写延时 问题
数据冗余往往会 降低写入效率 , 因为同步数据需要消耗额外的资源
画外音: 更详细的, 可阅读 互联网架构, 如何保证高可用
可不可以多点写入?
答: 可以可以多个节点都实施写入, 例如 mysql 双主集群, 又或者多机房多活数据中心这里要强调的是, 多节点写入往往会引发 写写冲突 的一致性问题
画外音: 双主一致性, 可阅读 mysql 双主架构如何保证一致性
多点控制写入之后, 其实出现了多中心控制, 在数据不一致的时候, 往往需要有一个算法来协商如何处理不一致数据
例如, 存在 两个中心节点 时, 可以约定这样的算法来处理不一致:
以时间戳最小的数据为准, 即 先来先得
又例如, 存在 多个中心节点 时, 可以约定这样的算法来处理不一致:
投票, 以多数票的数据为准
什么是区块链?
答 :
区块是一块存储空间, 可以 存储数据
区块链不但像链表一样把区块串起来, 还有约定了一系列的方法管理这些数据, 所以它是 存储系统
区块链有很多节点, 每个节点都保存了全部的数据, 所以它是 高可用的
每一个中心节点都可以生成区块, 并写入数据, 所以每一个点都是中心节点, 或者说区块链是 去中心化的 , 要想控制整个系统, 必须控制一半以上的节点, 才能控制投票, 于是这个系统没有管理员
综上, 区块链实际上是一个没有管理员的, 去中心化的, 每个节点都拥有全部数据的分布式存储系统 只要你愿意, 你随时可以成为区块链中的一个节点, 并参与区块的生成与写入, 比特币就是基于这个分布式存储上的电子货币
由于节点很多, 很多数据需要同步, 这个系统的 存储容量其实不大 , 目前全球存储比特币的区块链也就 100 多 G
画外音: 额, 有朋友说他们公司的 mysql 数据库轻轻松松几百 G
因为节点很多, 数据需要保持一致, 这个系统的 写入效率也很低 , 存储比特币的区块链每 10 分钟才生成 1 个区块, 1 个区块只有 1M 的存储空间, 只够写入 2000 笔比特币交易的数据
画外音: 比特币全球交易, 每 10 分钟只能处理 2000 笔交易有朋友说他们公司自研的存储系统轻轻松松; 每秒处理交易 10W 笔
关于区块链, 本文只说了概念, 作为一个存储系统, 数据的生成, 写入, 管理, 数据一致性, 数据冲突处理方法, 数据完整性保证 很多细节未来再用通俗技术性文字和大家分享
希望这一分钟, 大家了解了区块链的本质
来源: http://www.tuicool.com/articles/u6BfeuR