ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RustFS 节点间传输指标与基线测试:tcp-http 数据面的观测与度量方法

RustFS 节点间传输指标与基线测试:tcp-http 数据面的观测与度量方法 RustFS 节点间传输指标与基线测试tcp-http 数据面的观测与度量方法【免费下载链接】rustfs2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.项目地址: https://gitcode.com/GitHub_Trending/rus/rustfs在分布式对象存储中节点间internode数据面是性能与排障的关键路径。本文基于 RustFS 仓库中的设计文档 transport-metrics-and-baseline.md系统讲解tcp-http节点间传输适配器的操作级 Prometheus 指标体系、当前埋点位置以及如何用仓库自带的基线脚本 scripts/run_internode_transport_baseline.sh 对 S3 PUT/GET 工作负载做可复现的度量采集与跨版本对比。读完后你应能理解每个指标的标签语义、在真实部署上跑通基线并正确解读run_manifest.txt、summary.csv、internode_metric_deltas.csv三类产物。适用边界tcp-http 是唯一受支持的数据传输后端在展开指标细节之前先明确该文档界定的 OSS开源版适配器范围这也是理解全部指标语义的前提tcp-http是默认且唯一支持的节点间数据传输后端tcp是tcp-http的遗留别名legacy alias两者等价配置了不受支持的 backend 取值时传输层构造阶段会fail closed构造直接失败指标与基线产物仅用于观测当前数据面行为本身不新增后端、不改变运行时行为、也不做性能承诺。这一行为在源码中有精确对应。环境变量常量定义于 crates/config/src/constants/internode.rs/// Environment variable for selecting the internode>const READ_FILE_STREAM_PATH: str /rustfs/rpc/read_file_stream; const PUT_FILE_STREAM_PATH: str /rustfs/rpc/put_file_stream; const WALK_DIR_PATH: str /rustfs/rpc/walk_dir;这些路由正是下表中 operation 标签值的落点。操作级指标定义Operation Metrics操作级节点间指标定义在 crates/io-metrics/src/internode_metrics.rs。核心是 5 个计数器指标名标签含义rustfs_system_network_internode_operation_sent_bytes_totaloperation,backend某个已知节点间操作已发送的字节数。rustfs_system_network_internode_operation_recv_bytes_totaloperation,backend某个已知节点间操作已接收的字节数。rustfs_system_network_internode_operation_requests_outgoing_totaloperation,backend某个已知节点间操作发起outgoing的请求数。rustfs_system_network_internode_operation_requests_incoming_totaloperation,backend某个已知节点间操作处理incoming的请求数。rustfs_system_network_internode_operation_errors_totaloperation,backend某个已知节点间操作观察到的错误数。operation 标签取值Operation传输路径说明read_file_streamHTTP/rustfs/rpc/read_file_stream由InternodeDataTransport::open_read打开的远程盘读流。put_file_streamHTTP/rustfs/rpc/put_file_stream由InternodeDataTransport::open_write打开的远程盘写流。walk_dirHTTP/rustfs/rpc/walk_dir由InternodeDataTransport::open_walk_dir打开的远程 walk-dir 流。grpc_read_allgRPCReadAll适配器之外的 unary 字节响应。grpc_write_allgRPCWriteAll适配器之外的 unary 字节请求。对应常量可在 internode_metrics.rs 中找到例如INTERNODE_OPERATION_READ_FILE_STREAM、INTERNODE_OPERATION_GRPC_READ_ALL等源码中还存在put_file_capability、ns_scanner及一系列grpc_*操作常量供适配器外的控制面路径使用。backend 标签取值Backend含义tcp-http当前适配器路由操作的 HTTP 流后端。grpcReadAll与WriteAll走 gRPC 路径。unknown拿不到操作级 backend 信息时的聚合指标路径。需要特别注意backend标签反映的是当前埋点来源tcp-http 流路径、gRPC 路径或 unknown 聚合路径并不代表系统额外支持了别的传输后端——不要把它误读为后端能力清单。从源码结构看记录逻辑分两层InternodeMetrics结构体内部用AtomicU64维护进程级快照供诊断接口读取同时通过record_*_for_operation_and_backend系列方法L444-L596向metricscrate 写入带server、operation、backend标签的 Prometheus 计数器不显式传 backend 的便捷方法会落到unknown。server标签由运行时注入的节点名填充set_internode_server_label注入前取值unset。低基数约束文档明确要求指标标签必须保持低基数——不要加入对象名、完整路径、完整 URL、对端动态字符串、请求 ID 或任何逐请求变化的值作为标签。这一约束直接决定了上面operation/backend只能是枚举常量而非动态值。当前埋点位置Current Instrumentation Points区域文件当前信号出站 HTTP 流请求crates/rio/src/http_reader.rs对已知/rustfs/rpc/操作记录出站请求数、写流 body 的发送字节、读流 body 的接收字节与错误。入站 HTTP 流请求rustfs/src/storage/rpc/http_service.rs入站请求数、读流与 walk 流的发送字节、put 流的接收字节与路由错误。gRPCReadAll/WriteAllrustfs/src/storage/rpc/node_service/disk.rs带grpcbackend 标签的入站请求数、发送/接收字节与错误。文档同时列出了三个已知缺口known gaps排障时应记住这些边界操作级指标当前不暴露延迟直方图latency histograms基线 runner 只有在提供--metrics-url时才会读取 Prometheus 文本输出指标用于行为归因attribution但不能替代端到端正确性测试或对象基准测试结果。基线 Runner用法与参数基线脚本 scripts/run_internode_transport_baseline.sh 对一个或多个已配置的 endpoint 运行 S3 PUT/GET 矩阵。它复用 scripts/run_object_batch_bench.sh 作为底层对象基准执行器并导出可复现的产物带场景/工具元数据与 git 修订号的运行清单、按场景/负载/并发汇总的基准摘要以及可选的节点间指标增量。必需输入--access-key--secret-key常用可选输入含脚本内实际默认值参数默认值说明--tool warp\|s3benchwarp基准工具必须是 warp 或 s3bench。--scenarios nameurl,...localhttp://127.0.0.1:9000,distributedhttp://127.0.0.1:9001场景矩阵每项为nameurl。--sizes 4KiB,1MiB,...4KiB,1MiB,16MiB,128MiB,1GiB对象大小列表。--concurrencies 1,16,...1,16,64,128并发度列表必须为正整数。--duration 90s90s每个工作负载持续时间warp 模式。--samples n20000s3bench 模式的采样数。--metrics-url http://host:port/metrics空跳过指标采集Prometheus 文本端点prometheus-increase模式下为/api/v1/query。--metrics-modetext-deltatext-delta前后文本快照差分或prometheus-increasePromQLincrease()查询适用于服务重启可能重置计数器的场景。--out-dirtarget/bench/internode-transport-timestamp产物输出目录。--dry-run-仅打印命令不实际执行。其他可选参数--region默认us-east-1、--bucket-prefix默认rustfs-internode-bench、--warp-bin/--s3bench-bin、--extra-args透传给底层对象基准脚本、--insecureTLS 自签名场景。脚本在main中会校验--tool必须是 warp/s3bench、--scenarios非空、--metrics-mode合法text-delta模式依赖curlprometheus-increase模式依赖python3且要求底层基准脚本可执行见 main 校验逻辑。Dry-run 示例scripts/run_internode_transport_baseline.sh \ --access-key minioadmin \ --secret-key minioadmin \ --scenarios localhttp://127.0.0.1:9000,distributedhttp://127.0.0.1:9001 \ --sizes 4KiB,1MiB \ --concurrencies 1 \ --duration 10s \ --dry-rundry-run 模式下 runner 仍会创建 manifest 与 CSV 表头并打印凭据脱敏后的底层对象基准命令便于先确认将要执行的完整场景矩阵再实际运行。带指标采集的真实基线示例RUSTFS_INTERNODE_DATA_TRANSPORTtcp-http \ scripts/run_internode_transport_baseline.sh \ --access-key $RUSTFS_ACCESS_KEY \ --secret-key $RUSTFS_SECRET_KEY \ --scenarios localhttp://127.0.0.1:9000,distributedhttp://127.0.0.1:9001 \ --metrics-url http://127.0.0.1:9000/metrics \ --out-dir target/bench/internode-transport/manual-run真实基线要求一个正在运行的 RustFS 部署和一个可用的基准工具。脚本对场景 × 负载put、get固定两个× 并发逐组执行每组前后各抓取一次 metrics 快照run_workload。文档特别强调不要把编造或抄来的合成基准数字写进 PR 描述指标用于行为归因而非性能背书。输出产物Output Artifacts基线 runner 写出三类文件文件创建时机内容run_manifest.txt始终创建时间戳、git commit、dirty 标记、Rust 编译器版本、内核字符串、场景矩阵、工具、工作负载设置、metrics URL以及脱敏后的凭据固定写入access_keyREDACTED/secret_keyREDACTED。summary.csv始终创建scenario、endpoint、workload、concurrency、size、status、throughput、requests_per_sec、avg_latency、error_count、log_file、run_dir。internode_metric_deltas.csv仅在设置--metrics-url时scenario、workload、concurrency、size、指标名、operation、backend、before 值、after 值、delta。manifest 的字段与脱敏逻辑见 write_run_manifest它同时记录metrics_url、metrics_mode、metrics_range与extra_args_present只记录是否传了 extra args不记录内容保证产物中不泄漏凭据或额外参数。指标差分的具体做法text-delta模式下用curl抓取前后两个 Prometheus 文本快照再用 awk 提取所有rustfs_system_network_internode_operation_前缀的序列按operation、backend标签解析计算 after − beforeextract_internode_rowsprometheus-increase模式则对 4 个请求/错误类指标直接执行sum by(operation, backend) (increase(metric[range]))PromQL 查询collect_internode_increases。结果解读与适用限制基线产物的正确用途是跨 commit、跨环境、跨场景矩阵记录并检查当前tcp-http适配器的行为。一条基线只对run_manifest.txt中记录的精确环境与命令有效——不同 kernel、rustc 版本或 dirty 工作区的产物不可直接横向比较。另外两点解读纪律基线产物应能看出指标是否被采集过。若internode_metric_deltas.csv缺失基准输出就无法从 Prometheus 指标层面归因节点间操作的变化量attribution 能力降级为只有吞吐/延迟摘要。指标只回答哪个 operation、哪个 backend 发了多少字节、开了多少请求、错了多少次这类归因问题正确性结论必须来自端到端测试与对象基准本身的完整性校验两者不能互相替代。延伸阅读围绕同一internode-transport主题仓库文档目录下还有 internode-transport-adapter-rfc.md、transport-capabilities.md、transport-fallback-and-selection.md、transport-buffer-contract.md、transport-buffer-lifecycle.md 等设计文档适配器实现见 crates/ecstore/src/cluster/rpc/internode_data_transport.rs指标实现见 crates/io-metrics/src/internode_metrics.rs。【免费下载链接】rustfs2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.项目地址: https://gitcode.com/GitHub_Trending/rus/rustfs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表