在ASP.NET MVC网站之间传输大量数据的最佳传输机制

时间:2013-07-22 13:44:46

标签: c# asp.net-mvc data-transfer

我有一个场景要求我将大型邮件列表(> 100万客户)导出到外部电子邮件系统。我有两个应用程序的源代码和控制。

我需要一种机制将数据从一个系统传输到另一个系统:

  • 健壮
  • 快速
  • 安全

到目前为止,我已经设置了一个标准的MVC控制器方法,它响应请求(通过https),执行一些自定义安全检查,然后从数据库中提取数据。

当从数据库中检索数据时,控制器方法会迭代结果,并以纯文本格式写入响应,每100条记录左右刷新一次响应。接收器读取响应的每一行并执行存储和处理逻辑。

我选择了这种方法,因为它不需要将用户数据持久保存到永久文件中,并且用任何语言构建的客户端都能够实现接收器逻辑而不依赖于任何专有技术(例如WCF)。

我知道我可以使用.NET的其他传输机制,但鉴于上面列出的要求,没有一个具有整体优势。

了解哪些技术可能比我的请求/响应解决方案更好?

1 个答案:

答案 0 :(得分:2)

我想到了两个建议,我们刚刚在我们公司遇到了类似的情况(收购的网站每月活跃用户超过100万,相关数据需要完整的数据中心更改,包括仍然有效的180gb db)

我们最终通过SSH(SQL Server 2005)设置了一个拉动复制,这是最好的黑魔法,并花了我们大约一个月的时间在研究和失败的配置之间正确设置。有关于它的各种博客文章,但关键部分是:

1)在订阅者数据库计算机上的SQL Server配置管理器中设置命名服务器别名,指定localhost:1234(选择更好的数字)。

2)设置putty在你的订户的localhost:1234之间建立一个ssh隧道,然后发布db的端口9876(再次选择一个更好的号码)。还要确保在发布者上启用了ssh服务器。同时保密端口并为ssh权限找出安全密码。

3)在发布者上为复制的数据库端口9876添加服务器别名。

4)如果您的数据集足够小,请创建发布并尝试使用快照初始化启动订阅者。如果没有,您需要使用"从备份初始化"创建一个出版物。启用,并使用ftp在订阅服务器上恢复部分备份以传输备份文件。对于较大的数据集,此方法比快照初始化快得多。

优点:您不必担心sql server的身份验证,"只是" ssh隧道。如果您意识到需要更多列或架构更改,则可以轻松修改发布。您可以节省编写api的时间,这可能只是暂时的,可能会有更多的安全问题。

缺点:很奇怪,没有太多的官方文档和Windows上的ssh是挑剔的。如果你有一个基于Linux的负载均衡器,它可能会更容易。有很多步骤。

第二个建议:使用ServiceStack和protobuf.NET创建一个非常快速的Web服务并通过https公开它。如果您知道如何使用ServiceStack,它应该非常快。如果你不这样做,那将需要一点时间,因为它采用与Web API和WCF不同的设计理念。 Protobuf.NET是目前广泛使用的最紧凑,最快的序列化/反序列化线路格式。链接:

ServiceStack.NET

Protobuf.NET

优点:您可以随心所欲地处理安全问题。这也是一个缺点,因为你必须担心它。它记录得更好。您可以使用或学习一个很好的框架,以便在您的余生中加速其余的与Web服务相关的项目(或直到更好的方式出现)。

缺点:你必须写它。你必须测试它。你必须支持它。