Microsoft Orleans中的节流谷物

问题描述 投票:1回答:1

我正在尝试确定Microsoft Orleans的正确体系结构。我需要从大约1000个系统中检索100万到300万个文件,并将它们存储在几个中央服务器上。系统还将为每个文件检索和存储一些元数据,并将它们存储在数据库中。

我目前正在考虑为每个文件使用一个谷物,因此我可能有数百万个谷物,但是我想知道在这种情况下,是否同时将每个谷物保存到数据库中会使数据库过载。

我想知道是否应该考虑以下方案之一,以最大程度地减少数据库上的并发负载:

  1. 让谷物返回其结果到另一个谷物,该谷物将管理数据库交互并分批存储元数据。
  2. [运行时。
  • 我是否需要打扰这些,还是可以仅仅依靠奥尔良运行时(也许通过设置)而不是一次激活太多试图同时将数据保存到数据库的谷物?
  • c# actor orleans
    1个回答
    0
    投票
    我会提出第二个建议,因为由于难以写出结果,您将限制整个系统的吞吐量。这正在对抗奥尔良的最大优势之一,即几乎可以无限扩展以响应需求。

    您可以尝试修改第一个解决方案。我不会将结果返回到另一个grain,而是让每个grain调用无状态服务并读取其文件的结果,然后将持久性委托给该服务。这可能就是您的初衷,但是无状态服务与实际操作有所不同,因此我想清楚一点。

    如果此服务具有要尝试写入的行的列表,则在系统出现故障时,这会打开丢失数据的大门。如果这是一个问题,我将让谷物写入服务,该服务立即写入持久消息队列(即RabbitMQ),然后另一个服务从该队列中读取并写入数据库。我不会让谷物直接写入消息队列,因为集中队列写入使您可以向该服务添加重试逻辑,断路器等。尝试向1MM晶粒添加共享的断路器将是一场噩梦。

    尽管您没有问,但我会提出另一个想法。我不禁质疑将所有这些数据放入数据库的决定。数据库非常擅长跟踪数据更改,但是我怀疑您正在收集的元数据将在以后进行分析,但永远不会进行修改。这使得它成为事件流(例如Azure Event Grid)的理想选择。事件流针对写进行了优化,可以轻松处理您所讨论的浪涌类型。

    © www.soinside.com 2019 - 2024. All rights reserved.