gpt4 book ai didi

c# - 开始使用 Orleans : Implementation, 托管和部署

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:47 27 4
gpt4 key购买 nike

我正在制作一个应用程序作为一种学习体验,我遇到了两个主要问题:

1) 我的实现可能对奥尔良来说是个好主意,也可能不是……我只是不知道。

2) 我正在寻找有关托管和部署的建议,基本上是:在哪里以及如何?这只是一种学习体验,所以小而便宜/免费很重要。

那么,开始......关于我正在制作的应用程序的一些信息:

  • 这是一个基于移动 GPS 的应用程序,带有 MongoDB 存储。
  • 现实世界被划分为不同且持久的区域,即 GPS 位置 block 。
  • 当用户在给定区域中处于事件状态时,该区域中的所有其他用户都可以看到他,并且他开始接收有关该区域的属性和该区域中其他事件用户的位置的更新。
  • 用户可以操纵区域的属性。
  • 用户需要能够明确加入和离开区域,但也需要在超时后离开。

我有两个 Cereal :UserGrainRegionGrain

对于 issue 1) 将 Region 作为 grain 来实现是个好主意吗?一些不同的示例支持此实现。但是,最佳实践手册表明这不是一个好主意,因为它是一项长期运行的工作(该区域无限期地存在),并且这种类型的 grain 可能是一个瓶颈。但是......我需要它像“Presence”样本中的“GameGrain”一样,玩家加入和离开(明确或超时)。

对于问题 2)

  • 我有一个作为控制台应用程序实现的筒仓。我使用 amazon elastic beanstalk 部署了一个 .net web 应用程序,但我不知道从哪里开始使用控制台应用程序。亚马逊是一个不错的选择吗?我只是因为最近的使用而默认了它。
  • 如果 RegionGrain 是个坏主意……好主意会是什么样子?
  • 如果 RegionGrain 是个好主意……有没有办法告诉 Orleans 永远不要停用它?如果是这样,我应该使用计时器来满足超时要求,并使用状态和心跳来更新……对吗?如果不是,我是否应该在某个地方托管另一个控制台应用程序来维护和运行 RegionGrain(s)?

最佳答案

如果这仍然是一个实际问题:

关于问题 1) - 你的 region grain 对我来说似乎很好 - 它不是一个持续工作的 grain,但它是你的 region 注册表:当用户进入该区域时 - 他在 region grain 中注册(或被如果您想消除用户对此的责任,则由外部区域监视器注册)。这样的区域可以无限期地存在,但这并不意味着它们是长期运行的作业。

Long running job 在 orleans 术语中是指在单一方法中做大量主动工作的工作(或更糟 - 休眠几秒钟或几分钟) - 这将保持 Cereal 和线程orleans 线程池 - 所以这种做法被认为是不好的,但在这里并不适用。

关于托管 - Amazon 与任何其他托管一样出色,只要您知道如何在那里托管和运行您的工作。我们使用 Azure 进行托管 - 云服务非常容易上手,VM 成本通常与亚马逊相当(除了 Azure 免费试用比亚马逊短 3 个月对 1 年,但资源更多)。

关于问题 2),定时器和其他 - 定时器不是持久的,所以如果 grain 被停用 - 它们会丢失并且必须重新启动。提醒是恢复 Cereal 的更好选择, Cereal 上有一种方法可以防止停用 - DelayDeactivation(),显式停用的相反方法是 DeactivateOnIdle()。关于更新——我们发现 Orleans Streams 是广播大量更新(例如,从 RegionGrain 到所有订阅\注册用户)的非常好的概念,所以看看它,它可以解决订阅和广播的许多问题。

总的来说,我会以不同的方式构建它 - 让您的系统 react 而不是脉冲\主动。例如:

  • 用户进入区域 - 所以他只需在区域 Cereal 上注册他的存在并订阅区域事件。
  • 区域的任何更改都会被记录并推送到 Orleans 流 - 因此所有订阅者都会收到区域事件。
  • 对其他玩家的任何更改 - 向区域 Cereal 发送消息(因此它将成为我们的真实来源),然后重新广播给其他区域订阅者。

在非常嘈杂的区域出现问题时(当系统中发生太多变化和太大的重新广播时 - 你可以让你的区域只是区域流的另一个订阅者 - 这样每个玩家都会向其他玩家广播通过 Orleans Stream 和 region 本身。或者让你的 region 成为一个广播 Controller ,它会在一段时间后将所有更改批量广播到流中 - 每秒或每 5 秒......

希望这对您有所帮助。

关于c# - 开始使用 Orleans : Implementation, 托管和部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37594740/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com