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

前言

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

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

分布式

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

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

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

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

拜占庭将军

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

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

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

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

去中心化网络

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

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

分布式账本

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

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

共识机制

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

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

去中心化存储

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

推荐阅读

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

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

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

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

深入了解异地多活 - 掘金

02.K8S架构详解 - 掘金

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

相关推荐
逃逸线LOF6 分钟前
Spring的AOP简介
java·后端·spring
yume_sibai36 分钟前
02-Rust 所有权与借用深入解析(底层原理 + 借用检查器 + 生命周期 + 内部可变性)
开发语言·后端·rust
卷无止境39 分钟前
从脚本到程序:Windows平台上的Python打包全景图
后端·python
骇客野人41 分钟前
Springboot 的 配置文件 application.yml 和 bootrap.yml 的由来和作用
java·spring boot·后端
岁月宁静1 小时前
三、《从零手撸 Agent》 · system prompt 与核心参数:调好你的旋钮
后端·python·agent
bcbnb1 小时前
Flutter-Notebook代码混淆:Android与iOS平台安全配置
后端·ios
磐链科技1 小时前
区块链开发入门实战:用 Hardhat 与 Ethers.js 搭建你的第一个 DApp
开发语言·javascript·区块链
泡海椒1 小时前
SpringBoot 集成 JQuick-Curl:Spring 环境完整接入教程,第三方接口调用别再到处手写模板类
后端
落木萧萧8251 小时前
MyBatis 关联查询的四种写法,为什么最后都变回了手写 XML
java·数据库·后端
cui_hao_nan1 小时前
Spring AOP 自调用、代理与 private 方法引发的诡异 NPE
java·后端·spring·ai开发