认识区块链(五):区块链的底层实现之分布式

前言

在认识区块链系列的前几篇中,我们已经介绍了区块链的作用、发展、解决了什么问题、以及底层实现之密码学等等,这篇博客主要围绕的是区块链的另一个底层技术--分布式。

分布式技术是区块链的核心之一,正是因为区块链分布式的多结点,才实现了去中心化、安全可靠等特性。

分布式

在传统的中心化系统中,分布式系统的控制权通常以一个结点或者几个结点掌控(Leader或者主),这种中心化架构容易称为攻击的目标,并且存在故障的风险(Leader挂掉了选出新的主也需要时间)。

而区块链的分布式技术则能够有效解决这个问题。因为区块链是分布式记账系统,并且每个结点之间的地位是等同的,具有更好的容错性,并且数据难以篡改,这是传统分布式系统无法媲美的地方。

关于传统的分布式系统特性,可以在笔者的这篇博客中你真的理解分布式理论吗? - 掘金窥见一斑,这里就不再赘述。

那么,区块链是如何实现分布式的呢?

拜占庭将军

传统的分布式系统在设计时,只会考虑系统中存在的故障,比如结点宕机、网络故障等等,但不存在恶意攻击情况。所以采用的都是非拜占庭的共识机制(Raft)。

"拜占庭将军"是一个解决分布式一致性问题的虚拟模型,拜占庭是罗马的首都,因为地域宽广,将军需要通过信使传递消息,达成一致的决定。但由于将军中可能存在叛徒,这些叛变的将军可能会将错误的信息发出去,以干扰大家的决策。拜占庭问题

这个故事映射到计算机中,将军就成了计算机,而信使则是网络通信系统。系统中的成员计算机可能出错二发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得最终得出的策略出错。

区块链在分布式设计上采用了拜占庭容错机制,在完全开放的环境下,也能够实现数据的一致性和安全性。

去中心化网络

区块链是建立在去中心化网络之上的。在这种网络中,不存在单一的中心节点,而是由众多的节点共同维护和管理整个系统,每个节点都有完整的数据副本,并且可以参与到网络的各项决策和操作中去。

比如比特币的网络就是一个典型的去中心化的网络,每个人都可以成为网络中的一个结点,参与到整个区块链的决策中。

分布式账本

区块链使用分布式账本来记录和存储所有的交易细节及具体数据,这个账本是由整个系统中的所有节点进行维护的,每个节点都会有一个完整的数据副本,这就使得想要篡改账本十分困难,每台机器都可以验证、访问这些账本中的数据。

以以太坊为例,每一个以太坊中的机器都有一个完整的占本。

共识机制

共识机制解决了分布式环境下数据一致性的问题,它确保网络中的节点就账本的状态达成一致意见。常见的共识机制包括工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)和权威共识等。共识机制的目标是确保网络的安全性、防止双重支付和保持账本的一致性。

例如比特币中为了减慢生成区块的速度,大约十分钟生成一个新的区块,就引入了工作量证明机制,矿工需要经过繁琐的运算来计算出具体的工作量,从而减慢了生成区块的速度。

去中心化存储

去中心化存储其实本质上是一种冗余的思想,通过将数据存多份(可能是哈希、切片、随机等等方式),来保证某些节点被攻击、或者发生故障的情况下,依旧可以正常提供服务。

推荐阅读

当说到云原生时,我们究竟在谈论什么? - 掘金

不太熟悉Git? 不妨看看这篇文章 - 掘金

一文搞定常见分布式事务实现 - 掘金

你真的理解分布式理论吗? - 掘金

深入了解异地多活 - 掘金

02.K8S架构详解 - 掘金

01.你为什么需要学习K8S - 掘金

相关推荐
上天_去_做颗惺星 EVE_BLUE13 分钟前
Go 语言入门实战指南
开发语言·后端·golang
咚为31 分钟前
深入浅出 Rust RefCell:打破静态检查的“紧箍咒”
开发语言·后端·rust
Jerry.张蒙33 分钟前
大语言模型(LLM)的核心逻辑理解
大数据·人工智能·学习·语言模型·自然语言处理·区块链
Stack Piston1 小时前
Spring实践@Cacheable坑
java·后端·spring
无籽西瓜a1 小时前
【西瓜带你学设计模式 | 第十一期 - 模板方法模式】模板方法模式 —— 流程骨架与钩子实现、优缺点与适用场景
java·后端·设计模式·软件工程·模板方法模式
牛奔1 小时前
g:Go 版本管理器安装与使用指南
开发语言·后端·golang
chenglin0161 小时前
Semantic Kernel 内核详解
后端·python·flask
Joy T1 小时前
【Web3】NFT 元数据去中心化存储与智能合约集成实战
开发语言·web3·去中心化·区块链·php·智能合约·hardhat
青柠代码录3 小时前
【SpringCloud】Nacos 组件:服务注册与发现
后端
2401_8955213411 小时前
SpringBoot Maven快速上手
spring boot·后端·maven