我正在构建一个系统,允许我们的客户将PDF银行报表(从许多不同的银行)转换成更好的CSV表单(更好的是因为它可以导入到会计应用程序中)。它将在PDF页面上找到表,并将它们转换为CSV文件。
我将使用:
)。
后端必须负责:
从UI接收请求(PDF payload)
files
编写)
将要发生的问题:
数据库--我的解决方案不需要保存任何状态.
正如你所看到的,有很多事情要做。我不想讨论决定(例如为什么木桶,而不是直接访问的权限)。这是第一个粗糙的版本。以后我有很多改进这个系统的想法。
我的问题是:我是否应该使用消息队列系统来简化(使其更易读)这个系统?使用这样的队列(如AMQP或Azure队列或简单的MongoDB作为队列),该系统如何从中受益?当使用消息队列时,这样的系统的简单设计(框图)会是什么样子?我以前没有消息队列的经验,我从未使用过它们,但是我觉得消息队列可以帮助我设计更好的系统结构。
发布于 2020-10-18 16:59:33
一般来说,排队不是用来简化系统的。最简单的方法是在收到消息时进行翻译,并立即响应结果。队列的主要功能是在数据使用者和数据生成器之间添加一层隔离,这支持要处理的消息的动态有序积压。在以下情况下,使用队列可能很有用:
real-time.
非常重要。
鉴于将PDF文件转换到csv是一项相对昂贵的操作,并且不需要立即完成,将传入请求写入队列并使用作业ID进行响应是一种合理的方法。
发布于 2020-10-19 05:20:39
AMQP、SQS或Azure队列在大负载情况下并不能很好地工作。此外,他们本身并不是一个工作引擎。例如,作业引擎,您可以查询作业进度、取消作业等。这样的队列主要用于在系统中对许多较小的消息进行洗牌和缓冲,或者通知系统的其他部分。
因此,可能取决于文本识别作业的计算时间(我不知道),队列将帮助您缓冲负载,如果这对于在租户之间提供一定量的“公平”非常重要,则可能会为每个租户使用一个工人。也就是说,一个租户提交一个完整的库进行扫描,而其他租户则需要等待一两个星期才能将您的系统用于一行文本。
但是,为了向用户报告状态“作业完成了10%”等等,您可能会发送一些web套接字消息,但最终您可能希望在数据库中存储有关每个作业进度的信息,如果这些信息需要超过几秒钟的时间完成。
https://stackoverflow.com/questions/64392557
复制相似问题