3

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

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

  • 强大的
  • 快速地
  • 安全的

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

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

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

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

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

4

1 回答 1

1

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

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

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

2) 设置 putty 以在步骤 1 中订阅者的 localhost:1234 之间建立一个 ssh 隧道,并发布 db 的端口 9876(同样,选择一个更好的数字)。还要确保您在发布者上启用了 ssh 服务器。还要对端口保密,并找出 ssh 权限的安全密码。

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

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

优点:您无需担心 sql 服务器的身份验证,“只是” ssh 隧道。如果您意识到需要更多列或架构更改,可以轻松修改发布。您可以节省编写可能只是暂时的并且可能存在更多安全问题的 api 的时间。

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

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

服务堆栈.NET

Protobuf.NET

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

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

于 2013-07-22T14:24:24.230 回答