【发布时间】:2015-10-22 02:36:11
【问题描述】:
我正在开发一个文档管理系统。示例工作流程如下所示:
- 文档通过电子邮件发送到系统
- 系统对文档做了一些准备工作
- 文档已提交给用户以供进一步处理
- 然后,将文档发送给质量保证部
- 之后,系统会对文档执行一些或后处理操作
- 文档被认为是完全处理和传播的(例如,通过电子邮件将文档发送回系统,等等)
由于我的输入量会有所不同(但通常会很大),因此我非常关注可扩展性。
例如,假设系统已经下载了电子邮件附件。如果附件是 PDF 文档,系统需要将 PDF 拆分成单独的页面,然后将每个页面转换为多个大小的缩略图等。我计划进行一次 cron 作业检查(例如,每分钟)以查看是否有 PDF需要处理的文件。使用标记系统(例如“准备处理的 PDF 文档”),我可以检查数据库中所有标记为要处理的 PDF 文档。 PDF 处理完成后,可以将标志更新为“PDF 处理完成”。
但是,由于每个 PDF 文档的处理非常耗时,我担心在执行下一个 cron 作业时,该 cron 作业也会尝试处理前一个 cron 作业仍在处理的 PDF。
一种可能的解决方案是立即将 PDF 文档标记为“当前正在处理的 PDF 文档”。这样,当执行下一个 cron 作业时,它将排除已经在处理的作业。
因此,工作流程中的每个步骤可能会有 3 个标志:
- 准备处理的 PDF 文档
- PDF 文档正在处理中
- PDF 处理完成
QA 也一样:
- 为 QA 准备的文档
- 文档当前正在 QAd 中
- 文档质量检查完成
这是一个好方法吗?有更好的方法吗?我会将这些标志作为数据库中“PDF 文档”表的单列吗?或者标志应该是它自己的表(例如,特别是如果一个文档可以设置多个标志)。
我想就如何实施这样的系统征求建议。
【问题讨论】:
-
看来你应该设置一个有多个消费者的排队系统。你想要这方面的指针吗?
-
当然。我对所有想法持开放态度。
标签: workflow architecture