【问题标题】:Best transport mechanism for transferring large amounts of data between ASP.NET MVC websites在 ASP.NET MVC 网站之间传输大量数据的最佳传输机制
【发布时间】:2013-07-21 06:48:22
【问题描述】:

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

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

  • 稳健
  • 安全

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

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

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

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

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

【问题讨论】:

  • 为什么不用共享数据库?
  • “我知道我可以与 .NET 一起使用的其他传输机制” - 请说出它们的名称以及您认为它们不够用的原因。例如,WCF 可以通过 SOAP 1.1、1.2 和 REST 公开服务,几乎可以使用任何语言。除此之外,我认为您的要求还不够SMART。定义“不健壮”,因为任何互联网络解决方案都依赖于 TCP。定义“快速”,因为它取决于您要传输的数据类型以及序列化程度。定义“安全”,你想要消息安全、传输安全、身份验证吗?您是否考虑过使用证书应用 TLS?
  • 如果您有 100 万客户,那么归结为一个文件有多大?您还计划支持分页还是从头到尾迭代?除非不可能,否则我个人只会共享数据库,但我会在后端构建一个进程,该进程能够比 MVC 应用程序恢复得更好。有时 Windows 服务更适合这项工作。
  • @Sergio 共享数据库在这里不是一个选项,系统位于不同的网络上,并且安全限制阻止将数据库服务器打开到 WAN。
  • @CodeCaster - 是的 TLS 将通过 SSL 证书使用,因此不需要传输级安全性,消息级安全性。我知道 WCF 服务可以提供 SOAP 响应等,但是由于响应是从纯文本格式处理的,所以我没有看到使用 WCF 的优势,除非有我不知道的隐式可靠性改进。我刚刚使用了纯文本响应,因为在序列化方面不需要更复杂的

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


【解决方案1】:

想到了两个建议,不久前我们公司发生了类似的事情(收购的网站每月活跃用户超过 100 万,相关数据需要完整的数据中心更改,包括仍然活跃的 180gb db) .

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

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

2) 设置 putty 以在步骤 1 中订阅者的 localhost:1234 和发布 db 的端口 9876 之间建立 ssh 隧道(同样,选择更好的数字)。还要确保您在发布者上启用了 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 服务相关的项目。

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

【讨论】:

  • 谢谢,我会看看 ServiceStack 和 Protobuf
猜你喜欢
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2017-03-02
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多