区块链扩容:水平扩展 vs.垂直扩展

news2024/11/17 1:40:32

1. 引言

随着Rollups 的兴起,区块链扩容一直集中在模块化(modular)vs. 整体式(monolithic)之争。
如今,模块化与整体式这种一分为二的心理模型,已不适合于当前的扩容场景。本文,将展示:

  • 水平扩展
  • 与 垂直扩展

始终是区块链扩容的基础框架,并解释:

  • 采用水平扩展与垂直扩展如何带来更好的扩容解决方案。

2. 何为模块化 vs. 整体式?

何为模块化 vs. 整体式?:

  • 模块化链:是指将区块链的核心功能分为不同的层(layer)。
  • 整体式链:是指将所有核心功能集成到单个互连的层中。

可将“层”视为“机器”:

  • 整体式链:有运行所有任务的单个validator节点
  • 模块化链:有多个(2-3)个运行不同任务的全节点。
    在这里插入图片描述
    如,Rollup 通常有两类节点:
  • 1)rollup全节点:用于执行
  • 2)以太坊全节点:用于结算 + 数据可用性(DA,Data Availability)

validium 可能会利用三类节点:

  • 1)rollup全节点:用于执行
  • 2)以太坊全节点:用于结算
  • 3)DA全节点:用于 DA 的替代数据可用性

模块化将区块链的任务划分为至少两类全节点。这样,模块化链在构建每个区块时可利用多台机器的计算能力。

这是水平扩展的一种形式 。

模块化对于考虑区块链扩容很有用,因为:

  • 其具有水平可扩展性。

另一方面,大多数整体式阵营选择通过软件优化、实现并行虚拟机、数据pipelining、更快的网络协议和(最值得注意的是)更强大的硬件来扩容。从本质上讲,整体式链试图从单个全节点中挤出尽可能多的计算能力。

这是垂直扩展的一种形式 。

有批评认为,整体式链将导致中心化:

  • 若依靠增加单个节点的能力来扩展,则不可避免地会遇到底层硬件的物理限制,并被迫增加硬件要求以进一步扩展。

然而,这种批评是错误的,因为并非所有的整体式链都仅仅依赖于垂直扩展。
如:

  • Near 是一个基于分片网络架构的整体式 L1 区块链。这意味着Near全节点负责所有任务(即执行、结算和数据可用性), 但Near全节点只负责Near全局状态的一小部分。因此,Near 通过根据状态而不是任务来划分工作,来利用多台机器的力量(就像模块化链一样)。
    在这里插入图片描述
    由此可知,整体式链和模块化链所实现的扩容技术方面都不受限制。两者都可以水平和/或垂直扩展。

此外,模块化与整体式的争论始终植根于水平扩展与垂直扩展框架。从严格的技术角度来看,模块化偏向水平扩展,这是其设计所固有的,而整体式偏向于垂直扩展。

目前已成功推出了模块化链,额外的扩展优势不再在于使其“更加模块化”。 现在的焦点是:

  • 链如何利用水平扩展或垂直扩展技术。

采用水平扩展与垂直扩展心理模型,可轻松推理每条链在此过程中所做的权衡。

3. 水平扩展 vs. 垂直扩展

水平扩展 起源可追溯到 20 世纪 70 年代,当时分布式计算研究为水平扩展概念奠定了基础。如今,所有扩展技术都可以分为水平扩展和垂直扩展。

3.1 垂直扩展

垂直扩展会增加每个节点的硬件利用率或硬件要求。在区块链中,这通常是通过并行虚拟机(即多线程进程)等软件优化来完成的。

一个流行的例子是:

  • EVM vs. SVM
    • EVM 顺序执行交易,而 SVM 并行执行交易。
    • SVM 通过利用更多的 CPU 内核来实现并行执行交易,因此 SVM 每秒可比 EVM 处理更多的交易。注意:这种类型的垂直扩展是 Eclipse L2 背后的基础。

在权衡方面,垂直扩展受到可用硬件的限制,由于硬件需求的增加而趋于中心化,且与水平扩展相比,其可扩展性较差。
在这里插入图片描述

3.2 水平扩展

水平扩展通过将工作负载分散到多个节点上来增加系统可访问的机器数量。如前所述,模块化链本质上是将任务分配到多台机器上。然而,链通常可以通过分片实现更大程度的水平扩展 。
在这里插入图片描述
2023年11月,=nil; Foundation推出了一种名为 zkSharding的可证明分片架构,为=nil;(一种新的以太坊L2)的基础。 =nil; 设计的核心是:

  • 将其全局状态划分到多个分片上。
  • 每个分片均由 =nil; 的去中心化委员会运营。
  • validators:负责构建区块并管理跨分片交易。
  • 每个分片都会生成一个有效性证明,该证明会发送到主分片进行聚合,然后再发布到以太坊上验证。

=nil; 通过两种方式利用水平扩展的力量:

  • 1)=nil; 是一个模块化区块链,其利用以太坊的强大共识和数据可用性保证,从而将任务分布在多个全节点上。
  • 2)=nil; 是一个分片区块链,因此将部分状态分布在许多全节点上。

这两种技术都减少了任何单台机器需要承受的负载,并提高了网络的总体可扩展性。

那么,水平扩展的权衡有哪些呢?归结为两点:

  • 网络和共识的复杂性
  • 以及 机器或分片之间的异步通信。

4. 以太坊扩容终极游戏

无论是水平扩展,还是垂直扩展,均不限于模块化或整体式架构。这就是为什么水平扩展与垂直扩展框架提供了更多空间来探索新的解决方案,使模块化区块链更具可扩展性。
如:

  • 一种选择是垂直扩展模块化stack中都某层。一种流行的方法是实现并行虚拟机,从而扩展执行吞吐量。如上所述,Eclipse 正在利用 SVM 和其他rollups(如 Starknet)实现 BlockSTM 来启用并行化。

但是,垂直扩展总是受到单台机器的限制,无法打破该物理定律。

一种解决方案可能是选择通过分片进行水平扩展。

当前的模块化设计才刚刚开始触及水平扩展的全部潜力。通过分片:

  • 可利用任意数量机器的能力(而不是按任务分割 2-3 台机器)。

换句话说,许多机器可以并行运行相同类型的任务。这就是以太坊和 Celestia 希望分别通过 Danksharding 和数据分片实现的目标。但是,分片本质上并不局限于数据可用性层——也可像 =nil; L2那样,将DA层与执行层相结合。
在这里插入图片描述
若将通过模块化stack实现的水平扩展与分片提供的水平扩展相结合,将获得可用计算能力的大幅增加。

但不仅限于如此,还可以更好:

  • 区块链扩容的最终目标将合并水平扩展和垂直扩展, 从而产生具有并行虚拟机的分片区块链。
    在这里插入图片描述

=nil; Foundation,正有条不紊地努力实现这一最终状态设计。=nil; L2 通过利用模块化、水平可扩展架构 ( zkSharding ) 和垂直扩展validator实现(分片内并行化),采取了积极的扩容路线图。

=nil; 设计可在不牺牲状态、流动性或用户碎片化的情况下实现全局扩展。
在这里插入图片描述
在这里插入图片描述
其中zkSharding总体架构图为:
在这里插入图片描述

参考资料

[1] 2024年4月29日 =nil; Foundation官方博客 zkSharding for Ethereum
[2] 2024年4月29日 =nil; Foundation官方博客 Modular vs. Monolithic Is Dead: Why horizontal vs. vertical scaling is the better framework for Ethereum scalability
[3] Horizontal vs Vertical Scaling Debate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言回顾】字符函数、字符串函数,内存函数

前言1. 字符函数1.1 字符分类函数1.2 字符转换函数1.2.1 tolower(将大写字母转化为小写字母)1.2.2 toupper(将小写字母转化为大写字母) 2. 字符串函数2.1 求字符串长度函数 strlen2.2 字符串输入函数 gets()&fgets()2.2.1 get…

虚拟机网络实现桥接模式

虚拟机网络实现桥接模式 虚拟化软件:VMware 17 Linux:rocky8_9 主机:Win10 文章目录 虚拟机网络实现桥接模式1. 桥接模式介绍2. 查看Win本机的网络信息(以笔记本电脑以WiFi联网为例&#x…

vue快速入门(五十五)插槽基本用法

注释很详细&#xff0c;直接上代码 上一篇 新增内容 当传输内容只有一种时的基础写法 源码 App.vue <template><div id"app"><h1>被淡化的背景内容</h1><my-dialog><!-- 插槽内容:文字以及dom结构都可以传 --><span>你确…

【LLM 论文】背诵增强 LLM:Recitation-Augmented LM

论文&#xff1a;Recitation-Augmented Language Models ⭐⭐⭐ ICLR 2023, Google Research, arXiv:2210.01296 Code&#xff1a;github.com/Edward-Sun/RECITE 文章目录 论文速读 论文速读 论文的整体思路还是挺简单的&#xff0c;就是让 LLM 面对一个 question&#xff0c;…

蓝桥杯-路径之谜

题目描述 小明冒充X星球的骑士&#xff0c;进入了一个奇怪的城堡。城堡里面什么都没有&#xff0c;只有方形石头铺成的地面。 假设城堡的地面时n*n个方格。如下图所示。 按习俗&#xff0c;骑士要从西北角走到东南角。可以横向或者纵向移动&#xff0c;但是不能斜着走&#x…

详解SDRAM基本原理以及FPGA实现读写控制(一)

文章目录 一、SDRAM简介二、SDRAM存取结构以及原理2.1 BANK以及存储单元结构2.2 功能框图2.3 SDRAM速度等级以及容量计算 三、SDRAM操作命令3.1 禁止命令&#xff1a; 4b1xxx3.2 空操作命令&#xff1a;4b01113.3 激活命令&#xff1a;4b00113.4 读命令&#xff1a;4b01013.5 写…

使用docker-compose编排Lnmp(dockerfile) 完成Wordpress

目录 一、 Docker-Compose 1.1Docker-Compose介绍 1.2环境准备 1.2.1准备容器目录及相关文件 1.2.2关闭防火墙关闭防护 1.2.3下载centos:7镜像 1.3Docker-Compose 编排nginx 1.3.1切换工作目录 1.3.2编写 Dockerfile 文件 1.3.3修改nginx.conf配置文件 1.4Docker-Co…

GDPU Java 天码行空10

&#xff08;一&#xff09;实验目的 1、掌握JAVA中文件、IO类及其构造方法&#xff1b; 2、重点掌握文件类型所具有的文件操作方法&#xff1b; 3、重点掌握IO中类所具有的IO操作方法&#xff1b; 4、熟悉递归调用的思想及应用&#xff1b; 5、掌握IO中读写常用方法。 &…

鸿蒙UI复用

鸿蒙UI复用 简介BuilderBuilder的使用方式一Builder的使用方式二Builder的使用方式三 Component使用Component复用UI 简介 在页面开发过程中&#xff0c;会遇到有UI相似的结构&#xff0c;如果每个UI都单独声明一份&#xff0c;会产生大量冗余代码&#xff0c;不利于阅读。遇到…

CSS浮动(如果想知道CSS有关浮动的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在学习CSS排版的时候&#xff0c;浮动是我们必须要知道的知识点&#xff0c;浮动在设计之初是为了实现文字环绕效果的&#xff0c;但是后来被人们发现浮动在CSS排版中有着很好的实用价值&#xff0c;所以浮动便成为了CSS排版的利器之一。 ✨✨✨这里是秋刀鱼不…

论文辅助笔记:Tempo 之 model.py

0 导入库 import math from dataclasses import dataclass, asdictimport torch import torch.nn as nnfrom src.modules.transformer import Block from src.modules.prompt import Prompt from src.modules.utils import (FlattenHead,PoolingHead,RevIN, )1TEMPOConfig 1.…

LabVIEW鸡蛋品质智能分级系统

LabVIEW鸡蛋品质智能分级系统 随着现代农业技术的飞速发展&#xff0c;精确、高效的农产品质量控制已成为行业的重要需求。其中&#xff0c;鸡蛋作为日常膳食中不可或缺的重要组成部分&#xff0c;其品质直接关系到消费者的健康与满意度。本文设计并实现了一套基于LabVIEW的鸡…

docker私有仓库的registry

简介 Docker私有仓库的Registry是一个服务&#xff0c;主要用于存储、管理和分发Docker镜像。具体来说&#xff0c;Registry的功能包括&#xff1a; 存储镜像&#xff1a;Registry提供一个集中的地方来存储Docker镜像&#xff0c;包括镜像的层次结构和元数据。 版本控制&…

node应用部署运行案例

生产环境: 系统&#xff1a;linux centos 7.9 node版本&#xff1a;v16.14.0 npm版本:8.3.1 node应用程序结构 [rootRainYun-Q7c3pCXM wiki]# dir assets config.yml data LICENSE node_modules nohup.out output.log package.json server wiki.log [rootRainYun-Q7c…

使用MATLAB/Simulink点亮STM32开发板LED灯

使用MATLAB/Simulink点亮STM32开发板LED灯-笔记 一、STM32CubeMX新建工程二、Simulink 新建工程三、MDK导入生成的代码 一、STM32CubeMX新建工程 1. 打开 STM32CubeMX 软件&#xff0c;点击“新建工程”&#xff0c;选择中对应的型号 2. RCC 设置&#xff0c;选择 HSE(外部高…

单链表式并查集

如果用暴力算法的话&#xff0c;那么会直接超时&#xff0c;我们要学会用并查集去记录下一个空闲的位置 #include<bits/stdc.h> using namespace std;const int N 100005;int n; int fa[N]; int a[N];int find(int x) {if (fa[x] x) {return x;}fa[x] find(fa[x]);re…

ChatGPT DALL-E绘图,制作各种表情包,实现穿衣风格的自由切换

DALL-E绘图功能探索&#xff1a; 1、保持人物形象一致&#xff0c;适配更多的表情、动作 2、改变穿衣风格 3、小女孩的不同年龄段展示 4、不同社交平台的个性头像创作 如果不会写代码&#xff0c;可以问GPT。使用地址&#xff1a;我的GPT4 视频&#xff0c;B站会发&#…

Leetcode—422. 有效的单词方块【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—422. 有效的单词方块 实现代码 class Solution { public:bool validWordSquare(vector<string>& words) {int row words.size();for(int i 0; i < row; i) {// 当前这一行的列数int col words[i].length(…

网络基础-网络设备介绍

本系列文章主要介绍思科、华为、华三三大厂商的网络设备 网络设备 网络设备是指用于构建和管理计算机网络的各种硬件设备和设备组件。以下是常见的网络设备类型&#xff1a; 路由器&#xff08;Router&#xff09;&#xff1a;用于连接不同网络并在它们之间转发数据包的设备…

k8s调度原理以及自定义调度器

kube-scheduler 是 kubernetes 的核心组件之一&#xff0c;主要负责整个集群资源的调度功能&#xff0c;根据特定的调度算法和策略&#xff0c;将 Pod 调度到最优的工作节点上面去&#xff0c;从而更加合理、更加充分的利用集群的资源&#xff0c;这也是我们选择使用 kubernete…