摘要
专用 Sui gRPC 节点为您的团队提供隔离的全节点环境,用于高吞吐的 Sui 数据访问。您不必共享限速的公共或多租户端点,而是运行一个为索引器、后端服务和订阅消费者量身定制的节点。gRPC API 使用基于 HTTP/2 的 Protocol Buffers,使检查点、交易和事件流的效率高于轮询 JSON-RPC。当您需要稳定的吞吐量来执行回填、支持多个并发流消费者,或进行交易提交和模拟而无需担心嘈杂的邻居时,专用容量会很有帮助。您仍然拥有运维层面:同步延迟、磁盘增长、升级和监控。Sui gRPC 接口包括 LedgerService、StateService、TransactionExecutionService 和 SubscriptionService。SubscribeCheckpoints、SubscribeTransactions 和 SubscribeEvents 等流式工作流是低延迟索引的核心;ExecuteTransaction 和 SimulateTransaction 支持写入和模拟路径。专用节点不是受管的魔法盒子。在生产之前,必须规划状态增长、快照恢复、TLS、负载测试和故障转移。本指南涵盖容量规划、隔离、重放、监控和全节点生命周期决策,不涉及供应商排名或虚构的性能声明。
关键要点
- 专用 gRPC 容量适用于需要稳定的检查点、交易和事件流吞吐量的后端。
- 流式消费者必须处理重连、背压和检查点重放;订阅不是一劳永逸的。
- 您需要负责节点生命周期:存储、升级、修剪、监控和故障转移。
- 在选择专用 Sui gRPC 计划之前,评估隔离、数据保留、TLS/身份验证和运维工具。
专用 Sui gRPC 节点的用途
专用 Sui gRPC 节点是单租户 Sui 全节点,提供 Sui gRPC API(而非或同时提供传统的 JSON-RPC 接口)。它们专为需要可预测容量的后端服务而设计,用于检查点摄取、交易流传输、事件处理以及交易执行工作负载。
专用节点为您提供隔离的状态同步和存储占用,因此您的索引器或应用程序不会与其他租户争抢 CPU、内存、磁盘 I/O 或网络余量。这对于高频消费者、并行回填以及需要稳定延迟且不受公共端点超时影响的团队最为重要。
- 摄取每个检查点和交易的高吞吐索引器
- 订阅 Sui 事件并分发到下游系统的事件管道
- 模拟和执行大量交易的交易机器人、钱包和后端
- 需要在一个地方完成全状态查询和流式传输的分析和数据服务
Sui gRPC 服务接口与流式原语
Sui 全节点暴露的 gRPC 服务对应核心节点功能。确切的包名和消息结构取决于您生成客户端所用的 Sui proto 版本,但各服务的角色足够稳定,可以围绕它们进行规划。
生成的客户端可能会用语言特定的名称或更高级的订阅构建器封装这些方法。请根据节点运营商提供的 proto 文件验证工作流。不要从 REST 或 WebSocket JSON-RPC 示例中假设方法签名。
- LedgerService:读取检查点、交易和对象数据,用于回填和验证
- StateService:查询对象状态和余额,用于账户/状态查找
- TransactionExecutionService:使用 ExecuteTransaction 进行提交,使用 SimulateTransaction 在广播前进行试运行验证
- SubscriptionService:使用 SubscribeCheckpoints、SubscribeTransactions 和 SubscribeEvents 实现实时服务器流式消费者
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 摄取已最终确定的检查点 | 使用 SubscribeCheckpoints 的 SubscriptionService | 服务器流式传输;持久化检查点序列,并从最后处理的检查点恢复。 |
| 监控交易提交 | SubscribeTransactions | 交易量可能很高;如果服务器端过滤不受支持,请规划客户端过滤。 |
| 跟踪事件日志 | SubscribeEvents | 谨慎使用过滤器;需要背压和幂等接收端。 |
| 提交或模拟执行 | TransactionExecutionService.ExecuteTransaction 或 SimulateTransaction | 先模拟以捕获错误;提交时明确控制 gas 和 nonce。 |
容量规划与隔离
专用容量不是一个单一的数字。必须根据实际工作负载来建模:并发流数量、平均和峰值检查点大小、每个消费者的每秒交易量以及回填并发度。一个对一个轮询后端来说没问题的节点,在面对五个并行的检查点流时可能会不堪重负。
- 测量数小时内的持续流吞吐量,而不仅仅是短时间的突发流量
- 规划峰值检查点和事件量,而不是平均值
- 考虑磁盘写入放大以及快照/压缩操作
- 如果可能,将读密集型的分析与写密集型的执行分离
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 订阅并发 | 最大同时 SubscribeCheckpoints/Transactions/Events 消费者数量 | 每个流都会占用缓冲区和连接状态;过多流可能导致同步性能下降或延迟增加。 |
| 回填速率 | 重放历史检查点的速度 | 回填会与实时流争抢 I/O 和 CPU。 |
| 交易执行 | 并发调用的 SimulateTransaction 和 ExecuteTransaction | 执行和模拟会推高 CPU 和内存;嘈杂的邻居可能导致超时。 |
| 存储增长 | 检查点和对象数据库的增长以及修剪间隔 | 磁盘写满是常见的故障原因;数据保留和修剪是运维决策。 |
流式消费者:背压、重放与恢复
SubscribeCheckpoints、SubscribeTransactions 和 SubscribeEvents 等 gRPC 服务器流式方法通过一个逻辑流传递响应序列。客户端必须施加背压,否则会积累无界队列并导致处理停滞。
重放的考虑因素与实时流不同。专用节点可能允许更快的回填,但您仍应对重放作业进行速率限制,以免饿死实时消费者。在低流量时段安排大型回填,并在重放期间监控同步延迟。
- 在客户端强制最大队列深度;当下游接收端落后时阻塞或舍弃负载
- 为每个流持久化一个持久的游标,例如最后的检查点序列号或事件 ID,并在重连后从该游标恢复
- 将传递视为至少一次;使写入幂等,并基于稳定的键去重
- 断开连接时,以退避方式重连,并从持久化的游标恢复,切勿从当前链尖端恢复
- 使用单独的线程或异步任务处理流读取和下游写入,以避免死锁
全节点生命周期与运维职责
专用 Sui gRPC 节点仍然是一个 Sui 全节点。无论您是自行管理还是购买托管计划,都必须有人负责状态同步、升级、存储、修剪和恢复。在生产环境中依赖该端点之前,请明确每项任务的负责人。
- 跟踪 Sui 节点发布说明;升级可能涉及 fullnode.yaml 变更、迁移步骤或 gRPC API 变更
- 规划状态增长;如果无法无限期保留完整的检查点历史,请配置修剪
- 在新启动或重大回退后,使用快照恢复来加速追赶
- 锁定指标端口和管理界面;通过 TLS 终止和令牌认证暴露 gRPC
- 将主网和测试网配置分开;测试网水龙头是 https://faucet.sui.io,但请验证当前政策和限制
- 有关 OnFinality 网络的详细信息,请参阅 /networks/sui 上的 Sui 网络页面和 /rpc-assistant/sui-testnet-rpc 上的测试网指南
身份验证、TLS 与连接测试
生产 gRPC 端点应要求 TLS 和 Bearer 令牌或等效凭证。切勿在公共接口上放置无认证的原始 gRPC。在编写代码之前,使用 grpcurl 对专用端点进行检查,以查看可用的服务。
使用 grpcurl 的 list 和 describe 命令检查可用服务,包括 LedgerService、StateService、TransactionExecutionService 和 SubscriptionService。完整的 gRPC 服务名称可能包含包前缀;请使用生成客户端中的路径。
监控与故障转移
没有可观测性,您无法运维专用 gRPC 节点。至少需要监控检查点同步延迟、磁盘使用量、内存压力、流连接波动和 gRPC 错误率。设置在消费者超时之前唤醒人工的警报。
- 从 Sui 节点导出 Prometheus 指标,并从您的监控栈中抓取
- 对同步停滞、磁盘超过阈值、高连接波动或反复出现 UNAVAILABLE / DEADLINE_EXCEEDED 错误发出警报
- 通过配置辅助端点或区域来设计故障转移;将流游标保存在外部存储中,以实现无缝故障转移
- 在生产环境之外测试故障转移;不要在客户端配置中硬编码一个端点
- 如果您使用 OnFinality 托管的 gRPC,请确认监控、故障转移和通知选项;参见 /rpc-assistant/sui-rpc-providers 和 /networks/sui
专用 Sui gRPC 节点的决策框架
使用以下检查项评估专用节点,而无需依赖供应商排名或未经证实的性能声明。正确的选择取决于工作负载的流式特征、运维成熟度和数据保留需求。
不要在没有针对自身工作负载进行测试的情况下接受延迟、正常运行时间或 RPS 声明。在承诺之前,配置试用或金丝雀流,测量持续吞吐量,模拟网络分区,并验证故障转移。
后续步骤:Sui gRPC 指南。
| 标准 | 检查内容 | 为什么重要 |
|---|---|---|
| 容量隔离 | 该计划是否为您的订阅负载提供单租户的 CPU、内存、磁盘和网络? | 共享端点可能会限制长期存活的流或突发回填。 |
| 流式接口 | SubscribeCheckpoints、SubscribeTransactions 和 SubscribeEvents 是否可用?是否存在每流限制? | 您的实时索引器依赖于连续、可恢复的流。 |
| 运维访问 | 能否查看日志、指标、快照和升级计划? | 没有访问权限,您就无法诊断同步停滞或计划维护。 |
| 数据保留 | 检查点和状态历史保留多久?修剪是否可配置? | 重放和审计需求与实时流需求不同。 |
| 安全性 | TLS 要求、令牌轮换、IP 白名单和审计日志 | 认证薄弱的专用节点会成为公开的攻击面。 |
| 测试网对等性 | 具有真实流式配置的独立测试网端点 | 测试网应反映生产行为,而不是缩减的共享端点。 |
| 迁移路径 | 能否从 JSON-RPC 开始,并在无需返工的情况下迁移到 gRPC? | gRPC 应为主要接口;传统 JSON-RPC 可能功能有限。 |
| 恢复 | 快照恢复、回填速度以及流恢复语义 | 快速恢复可减少升级或故障转移后的停机时间。 |
常见问题
专用 Sui gRPC 节点与公共或共享 Sui RPC 有何不同?
专用节点为您的后端提供隔离的资源和稳定的流式容量;公共/共享端点会限速,并可能施加订阅超时。除非完全托管,您仍需要管理节点生命周期。
在专用 Sui 节点上应该有哪些 gRPC 服务?
LedgerService、StateService、TransactionExecutionService 和 SubscriptionService。请从提供商的 proto 文件确认生成的客户端桩和请求/响应类型。
如何处理 SubscribeCheckpoints 的重连和重放?
持久化最后处理的检查点序列或游标,在重连时从该点恢复,确保下游写入幂等,并在客户端强制背压。
我可以使用专用 Sui gRPC 节点进行测试网开发吗?
可以,但请将测试网与主网分开。使用官方水龙头 https://faucet.sui.io,并验证当前政策/限制。测试网数据可能会重置;不要将其视为生产环境。
如果我购买专用 gRPC 计划,还需要运维 Sui 全节点吗?
托管的专用节点底层仍然是一个全节点;根据计划的不同,您可能负责也可能不负责升级、快照和监控。请明确运维责任和访问权限。
对于专用 gRPC 节点,应该监控哪些指标?
检查点同步延迟、磁盘使用量、CPU/内存、流连接波动、错误率和回填吞吐量。在停滞和容量阈值上设置警报。