想到了两个建议,不久前我们公司发生了类似的事情(收购的网站每月活跃用户超过 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 服务相关的项目。
缺点:你必须写它。你必须测试它。你必须支持它。