反应系统 - 响应时间的流逝

时间:2015-09-28 15:18:37

标签: reactive-programming event-based-programming

假设我们有一个被动销售预测系统。

每次我们进行销售时,我们都会重新计算未来销售预测。 如果有大量销售触发我们的重新预测,这种方法很有效。 但是,如果销售额从每秒100个事件变为0,会发生什么。并且长时间保持0? 我们在销售情况良好时发布的预测是最新预测。

在这种情况下,您如何塑造一个代表“没有销售发生”的事件'没有回到一些批次每小时/每分钟/任意时间段事件,表示' X时间过去了'。

这是一个通用问题的具体案例 - 如何模拟基于事件的系统中没有任何事情发生的时间传递 - 不使用勾选时钟样式事件,这会唤醒所有人重新考虑他们当前的值[一个实现将会不规模]。

我认为唯一有意义的选择是有道理的: 每次我们进行销售时,我们还会在未来2小时安排延期活动,要求我们重新考虑我们对该销售的评估。 在处理该延期事件时,我们可以选择安排进一步的延期事件以重新考虑。

1 个答案:

答案 0 :(得分:1)

考虑到这是一个非常通用的场景,您已经做了一个相当大的假设,即它不可能提出一种设计,以可扩展的方式重新评估过去的销售,除非它'一次完成一次销售。

在方案中有许多不同的与比例相关的数字,并且您只查看单个预定的预测更新程序可能会同时尝试处理大量过去销售的数字。

我能想到的其他可伸缩性问题:

  • 如果您预计每秒销售100次,那么重新评估每一笔新销售的预测并不是很好。如果您正在谈论会计的财务预测模型,那么如果组织每秒进行数百次销售,则每次组织进行销售时都不太可能需要更新。

  • 如果您正在谈论用于金融市场的短期预测引擎(即预测您在未来10秒内需要多少现金,或能源或其他资源) ,那听起来你的波动性不断变化,而且你几乎没有时间会发生任何事情。如果您确实需要非常频繁地更新预测,在触发重新更新之前等待几个小时,就不太可能以您需要的方式获得所需的信息。

  • 根据您的方法,每个产品最终会有一个未来的预定活动(可能很大),每次您进行销售时,您都会放弃旧的预定活动并安排新的一个。因此,对于经常销售的产品,当你不可能再到那里时,你会做一些重复的工作,以便不断地将罐头推向路边。

优秀设计的构成将基于真实场景。通用案例很有意思,但好的设计需要根据自己的情况进行调整。

以下是我可能适合的一些想法:

  • 如果您希望每个产品在产品销售时获得更新预测,但某些产品可以非常频繁地销售,那么一个好的方法可能是在每个产品的基础上限制或缓冲销售。如果产品每秒销售50次,您可以等待1秒,10秒,2小时等等,并立即评估所有这些销售,而不是每秒重新预测50次。特别是如果您的预测过程很繁重,那么每次销售都可能会导致低价值的高负荷,因为下次销售时信息几乎会过时。

  • 您还可以使用通用计时器来更新在最后一个窗口中未售出的所有产品的预测,但会在缓冲区中处理产品。例如,您可以每小时选择具有最早预测的10种产品并更新它们。这可以防止单个计时器在一次点击中重新预测整个产品集。

  • 如果你想要一些简单的东西,你可以只使用上面的单一计时器方法并忘记每次销售的预测更新。

  • 如果您担心批量预测会产生负担,那么这种工作应该在处理销售的硬件上进行。