SR API 配置

加固超级代表节点的 HTTP 和 gRPC 接入面——限制网络访问、禁用泄露拓扑结构的 endpoint,并对入站流量进行限速。

📘

前置阅读

TRON 全节点默认暴露 HTTP 和 gRPC API,便于监控、集成和读密集型客户端访问。对 SR 来说,这些 API 不是区块生产所必需。 TRON 提供三组配置项,把 API 接入面裁剪到 SR 实际需要的水平:控制访问范围、筛选暴露方法、对入站流量限速。这些配置不是运行 SR 的硬性要求,但能为 SR 项目方提供调优空间。


网络访问范围

默认情况下,SR 可以不公开其 API ——区块生产和点对点通信完全通过 P2P 通道在节点之间进行。

如果确实需要外部访问——用于内部监控,或该节点同时作为 RPC endpoint——建议在网关处控制访问范围,例如防火墙规则,或带可信主机 IP 白名单的 Nginx 反向代理。

Endpoint 配置管理

SR 可按运维需求关闭特定的 HTTP 和 gRPC 方法。例如不需要向全网公开对等节点列表(Peer List)或节点元数据(Node Metadata)时,可关闭对应的 API 端点:/wallet/listnodes/wallet/getnodeinfo

可在 config.conf 中使用 disabledApi 配置:

node {
  # 要屏蔽的方法名称,不区分大小写。
  # 仅填写方法名,不含 URL 路径。
  disabledApi = [
    "listnodes",
    "getnodeinfo"
  ]
}

该禁用规则对 HTTP 和 gRPC 处理器同时生效。具体条目按部署需求增删,没有固定的统一禁用清单。

流量上限

限速可避免 API 请求(包括合法的高并发流量)与共识线程争抢 CPU 和事件循环资源。SR 需要同时响应外部业务请求时,这一调优尤为重要。

gRPC 和 JSON-RPC 的配置方法的区别如下:

协议按方法限速全局限速
gRPC是(逐方法独立配置)可选
JSON-RPC否(仅支持 HTTP 层限速)是(作用于整个 JsonRpcServlet

示例配置(在 config.conf 中):

rate.limiter = {

  # gRPC:按方法限速
  rpc = [
    {
      component = "protocol.Wallet/ListWitnesses",
      strategy = "QpsRateLimiterAdapter",
      paramString = "qps=200"
    }
  ]

  # HTTP / JSON-RPC:全局 JSON-RPC 限速 + 特定 HTTP 方法限速
  http = [
    {
      component = "JsonRpcServlet",
      strategy = "QpsRateLimiterAdapter",
      paramString = "qps=200"
    },
    {
      component = "GetTransactionInfoByIdServlet",
      strategy = "QpsRateLimiterAdapter",
      paramString = "qps=50"
    }
  ]
}

超过限流阈值时的处理方式

rate.limiter.apiNonBlocking 控制 HTTP 和 gRPC 请求超过限流阈值后的处理方式。默认值为 false,请求会等待可用配额;设为 true 时,节点会立即拒绝超限请求。

设置 QPS 值。 根据硬件和负载情况调整(以下数值仅供参考):

  • SR 节点整体公网入站流量:100500 QPS。
  • 读密集型 endpoint(如 getTransactionInfoByIdgetBlockByNum):50100 QPS。
  • 轻量读操作(如 ListWitnessesgetNowBlock):最高 1000 QPS。

建议从保守值开始,若合法客户端持续触及上限,再逐步上调。

📘

注意

配置过程中,gRPC API 的名称必须包含服务前缀(例如 protocol.Wallet/ListWitnesses)。

API 请求与响应限制

以下配置限制单次请求、响应或结果集的规模,与上述 QPS 限流彼此独立:

配置项默认值作用
node.http.maxMessageSize4194304FullNode HTTP API 请求体上限,单位为字节;0 会拒绝所有非空请求体。
node.jsonrpc.maxBatchSize100单次 JSON-RPC 批量请求的最大调用数;0 或负数表示不限制。
node.jsonrpc.maxResponseSize26214400JSON-RPC 响应大小上限,单位为字节;0 或负数表示不限制。
node.jsonrpc.maxLogFilterNum20000JSON-RPC 日志过滤结果上限;0 或负数表示不限制。
node.jsonrpc.maxMessageSize4194304JSON-RPC 请求体上限,单位为字节;0 会拒绝所有非空请求体。

修改默认值前,应同时评估反向代理限制、合法客户端请求规模和节点可用内存。


相关资源