c# - C#中的分布式计算

标签 c# .net distributed-computing

我有一个特定的 DLL,其中包含一些语言处理类和方法。 这些方法之一获取一个单词作为参数并进行大约 3 秒的计算并将相关结果保存在 SQL-Server 数据库中。

我想在 900k 字上运行这个 DLL 方法,这个工作可能每周重复一次。 我如何使用 C# 轻松地将这项工作分配到多个系统上以节省时间?

最佳答案

以形式回答:需求--工具

计划运行 -- Quartz.NET

Quartz 允许您按任何给定的时间表运行“作业”。它还在运行之间保持状态,因此如果服务器由于某种原因出现故障,当它恢复时它知道开始运行作业。很酷的东西。

分布式队列 -- NServiceBus

好的 ServiceBus 物有所值。基本上你想要做的是确保你的所有工作人员只对排队的许多操作执行给定的操作。如果您确保您的操作是 idempotent NServiceBus 是实现这一目标的好方法。

Queue -> Worker1 += Worker 2 += Worker 3 --> Local Data Storage -> Data Queue + Workers -> Remote Data Storage

数据缓存 -- RavenDbSQLite

基本上,为了确保给定操作的返回值与您要确保的 SQL Server 充分隔离,并将该值缓存在本地存储系统中的某个位置。这可以是像 RavenDB 这样的快速和非关系的东西,也可以是像 SQLite 这样的结构化的东西。然后你会通过 NServiceBus 将一些标识符放入另一个队列并将其同步到 SQL Server,队列是你的 friend ! :-)

异步操作 -- Task Parallel LibraryTPL DataFlow

您本质上想要确保您的所有操作都不会阻塞并且足够原子化。如果您还不知道 TPL,您应该知道,它是一些非常强大的东西!我从 Java 人员那里听到很多这样的话,但值得一提的是......C# 正在成为一种非常适合异步和并行工作流的语言!

新的 Async CTP 中还有一件很酷的事情是 TPL DataFlow。我还没有用过它,但它似乎正合你意!

关于c# - C#中的分布式计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981358/

相关文章:

c# - 以编程方式将应用程序池分配给iis7中的网站

c# - 结构如何从类型参数约束的类继承?

c# - 如何将光标移动到datagridview中的下一行

c - 建议分布式计算,从流中获取数据

cluster-computing - 运行多个工作守护进程 SLURM

python-3.x - 属性错误 : module 'concurrent' has no attribute 'futures' when I try parallel processing in python 3. 6

c# - LINQ 首先选择

c# - 在 Windows Phone 8.1 中以编程方式检测重启

c# - 抛接逻辑

.net - 依赖注入(inject) : do we all need to know that?