C#中的分布式计算

ARZ*_*ARZ 4 .net c# distributed-computing

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

我想在900k字上运行这个DLL方法,这个工作可能每周重复一次.如何在多个系统上轻松分发此工作以节省使用c#的时间?

Anu*_*nuj 15

表格中的答案:要求 - 工具

预定运行 - Quartz.NET

Quartz允许您在任何给定的时间表上运行"作业".它还维护运行之间的状态,因此如果由于某种原因服务器出现故障,当它恢复时它会知道开始运行该作业.很酷的东西.

分布式队列 - NServiceBus

一个好的ServiceBus值得它的黄金重量.基本上,您要做的是确保所有工作人员仅执行给定操作,无论多少操作都排队等待.如果您确保您的操作是幂等的, NServiceBus是实现此目的的好方法.

队列 - > Worker1 + =工人2 + =工人3 - >本地数据存储 - >数据队列+工人 - >远程数据存储

数据缓存 - RavenDbSQLite

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

异步操作 - 任务并行库TPL DataFlow

您基本上希望确保没有任何操作阻塞且足够原子.如果你不知道你应该知道TPL,这是一些非常强大的东西!我从Java人员那里听到了很多,但值得一提的是...... C#正在成为异步和并行工作流的一种非常好的语言!

新的Async CTP还有一个很酷的事情是TPL DataFlow.我没用过它,但它似乎就在你的小巷里!


Hen*_*man 5

由于它是现有代码,我会寻找一种方法来拆分 90 万个单词的列表。

其他一切都需要更多的改变。