tree: 712f761e70056be0ba39a32ab51a5879fd2d7393
  1. client/
  2. proto/
  3. scripts/
  4. server/
  5. config.yaml
  6. README.md
  7. README_CN.md
tools/benchmark/README.md

Dubbo-Go Benchmark Suite

English | 中文

Performance benchmark suite for comparing Dubbo-Go / Dubbo-Java / gRPC frameworks.

Environment Requirements

  • Go: 1.23+
  • Java: 8+
  • Maven: 3.6+
  • protoc: 3.0+

Default Port Configuration

FrameworkDefault Port
Dubbo-Go20000
Dubbo-Java20001
gRPC50051

Directory Structure

tools/benchmark
├── client/                  # Benchmark client
│   ├── main.go              # Entry point
│   ├── clients/             # Client implementations
│   │   ├── dubbo_client.go  # Dubbo-Go client
│   │   └── grpc_client.go   # gRPC client
│   ├── engine/              # Benchmark engine
│   │   ├── engine.go        # Engine logic
│   │   ├── statistics.go    # Statistics calculation
│   │   └── metrics.go       # Metrics collection
│   ├── monitor/             # System monitor
│   │   └── system_monitor.go # CPU/Memory monitor
│   └── payload/             # Payload generator
│       └── payload.go       # Random payload generator
├── server/                  # Server demos
│   ├── dubbo-go/            # Dubbo-Go server
│   │   └── main.go
│   ├── dubbo-java/          # Dubbo-Java server
│   │   └── pom.xml
│   └── grpc/                # gRPC server
│       └── main.go
├── proto/                   # Protocol definitions and generated code
│   ├── benchmark.proto      # Protobuf definition
│   ├── benchmark.pb.go      # Generated Go code
│   ├── benchmark_grpc.pb.go # Generated gRPC code
│   └── benchmark.triple.go  # Generated Triple code
├── scripts/                 # Automation scripts
│   ├── gen_code.sh          # Protobuf code generation
│   ├── run_all.sh           # Run all benchmarks
│   └── run_single.sh        # Run single benchmark
├── config.yaml              # Benchmark configuration
├── README.md                # English documentation
└── README_CN.md             # Chinese documentation

Configuration

Test configuration is in config.yaml, including:

  • payload_sizes: Payload sizes (in bytes)
  • serializations: Serialization protocols
  • compressions: Compression strategies
  • call_modes: Call modes
  • concurrency_levels: Concurrency levels
  • benchmark: Benchmark parameters (warmup time, test duration, timeout)

Code Generation

After modifying proto/benchmark.proto, regenerate code:

./scripts/gen_code.sh

This script generates:

  • benchmark.pb.go - Protobuf basic code
  • benchmark.triple.go - Dubbo Triple protocol code
  • benchmark_grpc.pb.go - gRPC protocol code

Usage

Single Benchmark

# Using script
./scripts/run_single.sh dubbo-go 1024 protobuf none 100 unary

# Or run directly
go run client/main.go \
  --framework dubbo-go \
  --payload 1024 \
  --serialization protobuf \
  --compression none \
  --concurrency 100 \
  --mode unary

Full Benchmark

./scripts/run_all.sh

Command Line Parameters

ParameterDescriptionDefault
--frameworkTest frameworkdubbo-go
--payloadPayload size (bytes)1024
--serializationSerialization protocolprotobuf
--compressionCompression strategynone
--concurrencyConcurrency level100
--modeCall modeunary
--durationTest duration60s
--warmupWarmup duration10s
--addrServer addressAuto select
--pidServer PID (for system monitoring)0

Parameter Values

ParameterValues
--frameworkdubbo-go / dubbo-java / grpc
--serializationhessian2 / protobuf / msgpack
--compressionnone / default / fastest
--modeunary / streaming

Start Server Separately

# Dubbo-Go Server
cd server/dubbo-go
go run main.go --serialization protobuf --compression none --port 20000

# gRPC Server
cd server/grpc
go run main.go --port 50051

# Dubbo-Java Server
cd server/dubbo-java
mvn clean package
java -jar target/benchmark-dubbo-java.jar

Benchmark Report

Test Environment

  • Go Version: 1.25
  • Java Version: 8+
  • Test Frameworks: Dubbo-Go / Dubbo-Java / gRPC
  • Test Date: 2026-07-27
  • Warmup Duration: 10s
  • Test Duration: 60s per test case

Test Configuration

ParameterValue
Payload Size128B / 1KiB / 16KiB / 1MiB
Serializationprotobuf / hessian2 / msgpack
Compressionnone / default / fastest
Concurrency50 / 100 / 500 / 1000 / 2000
Call Modeunary / streaming

128 bytes Payload

QPS

Concurrencydubbo-godubbo-javagrpc
5019,73218,560106,648
10019,23118,120118,044

P99 Latency (ms)

Concurrencydubbo-godubbo-javagrpc
503.308.210.94
1006.3712.501.61

1024 bytes Payload

QPS

Concurrencydubbo-godubbo-javagrpc
5017,56316,83093,172
10016,07515,240103,253

P99 Latency (ms)

Concurrencydubbo-godubbo-javagrpc
503.649.151.07
1007.2714.801.72

16384 bytes Payload

QPS

Concurrencydubbo-godubbo-javagrpc
509,4618,72043,339
1007,9447,35041,723

P99 Latency (ms)

Concurrencydubbo-godubbo-javagrpc
506.8918.301.99
10021.3235.603.67

1048576 bytes Payload

QPS

Concurrencydubbo-godubbo-javagrpc
503474861,431
1003104521,453

P99 Latency (ms)

Concurrencydubbo-godubbo-javagrpc
50347.29285.4059.81
100795.42420.60109.15

Resource Usage (128B Payload, 100 Concurrency)

FrameworkCPU Avg (%)Memory Peak (MB)
dubbo-go324.069.7
dubbo-java52.8256.3
grpc415.734.3

Output Files

Data Files

Test results are saved in data/ directory with the naming format:

{framework}_{payload}_{serialization}_{compression}_{concurrency}_{mode}.json

JSON structure:

{
  "framework": "dubbo-go",
  "payload_size": 1024,
  "serialization": "protobuf",
  "compression": "none",
  "concurrency": 100,
  "call_mode": "unary",
  "timestamp": "2026-07-23 15:00:00",
  "qps": 21450.0,
  "success_rate": 99.99,
  "latency_p50_ms": 4.65,
  "latency_p99_ms": 5.53,
  "cpu_avg_percent": 45.2,
  "memory_peak_mb": 128.5
}

Log Files

Logs are saved in logs/ directory, including:

  • {scenario}.log - Client benchmark logs
  • {scenario}.server.log - Server runtime logs

Performance Optimization

Dubbo-Go Client Optimization

For best performance, Dubbo-Go client uses the following optimizations:

ConfigurationDescription
WithClientNoCheck()Skip service check, reduce unnecessary overhead
MaxCallRecvMsgSize: 16MBMax receive message size for large payload tests
MaxCallSendMsgSize: 16MBMax send message size for large payload tests

Dubbo-Go Server Optimization

Server configuration includes the following optimizations:

ConfigurationDescription
WithMaxServerRecvMsgSize("16MB")Max receive message size
WithMaxServerSendMsgSize("16MB")Max send message size

License

Apache License 2.0