一: 拜占庭协定
拜占庭的故事大概是这么说的: 拜占庭帝国拥有巨大的财富, 周围 10 个邻邦垂诞已久, 但拜占庭高墙耸立, 固若金汤, 没有一个单独的邻邦能够成功入侵. 任何单个邻邦入侵的都会失败, 同时也有可能自身被其他 9 个邻邦入侵. 拜占庭帝国防御能力如此之强, 至少要有十个邻邦中的一半以上同时进攻, 才有可能攻破. 然而, 如果其中的一个或者几个邻邦本身答应好一起进攻, 但实际过程出现背叛, 那么入侵者可能都会被歼灭. 于是每一方都小心行事, 不敢轻易相信邻国. 这就是拜占庭将军问题.
在这个分布式网络里: 每个将军都有一份实时与其他将军同步的消息账本. 账本里有每个将军的签名都是可以验证身份的. 如果有哪些消息不一致, 可以知道消息不一致的是哪些将军. 尽管有消息不一致的, 只要超过半数同意进攻, 少数服从多数, 共识达成.
由此, 在一个分布式的系统中, 尽管有坏人, 坏人可以做任意事情(不受 protocol 限制), 比如不响应, 发送错误信息, 对不同节点发送不同决定, 不同错误节点联合起来干坏事等等. 但是, 只要大多数人是好人, 就完全有可能去中心化地实现共识.
二: 非对称加密技术
在上述拜占庭协定中, 如果 10 个将军中的几个同时发起消息, 势必会造成系统的混乱, 造成各说各的攻击时间方案, 行动难以一致. 谁都可以发起进攻的信息, 但由谁来发出呢? 其实这只要加入一个成本就可以了, 即: 一段时间内只有一个节点可以传播信息. 当某个节点发出统一进攻的消息后, 各个节点收到发起者的消息必须签名盖章, 确认各自的身份.
在如今看来, 非对称加密技术完全可以解决这个签名问题. 非对称加密算法的加密和解密使用不同的两个密钥. 这两个密钥就是我们经常听到的 "公钥" 和 "私钥". 公钥和私钥一般成对出现,
如果消息使用公钥加密, 那么需要该公钥对应的私钥才能解密; 同样, 如果消息使用私钥加密, 那么需要该私钥对应的公钥才能解密.
三: 容错问题
我们假设在此网络中, 消息可能会丢失, 损坏, 延迟, 重复发送, 并且接受的顺序与发送的顺序不一致. 此外, 节点的行为可以是任意的: 可以随时加入, 退出网络, 可以丢弃消息, 伪造消息, 停止工作等, 还可能发生各种人为或非人为的故障. 我们的算法对由共识节点组成的共识系统, 提供的容错能力, 这种容错能力同时包含安全性和可用性, 并适用于任何网络环境.
四: Paxos 算法(一致性算法)
Paxos 算法解决的问题是一个分布式系统如何就某个值 (决议) 达成一致. 一个典型的场景是, 在一个分布式数据库系统中, 如果各节点的初始状态一致, 每个节点都执行相同的操作序列, 那么他们最后能得到一个一致的状态. 为保证每个节点执行相同的命令序列, 需要在每一条指令上执行一个 "一致性算法" 以保证每个节点看到的指令一致. 一个通用的一致性算法可以应用在许多场景中, 是分布式计算中的重要问题.
节点通信存在两种模型: 共享内存和消息传递. Paxos 算法就是一种基于消息传递模型的一致性算法.
五: 共识机制
区块链共识算法主要是工作量证明和权益证明. 拿比特币来说, 其实从技术角度来看可以把 PoW 看做重复使用的 Hashcash, 生成工作量证明在概率上来说是一个随机的过程. 开采新的机密货币, 生成区块时, 必须得到所有参与者的同意, 那矿工必须得到区块中所有数据的 PoW 工作证明. 与此同时矿工还要时时观察调整这项工作的难度, 因为对网络要求是平均每 10 分钟生成一个区块.
六: 分布式存储
分布式存储是一种数据存储技术, 通过网络使用每台机器上的磁盘空间, 并将这些分散的存储资源构成一个虚拟的存储设备, 数据分散的存储在网络中的各个角落. 所以, 分布式存储技术并不是每台电脑都存放完整的数据, 而是把数据切割后存放在不同的电脑里.
注: 本文欢迎大家转发! 本文内容来源于互联网以及教授个人观点, 如果你有不同观点, 欢迎与教授一起交流探讨!
来源: http://www.jianshu.com/p/00d3800b226c