从RPC到执行 - Solana的费用市场和交易管道的排队理论视角 - 第二部分

  • thogiti
  • 发布于 2024-12-27 18:26
  • 阅读 36

本文深入探讨了Solana的多阶段交易管道,并应用排队理论和控制理论进行优化。文章详细介绍了每个阶段的队列模型,如何通过动态费用底线来控制交易流量,以及保持系统稳定的条件。通过理论分析与实际应用的结合,提供了对Solana交易处理的深刻见解。

第2部分:多阶段 Solana 的交易供应链和控制理论优化

第1部分回顾与第2部分概述

第1部分 中,我们建立了适用于区块链费用市场的基础排队理论概念:

  • M/M/1 排队

    • 我们考察了到达过程为 Poisson,服务时间为指数分布的单服务器排队。
    • 关键收获:如果到达率 $\lambda$ 接近或超过服务率 $\mu$,等待时间 $W_q$ 会爆炸性增长。
  • 优先级调度

    • 引入一种“高费用”类别(类别1)可以减少这些交易的等待时间,而“低费用”(类别2)流量则会经历更多延迟。
    • 然而,如果总负载 $\lambda = \lambda_1 + \lambda_2$ 接近 $\mu$,即使是高费用流量也会受到影响。
  • 动态费用下限(接纳控制)

    • 通过提高费用下限 $f$,我们有效地限制 $\lambda_2$,保持 $\rho = \lambda/\mu$ 低于 1,从而避免队列“爆炸”。
  • 多服务器 M/M/k 模型

    • 增加更多并行服务器,整体容量增加到 $k \times \mu$。
    • 优先队列仍然有助于高费用交易,但无论有多少服务器,如果 $\lambda$ 变得过大,系统最终都会饱和。

在第2部分中,我们将这些思想应用于 Solana 的多阶段交易管道,有时将其描述为交易处理步骤的“供应链”:

  • 我们将每个主要阶段(入口、签名验证、调度、执行)映射到一个队列。
  • 我们将探讨 串行队列(Jackson 网络)概念,并展示只有当 $\lambda$ 保持在所有阶段的服务能力以下时,整体系统才能保持稳定。
  • 我们将引入控制理论视角,Solana 可以根据实时队列长度提高或降低全球费用下限,确保高费用流量始终有一个可靠的“快速通道”。

Solana 的多阶段交易管道作为串行队列

sequenceDiagram
    participant RPC
    participant 网络接口卡
    participant 验证者
    participant 调度器
    participant 执行线程

    RPC->>网络接口卡: 发送交易
    网络接口卡->>验证者: 接收交易
    验证者->>验证者: 解包数据包
    验证者->>验证者: 验证签名
    验证者->>调度器: 添加到队列
    调度器->>执行线程: 执行交易

    Note over 验证者: 签名验证阶段
    Note over 调度器: 等待阶段

图1. Solana 的交易管道

Solana 的交易流程涉及多个串行阶段:

  1. RPC
    交易来自于 RPC 节点,该节点将交易发送给验证者(领导者)。这可以看作是进入网络的逻辑“入口”点。

  2. 网络接口卡 (NIC)
    NIC 是数据包从网络到达的地方。从排队的角度来看,我们可以将其视为系统的初始“到达”。

  3. 验证者(解包 + 签名验证)

    • 解包:验证者将交易从其数据包格式中解包。
    • 签名验证:验证者检查所有必要的签名是否有效(“签名验证阶段”)。
      在我们的排队模型中,签名验证可以看作是一个服务“阶段”(即 $S_2$)。交易从 NIC(阶段 $S_1$,虽然有时简化为此)通过到签名验证(阶段 $S_2$)。
  4. 调度器(等待阶段)
    一旦签名被验证,交易就会进入调度器队列,在这里可以应用本地费用市场逻辑(即优先级规则、动态费用下限等)。这是我们排队模型中的“等待阶段”,通常标记为 $S_3$。

  5. 执行线程
    调度器从其队列中提取交易并将其转发到执行线程(阶段 $S_4$)。这里是交易被实际处理和链上状态发生变化的地方。

在排队的术语中,每个阶段 $S_i$ 被建模为一个 M/M/1 排队,服务率为 $\mu_i$。交易以总的到达率 $\lambda$ 到达,必须通过 $S_1 \to S_2 \to S_3 \to S_4$。

将图示阶段映射到串行队列

在我们的串行 M/M/1 框架中:

  • 阶段 $S_1$(入口/NIC):
    $\mu_1$ 是网络入口 + 初始接纳的有效吞吐量。
    如果到达了大量交易($\lambda$ 较高),$S_1$ 在交易甚至尚未到达签名验证之前可能会成为瓶颈。

  • 阶段 $S_2$(签名验证):
    $\mu_2$ 代表解包 + 签名验证的能力。在这一阶段的庞大积压意味着即使是高费用交易也会等待,除非在此阶段有优先调度。

  • 阶段 $S_3$(调度器队列):
    $\mu_3$ 是从等待队列中提取交易并准备执行的能力。在高负载下,调度器可以基于费用对交易进行重排序(本地费用市场逻辑)。

  • 阶段 $S_4$(执行线程):
    $\mu_4$ 是实际执行吞吐量。如果执行环境比早期阶段 slower,则会在这里形成队列,延迟最终的交易确认。

通过将 Solana 的交易“供应链”步骤视为序列图和串行队列结构,我们可以欣赏每个真实步骤如何与排队模型阶段对齐。这种与排队理论的连接澄清了:

  • 何处可能发生拥堵(例如,签名验证或调度器可能成为瓶颈)。
  • 为什么每个阶段的优先级或费用下限很重要(以确保高费用交易在调度器和早期队列中始终优先于低费用交易)。
  • 如何通过动态负载剥离(提高费用下限)有效减少 $\lambda_2$ 在最早阶段,防止队列失控。

串行系统中的稳定条件

为了使串行队列保持稳定,到达率 $\lambda$ 必须小于每个阶段的有效容量:

$$\lambda < \min(\mu_1,\;\mu_2,\;\mu_3,\;\mu_4).$$

如果某一阶段有 $\mu_i < \lambda$,该阶段将成为瓶颈并导致队列无限增长。

每个阶段中的优先级类别

与第1部分一样,我们维持两类交易——类别 1(高费用,$\lambda_1$)和类别 2(低费用,$\lambda_2$)。每个阶段 $S_i$ 的每个队列实施非抢占式优先级政策,确保高费用流量在阶段空闲或任务切换时总是优先处理。然而,如果 $\lambda$ 接近或高于所有 $i$ 的 $\mu_i$,拥堵可能会压倒即使是高费用的交易。


串行系统中的动态费用下限

基于反馈的接纳控制

本地费用市场不仅可以被动排队高费用流量——它还可以拒绝(或大幅延迟)支付低于某个费用下限 $f$ 的交易。通过动态调整 $f$,Solana 可以有效控制 $\lambda_2$。

实现这一点的一种简单方法是基于 阈值控制

  1. 追踪所有阶段的队列总长度:

    $$Q{\text{total}}(t) \;=\;\; \sum{i=1}^{4} Q_i(t).$$

  2. 定义两个阈值:

    • 高水位线 $\Theta$:如果 $Q_{\text{total}}(t)$ 超过 $\Theta$,提高 $f(t)$。
    • 低水位线 $\theta$:如果 $Q_{\text{total}}(t)$ 在一段时间内低于 $\theta$,降低 $f(t)$。

这种方法提供了反压力:当队列变得过长时,低费用到达($\lambda_2$)将被有效阻塞,确保 $\lambda$(总接纳负载)保持在每个 $\mu_i$ 之下。

控制理论 / MDP 公式化

对于更严格的方法,可以将每个阶段的队列长度 $Q_i(t)$ 和费用下限 $f(t)$ 模型作为 马尔可夫决策过程(MDP)。状态为

$$x(t) \;=\; \bigl(Q_1(t),\,Q_2(t),\,Q_3(t),\,Q_4(t),\, f(t)\bigr),$$

行动 $a(t)$ 则是提高或降低 $f(t)$ 的幅度。然后定义一个目标函数,平衡:

  • 延迟(适用于被接纳的类别 1 和类别 2 交易),

  • 丢弃率(被拒绝的低费用交易数量),

  • 稳定性(确保队列不会失控)。

  • 行动

    $$a(t) \;\in\; {f\;\pm\;\Delta_f, \; \text{无变动}}.$$

  • 动态性

    $$Q_i(t+1) \;=\; Q_i(t) \;+\; \text{接纳的到达} \;-\; \text{在 } S_i 的服务完成.$$

  • 成本函数

    $$J(x,a) \;=\; \alpha\, \bigl(\text{平均延迟}\bigr) \;+\; \beta\, \bigl(\text{丢弃率}\bigr),$$

    其中 $\alpha,\beta>0$ 为用户定义的权重。

准确解决这样的 MDP 可能计算量很大,但 阈值PID 类 控制器在实践中往往有效。


串行优先级的建模与仿真

近似分析

串行优先级队列的确切公式可能非常复杂。然而,Jackson 网络理论 在某些假设下提供近似或乘积形式解。对于每个队列 $S_i$:

  1. 将到达视为近似 Poisson($\lambda$)(或每个类别分别为 $\lambda_1$,$\lambda_2$)。

  2. 使用 M/M/1 排队与优先级计算来估计平均等待时间 $W{q,i,1}$ 和 $W{q,i,2}$。

  3. 将它们在各个阶段加总:

    $$W{q,1} \approx \sum{i=1}^4 W{q,i,1}, \quad W{q,2} \approx \sum{i=1}^4 W{q,i,2}.$$

  4. 当 $\lambda_2$ 较大时,动态费用下限可以减少 $\lambda_2$ 以维持 $\lambda_1 + \lambda_2^{\text{eff}} < \min_i(\mu_i)$。

离散事件仿真

鉴于精确解的复杂性,Solana 开发人员可以构建模拟器:

  • 将每个阶段表示为一个队列,允许在离散时间步中进行到达和离开(或连续事件模拟)。
  • 实现优先级逻辑:类别 1 始终优先处理。
  • 引入接纳政策:如果费用 < $f$,交易将被丢弃或延迟极长时间。
  • 观察平均延迟、队列长度以及当你调整到达率 $\lambda_1,\lambda_2$ 时被丢弃的交易数量。

将理论付诸实践

让我们将所有内容整合在一起。

  1. 测量 $\mu_i$:基准每个阶段的最大吞吐量(NIC、签名验证、调度、执行)。

  2. 估算 $\lambda_1,\lambda_2$:识别通常分别抵达的每个“费用类别”的交易数量。

  3. 实施优先级:在每个阶段的队列中实施非抢占式优先级或排头优先级。

  4. 采用动态费用下限

    $$ f(t+1) \;=\; \begin{cases} f(t) + \Delta_f, & \text{如果 } \sum_i Q_i(t) > \Theta,\ f(t) - \Delta_f, & \text{如果 } \sum_i Q_i(t) < \theta,\ f(t), & \text{否则}. \end{cases} $$

  5. 监控与调节

    • 跟踪你提高或降低 $f$ 的频率。
    • 使用负载测试或实时数据来确认高费用流量是否经历短暂等待。

统一的排队理论视角

第1部分 中,我们明确了确保 $\lambda < \mu$(或 $\rho < 1$)的平衡对保持队列有限至关重要,并且我们看到了优先级调度加上费用下限如何 保护 高费用交易免受低费用交易洪流的影响。在第2部分中,我们将这一逻辑扩展到多个串行阶段——这是对 Solana 交易管道的现实模型。

  • 串行队列:每个管道组件可以被视为一个独立的队列,稳定性要求 $\lambda < \min_i(\mu_i)$ 。
  • 动态费用下限:基于反馈或控制理论的方法可以保持 $\lambda_2$ 在控制之中,确保 $\rho < 1$ 。
  • 实践实施:实际的 Solana 验证者可以整合这些思想,结合本地费用市场与阈值控制,严格观察队列长度。
  • 原文链接: github.com/thogiti/thogi...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
thogiti
thogiti
https://thogiti.github.io/