2

我想知道在这种情况下是否

  1. 您获得的读取次数多于写入次数
  2. 您选择的 SQL 服务器便宜/免费,并提供快速的镜像/复制服务
  3. 你的数据库不是特别大

与其拥有单独的 SQL 服务器,不如在每台机器上都有一个 SQL 实例从主服务器获取即时更新。这样,在执行所有读取查询时不会有网络延迟,但由于 SQL 实例必须执行,因此会影响每台机器的性能。整体性能会更好吗?还有其他可能出现的优点/缺点吗?

4

4 回答 4

5

您的 SQL Server 应该始终与网络服务器位于不同的盒子上,这是毫无疑问的。

您拥有多少数据库服务器和网络服务器,以及它们如何镜像(或以其他方式)取决于您如何扩展您的应用程序。

您在另一台机器上拥有 SQL Server,因为它需要(并且值得)大量 RAM。

于 2009-08-17T11:01:36.087 回答
1

拥有数据库的只读副本是一种非常常见的架构模式。我们接受它们有一定程度的陈旧性,也许它们甚至每天只更新一次。

一般规则是,多个副本会在操作和管理方面引入复杂性,并且往往会引入数据不一致的可能性——几乎不可避免地,副本不会是完美的一步(或者制作它们的成本太高) .)

一个例子:如果你的复制处理中断了会发生什么。这样一些,但不是所有的副本都会变得陈旧。现在,您的用户开始看到截然不同的世界观。这对你有多重要?如果它是一个低价值数据的网站(例如,在伦敦郊区的名人目击事件),那也许没问题。如果它是现有库存,并且过时意味着您的客户无法下订单,那么也许您更关心。

我的建议:当您在凌晨 3 点坐在手术室时,在纸上盒装的级别上听起来很简单的事情并不总是这样。确保您可以轻松操作您的解决方案。

于 2009-08-17T11:17:35.447 回答
1

您的 SQL Server 如何便宜/免费?我应该说这种设置的许可成本会很严重。以零售价计算,每台服务器6000 美元。另请参阅Jeff关于成本的评论。一定要横向扩展 Web 服务器,但不要扩展您的 SQL Server,直到它几乎崩溃。

相反,您可能想考虑像VelocityNCache这样的分布式缓存。

无论哪种方式,首先使用一个 SQL 服务器运行您的站点并查看它如何应对负载,然后考虑跨服务器进行镜像/复制,否则您只是过早地进行优化。先测量!

于 2009-08-17T11:36:39.900 回答
0

一个直接的缺点是 SQL Server 中没有分布式锁协调器,因此您可能会遇到合并冲突,因为更新可以同时更改两个不同服务器上的同一行。

根据数据库的大小和 Web 服务器中的磁盘,您会发现您的网络延迟小于您将开始遭受的磁盘延迟,因为 Web 服务器磁盘的性能通常不如您提供给数据库。如果您想要这种性能,您将购买每个 Web 服务器。

复制性能也不是没有延迟,事务的分配不是“免费”的,必须计划仔细维护事务日志,以确保您没有得到日志碎片(事务日志中的 vlog 太多),这会杀死复制性能。

于 2009-08-17T11:04:58.297 回答