【发布时间】:2021-06-30 00:37:47
【问题描述】:
我们使用googles steaming pull订阅者设计如下
我们正在做
- 将文件从 FE(前端)发送到 BE(后端)
- 将该文件转换为 ByteArray 并作为消息发布到 pubsub 主题(因此 ByteArray 将作为消息)
- 向订阅者发送该消息的主题,订阅者再次将 ByteArray 转换为文件
- 转换后的文件订阅者发送到该工具
- 工具用文件做一些很酷的事情并将状态通知订阅者
- 该状态将变为 BE,BE 会更新 DB 并将该状态发送到 FE
现在在我们的订阅者中,当我们收到消息时,我们会立即确认它并删除订阅者的侦听器,这样我们就不会再收到消息了
当该工具完成这些工作时,它会向订阅者发送状态(我们在订阅者上运行快速服务器)和
after receiving status we are re-creating listener of subscriber to receive message
注意
- 该工具可能需要 1 小时或更长时间才能完成工作
- 我们正在使用排序密钥将消息正确分发到虚拟机
这段代码运行良好,但我的问题是
- 这是否有任何缺陷(bcz 我们删除了侦听器,然后再次重新创建它或类似的东西)
- 或任何更好的选择或 GCP 服务最适合此设计
- 或任何代码改进
编辑:
删除代码示例
【问题讨论】:
-
一些问题:可以在架构中添加订阅吗?你忘了它(我敢肯定你只有一个,但只是为了确定)。某些工具的所有过程是否需要1H左右?什么限制了这个过程?为什么您不能同时处理多条消息(因此您需要删除侦听器)?您希望并行处理多少个 VM 来处理所有传入的文件?
-
感谢您的时间和考虑 1. 架构是什么意思? (我给出的代码就是我们所拥有的,没有多余的东西) 2. 没有一些过程可能需要 2 小时,一些可能需要 30m,一些可能需要 10 分钟,也可能需要 10 分钟 3. 该工具使用转换后的文件,因此一次只处理一个文件并在 VM 4 中做事。VM 取决于客户端,一些客户端可以提供 3 个 VM,有些可能提供 1 个 VM,等等。
-
当我们收到消息订阅者触发该工具时,该工具会获取转换后的文件并执行操作,因此我们可能无法并行运行该工具
-
Schema 是您放在问题之上的绘图。是否可以加快转换过程?例如,通过添加 CPU?您的进程需要多少内存 (RAM)?最大文件大小是多少?
-
好的,知道了 1. 我们每个客户/用户有一个订阅,所以一个订阅可能有两个或多个订阅者,或者一个也有(取决于客户他们可以提供多少 VM)2. 是的,现在可能我们有 32 或 16 GB 内存和大量 CPU(我们正在运行 Windows) 3. 最大大小不会超过 2 或 3 MB 大部分文件都在 KB 中
标签: publish-subscribe google-cloud-pubsub system-design