1

奥尔良有没有办法确保相同类型的 X 提醒颗粒托管在不同的筒仓上?

动机:我想在运行后台处理的 Azure 云服务中使用 Orleans,并且应该对故障和由于就地升级导致的孤岛停机具有高度弹性。在我的场景中,需要使用计时器始终处于活动状态的谷物,如果它的托管筒仓出现故障,那么它应该在几秒钟内在另一个筒仓上再次激活。在 Azure 云服务升级期间,实例分为 5 组,一次升级一组,这意味着在升级期间,我总是有 20% 的实例关闭,这使得始终保持活跃的粒度变得具有挑战性。我咨询了 Sergey Bykov,我们提出了几个想法,其中一个是引入“保持活力”颗粒,其目的是 ping“始终处于活动状态”的颗粒以确保其处于活动状态。

4

1 回答 1

1

我最近正在阅读Orleans Timers and Reminders 文档,其中包含以下可能相关的块。突出显示是我自己的。

提醒

描述

提醒与计时器类似,但有一些重要区别:

  • 提醒是持久的,除非明确取消,否则在所有情况下(包括部分或全部集群重启)都会继续触发。
  • 提醒与颗粒相关,而不是任何特定的激活。
  • 如果一个grain 没有与之关联的激活并且一个提醒滴答作响,则会创建一个。例如:如果激活变为空闲并被停用,与同一grain 相关联的提醒将在下一次滴答时重新激活grain。
  • 提醒通过消息传递,并受制于与所有其他粒度方法相同的交错语义。
  • 提醒应该用于高频计时器——它们的周期应该以分钟、小时或天为单位来衡量。

进一步的评论

由于关于高频的最后说明,这可能不是您的解决方案。如果您有一个无法关闭的单点故障,则可能需要考虑替代解决方案。:-/

我正在考虑使用它的特殊情况恰好是 5 分钟的轮询间隔。我需要调用一个网络服务,收集一些数据然后处理它。

我唯一的另一个想法是让我的基于轮询的实现变得超级轻量级​​,以便在底层基础设施发生变化时快速提升它的速度。

似乎这里有很多关于激活放置策略的文档。

于 2016-04-15T15:49:24.000 回答