首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统中数据推送的软件范式

系统中数据推送的软件范式
EN

Stack Overflow用户
提问于 2020-01-04 02:28:46
回答 1查看 29关注 0票数 0

博士:如果正确的软件设计模式是推拉管道模式的话,我希望你提供反馈。

详细信息:假设我有几个软件算法/块来处理进入软件系统的数据:

代码语言:javascript
复制
[Download Data] --> [Pre Process Data] --> [ML Classification] --> [Post Results]

下载数据块只需逗留到午夜新数据可用时,然后下载新数据。预处理数据只是徘徊,直到新下载的数据出现,然后预处理数据。机器学习(ML)分类块只是徘徊,直到有新的数据可以分类,等等。

整个系统似乎是事件驱动的,我认为完全符合推拉模式?

下载数据块将是一个生产者?使用者将是所有后续的块,除了绘图结果,哪个将是结果收集器?

代码语言:javascript
复制
Producer = pull
Consumer = pull then push
result collector = pull

我在python框架内工作。这个实现看起来很理想:https://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/patterns/pushpull.html https://github.com/ashishrv/pyzmqnotes

推拉管道型式

如果我没有达到目标,我完全愿意使用另一种软件范型,而不是推拉。我也开放使用另一个回购,以及。

提前感谢您在上面的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-01-04 03:00:47

我已经做了很多次类似的管道,并且非常喜欢把它分成那样的块。为什么?主要用于从任何错误中自动恢复。如果有什么事情延迟了,它将在下个小时自动恢复。如果需要修复管道中间的一些东西,修复它并命名它,这样它就可以在下一个周期得到处理。(这一点以及较小的块更易于设计、构建和测试)。

例如,您的[Download Data]应该每小时运行一次以查找等待的数据:如果没有,请回去睡觉;如果有的话,将其下载到一个文件中,其中包含时间戳和状态:2020-0103T2153.downloaded.json[Pre Process Data]应该每小时运行一次以查找名为*.downloaded.json的文件:如果没有,请回到睡眠状态;如果有一个或多个文件,则按增加时间戳顺序对每个文件进行预处理,并将其输出到<same-timestamp>.pre-processed.json。等等,为每一步。

这样做意味着意外事件可能会自动恢复,除非他们查看日志文件(您应该记录每个事件,以便知道发生了什么),否则没有人会知道。晚上很容易睡觉:)

在这些场景中,通过crontab驱动这一事件只是一天中的一天.当“醒来”时,管道中的每一步都只是看是否有任何工作在等待着它。尝试使文件创建事件启动事情是不简单的,特别是当您需要重新启动一些事情时(需要重新创建文件)。

我不会使用消息队列,因为当传入的消息到达时,它更复杂,更适合处理。您的情况是更简单的批处理文件处理,所以保持简单,晚上睡觉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59587429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档