什么是区块链?
你可能听说过区块链被描述为“数字货币”或“互联网的未来”。这些解释虽然令人兴奋,但往往完全没有抓住重点。
从根本上讲,区块链是一个分布式系统:一组计算机网络,它们必须在不互相信任的情况下就共享数据达成一致。
本课程不讨论炒作,而是从基本原理讲解区块链:它解决的分布式系统问题、解决方法以及权衡的重要性。
分布式系统的核心挑战
大多数人认为,从一台计算机扩展到多台计算机只是“更多相同的事情”。这就像认为协调一个人和协调分布在不同时区、可能并不总是能联系上的一千人是一样的。
当你在单台计算机上编写代码时,你生活在一个可预测的宇宙中:
- 操作要么立即成功,要么立即失败。
- 数据在读取之间不会神秘地改变。
- 时间始终向前推进。
- 当你保存某些内容时,它确实被保存了。
银行转账的例子
让我们以一个简单的银行系统为例。在这种情况下,将 100 美元从 Alice 转给 Bob 是非常容易的:
pythondef transfer(from_account, to_account, amount): if from_account.balance >= amount: from_account.balance -= amount to_account.balance += amount return "Transfer successful" return "Insufficient funds"
这在单机环境下运行得非常完美……直到你需要扩展。
扩展的噩梦
当你的银行业务增长到单台计算机无法处理的程度时,你必须将账户分布到不同的服务器上。
- 服务器 A:持有 Alice 的账户
- 服务器 B:持有 Bob 的账户
现在,Alice 想要向 Bob 转账 100 美元。这个简单的操作变成了一个跨网络的协议:
- 服务器 A 检查 Alice 的余额。
- 服务器 A 扣除 100 美元。
- 服务器 A 通知服务器 B 增加 100 美元。
可能出错的地方:
- 网络分区:服务器 A 扣款了,但在通知服务器 B 之前网络断了。钱“消失”了。
- 服务器崩溃:服务器 B 收到了消息但在写入硬盘前崩溃了。
- 竞争条件:Alice 同时向 Bob 和 Charlie 发起转账,利用网络延迟实现“双重支付”。
这就是分布式系统之所以困难的原因:你必须在不可靠的网络上构建可靠的系统。