Files
seqlog/example/RUN_CONCURRENT.md
bourdon 3d82a6845e 重构:将示例文件组织到子目录
修复 Go 规范问题:一个目录不能有多个 package main

文件结构调整:
- example/concurrent_example.go → example/concurrent/main.go
- example/index_example.go → example/index/main.go
- example/topic_processor_example.go → example/topic_processor/main.go

修复 API 适配:
- index/main.go: 更新为新的查询 API(移除 startIdx/endIdx 参数)
- webapp/main.go: 使用 processor.Query 方法替代 RecordQuery
  - 移除 queryCache,直接使用 processor
  - 更新查询调用,移除状态参数

文档更新:
- example/README.md: 更新所有示例的运行路径
- example/RUN_CONCURRENT.md: 更新运行命令

所有示例编译测试通过 
2025-10-04 01:27:56 +08:00

2.0 KiB
Raw Blame History

运行高并发示例

快速开始

cd example/concurrent
go run main.go

预计运行时间

总时间:约 5 分钟

  • 场景 1 (并发写入): ~27 秒
  • 场景 2 (并发查询): ~3 秒
  • 场景 3 (混合读写): ~14 秒
  • 场景 4 (持续压测): 4 分钟
  • 场景 5 (统计汇总): ~10 秒

后台运行

如果想在后台运行并保存日志:

cd example/concurrent
go run main.go > output.log 2>&1 &
echo $! > pid.txt

# 查看实时输出
tail -f output.log

# 停止程序
kill $(cat pid.txt)
rm pid.txt

查看进度

程序在场景 4持续压测阶段会每 10 秒显示一次进度:

[进度] 已运行 10 秒 - 写入: 1951 条, 查询: 1920 次
[进度] 已运行 20 秒 - 写入: 3902 条, 查询: 3840 次
...

性能指标

根据测试结果,您应该会看到:

  • 写入吞吐量: ~220-240 msg/s
  • 查询吞吐量: ~400-1500 query/s取决于数据量
  • 并发处理: 3 个 topic 同时写入和查询

故障排查

问题:程序卡住不动

如果程序在某个阶段卡住:

  1. 检查磁盘空间是否充足
  2. 检查是否有其他进程占用文件
  3. 尝试清理测试目录:rm -rf test_concurrent

问题:查询出现 EOF 错误

这是正常现象!当 tailer 正在处理文件时,查询可能会读取到不完整的记录。程序会自动处理这些错误。

问题:性能比预期低

可能的原因:

  • 磁盘性能较慢(特别是在虚拟机或网络存储上)
  • 系统负载较高
  • 索引批量同步设置(可以通过修改 index.go 中的 DefaultSyncBatch 调整)

自定义测试

如果想调整测试参数,编辑 concurrent/main.go

// 场景 1每个 topic 写入的消息数
messagesPerTopic := 2000

// 场景 2每个 goroutine 的查询次数
queriesPerGoroutine := 200

// 场景 4持续压测时间
stressTestDuration := 4 * time.Minute

预期输出示例

完整输出请参考 README.md