2019/7/3 Wed
之前也读过这本书,但是没有完整地整理过笔记,所以这次重读,打算理清楚基本概念和原理。
第1章 区块链思想的诞生
-
Bitcoin: A Peer-to-Peer Electronic Cash System
中本聪设计的比特币的白皮书
第2章 核心技术概览。
-
基本原理
- 交易(transaction):一次对账本的操作,导致账本状态的一次改变
- 区块(block):记录一段时间内发生的所有交易和状态结果,是对当前账本状态的一次公式
- 链(chain):由区块按照发生顺序串联而成,是整个账本装药变化的日志记录
-
工作量证明(Proof of Work)
基于算力寻找nonce串的共识机制
- 挖矿:通过调节对哈希结果的限制,比特币网络平均约10分钟产生一个合法区块。算出区块的节点将得到区块中所有交易的管理费和协议固定发放的奖励费(每四年减半),这恶计算新区块的过程称为挖矿。
-
区块链技术的三种典型演化场景
第3章 典型应用场景
-
- 金融服务
- 征信和权属管理
- 资源共享
- 贸易管理
- 物联网
第4章 分布式系统核心问题
-
一致性问题:是指对于发呢不是系统中多个服务节点,给定一系列操作,在约定协议的保障下,试图使它们对处理结果达成“某种程度”的认同。
分布式系统达成一致的过程,应该满足:
- 可终止性(termination):一致的结果在有限时间内能完成;
- 约同性(agreement):不同节点最终完成决策的结果是相同的;
- 合法性(validity):决策的结果必须是某个节点提出的提案。
强一致性:
- 顺序一致性:保证所有进程看到的全局执行顺序一致,并且每个进程看自身的执行顺序跟实际发生顺序一致
- 线性一致性:在顺序一致性的前提下加强了进程间的操作排序,形成唯一的全局顺序(系统等价于是顺序执行,所有进程看到的所有操作的序列顺序都一致,并且跟实际繁盛顺序一致)
最终一致性
弱一致性
-
共识算法
【注】一致性描述的是结果状态,共识则是一种手段。实践中,要保障系统满足不同程度的一致性,核心过程往往需要通过共识算法来达成。
-
拜占庭错误(Byzantine Fault):伪造信息恶意响应的情况为拜占庭错误,对应节点为拜占庭节点。(解决:Byzantine Fault Tolerance, BFT)
非拜占庭错误(Non-byzantine Fault):出现故障但不会伪造信息的情况为非拜占庭错误。(解决:Crash Fault Tolerance, CFT)
对于要能容忍拜占庭错误的情况,一般包括 PBFT (Practical Byzantine Fault Tolerance) 为代表的确定性系列算法、 PoW 为代表的概率算法等。
-
FLP不可能原理:在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法( No completely asynchronous consensus protocol can tolerate even a single unannounced process death)。
-
CAP原理:分布式计算系统不可能同时确保以下三个特性:一致性( Consistency)、可 用性(Availability)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。
- 一致性:任何操作应该都是原子的,发生在后面的事件能看到前面事件发生导致的结果,注意这里指的是强一致性;
- 可用性:在有限时间内,任何非失败节点都能应答请求;
- 分区容忍性:网络可能发生分区,即节点之间的通信不可保障。
-
ACID 原则指的是: Atomicity (原子性)、 Consistency (一致性)、 Isolation (隔离性)、 Durability (持久性)。
- Atomicity:每次操作是原子的,要么成功,要么不执行;
- Consistency:数据库的状态是一致的,无中间状态;
- Isolation:各种操作彼此之间互相不影响;
- Durability:状态的改变是持久的,不会失效。
【注】BASE (Basic Availability, Soft-state, Eventual Consistency) 原则,牺牲掉对一致性的约束(但实现最终一致性,来换取一定的可用性)
-
Paxos算法
三种逻辑角色:Proposer(提案者)、Acceptor(接受者)、Learner(学习者)
两种约束:Safety约束、Liveness约束
两个阶段:准备(Prepare)阶段、提交(Commit)阶段
-
Raft算法
三种角色:Leader(领导者)、Candidate(候选领导者)、Follower(跟随者)
两个阶段:Leader选举、同步日志
-
拜占庭问题
PBFT算法