_____ _ _ _____ _
| __ \ (_) | | / ____| | |
| |__) |___ _ _ __ | || (___ _ _| |__
| ___// _ \| | '_ \| |\___ \| | | | '_ \
| | | (_) | | | | | |____) | |_| | |_) |
|_| \___/|_|_| |_|_|_____/ \__,_|_.__/
智能、高效、可靠的消息传输框架
PointSub是一个专为处理不同大小消息传输而设计的高效、智能的传输框架,它解决了现代分布式系统中小型控制消息和大型数据传输共存的难题。
🔍 背景问题:
- 现有传输协议要么优化小消息延迟,要么优化大数据吞吐量,难以兼顾
- 开发者需要根据消息大小选择不同的传输方式,增加复杂性
- 资源分配、错误处理和重试逻辑需要反复实现
💡 PointSub解决方案:
- 智能检测消息大小,自动选择最优传输策略
- 统一简洁的API,屏蔽内部复杂性
- 内置自适应资源管理和错误恢复机制
+---------------------+
| 应用层 (API) | <- 提供统一简洁的API接口
+---------------------+
|
v
+---------------------+
| 策略层 (选择器) | <- 消息大小检测与策略选择
+---------------------+
|
v
+---------------------+
| 传输层 (执行器) | <- 实现各种传输策略
+---------------------+
|
v
+---------------------+
| 优化层 (管理器) | <- 资源控制和错误恢复
+---------------------+
PointSub采用分层架构设计:
- 应用层:提供统一简洁的API接口
- 策略层:根据消息大小选择最佳传输策略
- 传输层:实现各种优化的传输方式
- 优化层:管理系统资源和处理错误恢复
- 智能传输策略:自动为不同大小的消息选择最佳传输方式
- 简单统一的API:无论消息大小,都使用相同的简洁接口
- 高性能:针对不同场景优化的传输性能
- 高可靠性:内置错误恢复和超时处理机制
- 资源高效利用:智能内存管理和缓冲区优化
| 特性 | PointSub | 传统TCP库 | 消息队列 | gRPC |
|---|---|---|---|---|
| 自适应传输策略 | ✅ | ❌ | ❌ | 部分支持 |
| 统一API | ✅ | ✅ | ✅ | ✅ |
| 小消息性能 | 优秀 | 一般 | 优秀 | 优秀 |
| 大消息性能 | 优秀 | 一般 | 一般 | 一般 |
| 内存效率 | 高 | 一般 | 一般 | 一般 |
| 自动错误恢复 | ✅ | ❌ | 部分支持 | 部分支持 |
| 学习难度 | 低 | 低 | 中 | 中-高 |
PointSub特别适合以下场景:
- 微服务通信:同时处理小型RPC请求和大型数据传输
- 物联网平台:管理大量设备的控制命令和数据上传
- 数据处理管道:结合控制流和数据流的高效传输
- 内容分发系统:同时处理元数据和实际内容的分发
- 实时分析系统:结合低延迟指令和大批量数据处理
go get github.com/DeP2P/PointSub// 创建监听器
listener, err := pointsub.NewListener(pointsub.ListenerConfig{
Address: ":8080",
})
if err != nil {
log.Fatalf("创建监听器失败: %v", err)
}
// 接受连接
conn, err := listener.Accept()
if err != nil {
log.Fatalf("接受连接失败: %v", err)
}
// 接收消息
message, err := conn.ReceiveMessage(context.Background())
if err != nil {
log.Fatalf("接收消息失败: %v", err)
}
fmt.Printf("接收到消息: %s\n", message)// 创建连接
conn, err := pointsub.NewConnection(pointsub.ConnectionConfig{
Address: "server:8080",
})
if err != nil {
log.Fatalf("创建连接失败: %v", err)
}
// 发送消息
err = conn.SendMessage(context.Background(), []byte("Hello, PointSub!"))
if err != nil {
log.Fatalf("发送消息失败: %v", err)
} 性能比较 (消息/秒) 数据传输率 (MB/秒)
┌────────────────────────────┐ ┌────────────────────────────┐
│ │ │ │
│ 826,446 │ │ 3,631.84 │
│ ┌───┐ │ │ ┌───┐ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ 74,380 │ │ │ │ │
│ │ │ ┌───┐ │ │ 1,007.95 │ │ │
│ │ │ │ │ 3,101 │ │ ┌───┐ │ │ │
│ │ │ │ │ ┌───┐ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │
└────┴───┴──┴───┴──┴───┴─────┘ └────┴───┴──────────┴───┴────┘
512字节 50KB 1MB 5MB 50KB
PointSub在各种消息大小下均表现出色:
- 小消息(512字节):高并发下达到~826,446消息/秒
- 中等消息(50KB):数据传输率高达3,631.84 MB/秒
- 大文件传输:稳定传输10GB数据,保持~18MB/秒吞吐量
详细测试结果请参阅 性能测试报告。
更多使用示例可在 example 目录中找到:
详细的架构设计、实现原理和技术细节请参阅 设计文档。
- v0.1.0 - 核心功能实现
- v0.2.0 - 增强监控和可观测性
- v0.3.0 - 添加更多传输策略和优化
- v0.4.0 - 分布式协调和集群支持
- v1.0.0 - 稳定API和全面文档
欢迎提交问题报告、功能建议和代码贡献。请先阅读 贡献指南。
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。