ZeroMQ:PUB/SUB 主题订阅便宜吗?
ZeroMQ: are PUB/SUB topic subscriptions cheap?
问题: 我有许多文件通过 HTTP 并行上传(上传接收器)。我将它们暂时存储在本地磁盘上。另一个进程(上传提交者)收到有关新上传的通知并进行特定处理(解析、提取元数据、上传到 S3 等)。上传处理完成后,我希望提交者通知上传接收者将状态(提交是否正常或错误)回复给远程上传者。使用 ZeroMQ PUB/SUB 模式,什么会更好:
- 将所有上传接收器线程订阅到一个主题。每个
接收线程必须根据上传 ID 或过滤消息
找到属于它的通知。
- 为每个接收器线程订阅一个新主题,该主题代表
具体上传。假设主题是,这似乎更合理
在 ZeroMQ 中便宜,即不需要太多资源来保留它们
可以自动过期。我希望新上传的内容有几十个
每秒文件,单个上传处理可能需要几个
秒 所以理论上我可以激活多达一千个主题
在同一时刻。而且我可能并不总是能够
由于各种故障模式退订。
初始通知:
关于使用不同的ZeroMQ版本号:
虽然较新的版本可能使用 PUB
侧主题过滤,但早期的 ZeroMQ 版本确实使用 SUB
端方法,这意味着所有(网络)消息传输流量都进入所有 SUB
-s 作为分配处理工作负载的可接受惩罚,否则需要以尽可能低的速度处理PUB
端的延迟。
这对于在开放式分布式系统关联中无法强制执行版本同质性的情况很重要。
虽然您的设计架构似乎位于同一 <localhost>
上,但性能影响仍然是非分布式的(集中的),并且如果出现整体瓶颈,可能仅涉及一些有限的 latency/priority 调整在此用例升级期间。
关于可扩展性范围 - 限制仍然比您的用例更远:
正如 Martin Sustrik(ZeroMQ 之父)所详细介绍的那样,ZeroMQ 的设计预期规模可达数万:
(cit.:) " Efficient Subscription Matching
In ZeroMQ, simple tries are used to store and match PUB/SUB
subscriptions. The subscription mechanism was intended for up to 10,000 subscriptions where simple trie works well. However, there are users who use as much as 150,000,000 subscriptions. In such cases there's a need for a more efficient data structure. "
Further details on design & scaling might be found interesting in this Martin's post.
最好的下一步是什么?
一个公平的方法是模拟每个有问题的方法并对其进行基准测试,在体外缩放到预期静态比例的 { 1.0x , 1.5x, 2.0x, 5.0x } 以获得定量支持有关与正在审查的替代策略相关的实际开销、性能和延迟的数据。
无论如何,Vovan,享受分布式处理中的智能世界signalling/messaging。
问题: 我有许多文件通过 HTTP 并行上传(上传接收器)。我将它们暂时存储在本地磁盘上。另一个进程(上传提交者)收到有关新上传的通知并进行特定处理(解析、提取元数据、上传到 S3 等)。上传处理完成后,我希望提交者通知上传接收者将状态(提交是否正常或错误)回复给远程上传者。使用 ZeroMQ PUB/SUB 模式,什么会更好:
- 将所有上传接收器线程订阅到一个主题。每个 接收线程必须根据上传 ID 或过滤消息 找到属于它的通知。
- 为每个接收器线程订阅一个新主题,该主题代表 具体上传。假设主题是,这似乎更合理 在 ZeroMQ 中便宜,即不需要太多资源来保留它们 可以自动过期。我希望新上传的内容有几十个 每秒文件,单个上传处理可能需要几个 秒 所以理论上我可以激活多达一千个主题 在同一时刻。而且我可能并不总是能够 由于各种故障模式退订。
初始通知:
关于使用不同的ZeroMQ版本号:
虽然较新的版本可能使用 PUB
侧主题过滤,但早期的 ZeroMQ 版本确实使用 SUB
端方法,这意味着所有(网络)消息传输流量都进入所有 SUB
-s 作为分配处理工作负载的可接受惩罚,否则需要以尽可能低的速度处理PUB
端的延迟。
这对于在开放式分布式系统关联中无法强制执行版本同质性的情况很重要。
虽然您的设计架构似乎位于同一 <localhost>
上,但性能影响仍然是非分布式的(集中的),并且如果出现整体瓶颈,可能仅涉及一些有限的 latency/priority 调整在此用例升级期间。
关于可扩展性范围 - 限制仍然比您的用例更远:
正如 Martin Sustrik(ZeroMQ 之父)所详细介绍的那样,ZeroMQ 的设计预期规模可达数万:
(cit.:) " Efficient Subscription Matching
In ZeroMQ, simple tries are used to store and matchPUB/SUB
subscriptions. The subscription mechanism was intended for up to 10,000 subscriptions where simple trie works well. However, there are users who use as much as 150,000,000 subscriptions. In such cases there's a need for a more efficient data structure. "
Further details on design & scaling might be found interesting in this Martin's post.
最好的下一步是什么?
一个公平的方法是模拟每个有问题的方法并对其进行基准测试,在体外缩放到预期静态比例的 { 1.0x , 1.5x, 2.0x, 5.0x } 以获得定量支持有关与正在审查的替代策略相关的实际开销、性能和延迟的数据。
无论如何,Vovan,享受分布式处理中的智能世界signalling/messaging。