GitHub user lizining1231 edited a comment on the discussion: [OSPP 2026] Triple 
协议性能分析与优化

这里是一份初步的性能基准测试报告:

# Dubbo-Go grpc协议 基准测试报告

## 目录

- 一、测试环境
- 二、测试配置
- 三、测试数据
- 四、服务端内存分配(B/op、allocs/op)测试数据
- 五、特定场景测试数据摘要
- 六、性能优化
- 七、许可证

## 一、测试环境

- **Go 版本**: 1.25.6
- **Java 版本**: 17.0.19
- **Maven**: 3.9.16
- **OS**: Ubuntu 24.04.1 LTS (WSL2, Linux 6.6.87)
- **CPU**: Intel Core i7-10750H @ 2.60GHz, 6 核 12 线程
- **内存**: 7.6 GiB
- **测试框架**: Dubbo-Go / gRPC / Dubbo-Java
- **预热时间**: 10s
- **测试时长**: 每个用例 60s
- **轮次**: 5 轮 × 24场景取中位数

## 二、测试配置

| 参数   | 值                          |
| ---- | -------------------------- |
| 报文大小 | 128B / 1KiB / 16KiB / 1MiB |
| 序列化  | protobuf                   |
| 压缩   | none                       |
| 并发数  | 50 / 100                   |
| 调用模式 | unary                      |

## 三、测试数据

### 1. 128 bytes 报文

#### QPS(每秒请求数)

| 并发数 | dubbo-go | grpc     | dubbo-java |
| --- | -------- | -------- | ---------- |
| 50  | 4,425.4  | 40,561.9 | 10,625.8   |
| 100 | 4,537.6  | 47,064.7 | 10,667.0   |

#### P99 延迟 (ms)

| 并发数 | dubbo-go | grpc | dubbo-java |
| --- | -------- | ---- | ---------- |
| 50  | 19.56    | 3.58 | 6.74       |
| 100 | 33.29    | 5.54 | 12.23      |

### 2. 1024 bytes 报文

#### QPS(每秒请求数)

| 并发数 | dubbo-go | grpc     | dubbo-java |
| --- | -------- | -------- | ---------- |
| 50  | 3,597.7  | 33,508.7 | 8,870.0    |
| 100 | 3,670.8  | 42,400.3 | 8,919.1    |

#### P99 延迟 (ms)

| 并发数 | dubbo-go | grpc | dubbo-java |
| --- | -------- | ---- | ---------- |
| 50  | 21.51    | 4.09 | 7.79       |
| 100 | 42.96    | 6.80 | 14.07      |

### 3. 16384 bytes 报文

#### QPS(每秒请求数)

| 并发数 | dubbo-go | grpc     | dubbo-java |
| --- | -------- | -------- | ---------- |
| 50  | 1,980.3  | 11,882.1 | 4,772.9    |
| 100 | 1,829.6  | 12,852.9 | 4,819.3    |

#### P99 延迟 (ms)

| 并发数 | dubbo-go | grpc  | dubbo-java |
| --- | -------- | ----- | ---------- |
| 50  | 43.24    | 10.07 | 21.03      |
| 100 | 93.16    | 16.28 | 32.91      |

### 4. 1048576 bytes 报文

#### QPS(每秒请求数)

| 并发数 | dubbo-go | grpc  | dubbo-java |
| --- | -------- | ----- | ---------- |
| 50  | 122.9    | 284.5 | 288.4      |
| 100 | 119.4    | 274.0 | 293.5      |

#### P99 延迟 (ms)

| 并发数 | dubbo-go | grpc   | dubbo-java |
| --- | -------- | ------ | ---------- |
| 50  | 1,074.68 | 261.09 | 279.11     |
| 100 | 2,400.09 | 511.09 | 697.37     |

## 四、服务端内存分配(B/op、allocs/op)测试数据

### 1. 128 bytes 报文

#### B/op(每请求分配字节)

| 并发数 | dubbo-go | grpc  | dubbo-java |
| --- | -------- | ----- | ---------- |
| 50  | 23,307   | 5,899 | 20,345     |
| 100 | 22,976   | 5,895 | 20,342     |

#### allocs/op(每请求分配次数)

| 并发数 | dubbo-go | grpc |
| --- | -------- | ---- |
| 50  | 151.5    | 79.4 |
| 100 | 151.5    | 79.3 |

### 2. 1024 bytes 报文

#### B/op(每请求分配字节)

| 并发数 | dubbo-go | grpc  | dubbo-java |
| --- | -------- | ----- | ---------- |
| 50  | 27,659   | 8,847 | 23,160     |
| 100 | 27,317   | 8,844 | 23,163     |

#### allocs/op(每请求分配次数)

| 并发数 | dubbo-go | grpc |
| --- | -------- | ---- |
| 50  | 153.1    | 79.6 |
| 100 | 153.1    | 79.4 |

### 3. 16384 bytes 报文

#### B/op(每请求分配字节)

| 并发数 | dubbo-go | grpc   | dubbo-java |
| --- | -------- | ------ | ---------- |
| 50  | 123,700  | 60,638 | 86,883     |
| 100 | 113,426  | 60,625 | 86,922     |

#### allocs/op(每请求分配次数)

| 并发数 | dubbo-go | grpc |
| --- | -------- | ---- |
| 50  | 161.2    | 81.7 |
| 100 | 164.5    | 81.4 |

### 4. 1048576 bytes 报文

#### B/op(每请求分配字节)

| 并发数 | dubbo-go  | grpc      | dubbo-java |
| --- | --------- | --------- | ---------- |
| 50  | 3,124,173 | 3,176,880 | 4,417,419  |
| 100 | 3,085,140 | 3,173,124 | 4,413,321  |

#### allocs/op(每请求分配次数)

| 并发数 | dubbo-go | grpc  |
| --- | -------- | ----- |
| 50  | 407.4    | 119.7 |
| 100 | 406.9    | 104.9 |

## 五、特定场景测试数据摘要

### 1. 128B × 100 并发场景三端表现

| 指标        | dubbo-go | grpc     | dubbo-java |
| --------- | -------- | -------- | ---------- |
| QPS       | 4,537.6  | 47,064.7 | 10,667.0   |
| P99 (ms)  | 33.29    | 5.54     | 12.23      |
| B/op      | 22,976   | 5,895    | 20,342     |
| allocs/op | 151.5    | 79.3     | N/A        |

### 2. 1MiB × 50/100 并发场景三端表现

**1Mib × 50 并发**

| 指标        | dubbo-go  | grpc      | dubbo-java |
| --------- | --------- | --------- | ---------- |
| QPS       | 122.9     | 284.5     | 288.4      |
| P99 (ms)  | 1,074.68  | 261.09    | 279.11     |
| B/op      | 3,124,173 | 3,176,880 | 4,417,419  |
| allocs/op | 407.4     | 119.7     | N/A        |

**1Mib × 100 并发**

| 指标        | dubbo-go  | grpc      | dubbo-java |
| --------- | --------- | --------- | ---------- |
| QPS       | 119.4     | 274.0     | 293.5      |
| P99 (ms)  | 2,400.09  | 511.09    | 697.37     |
| B/op      | 3,085,140 | 3,173,124 | 4,413,321  |
| allocs/op | 406.9     | 104.9     | N/A        |

## 六、性能优化

### Dubbo-Go 客户端优化

参照社区已有benchmark,为获得最佳性能,Dubbo-Go 客户端使用了以下优化配置:

| 配置项                        | 说明               |
| -------------------------- | ---------------- |
| `WithClientNoCheck()`      | 跳过服务检查,减少不必要的开销  |
| `MaxCallRecvMsgSize: 16MB` | 最大接收消息大小,支持大报文测试 |
| `MaxCallSendMsgSize: 16MB` | 最大发送消息大小,支持大报文测试 |

### Dubbo-Go 服务端优化

参照社区已有benchmark,服务端配置了以下优化参数:

| 配置项                                | 说明       |
| ---------------------------------- | -------- |
| `WithMaxServerRecvMsgSize("16MB")` | 最大接收消息大小 |
| `WithMaxServerSendMsgSize("16MB")` | 最大发送消息大小 |

## 七、许可证

Apache License 2.0


GitHub link: 
https://github.com/apache/dubbo-go/discussions/3673#discussioncomment-18071388

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: 
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to