多个服务器如何在数据库方面工作?

我不太了解服务器,但是我知道在硬件方面可以通过很多方法提高运行Web应用程序的性能。

例如,从一台服务器开始,您可以:

  • 数据库移到另一台服务器上。
  • 将静态文件移动到CDN上
  • 在负载均衡器后面使用多个Web服务器。

但是,如何扩展数据库服务器呢? 你可以有多个服务器运行相同的数据库? 如果是这样,通常如何工作?

我了解负载平衡器/多个Web服务器如何工作,但是可以将相同的方法应用于数据库服务器吗?

这是一个非常广泛的问题。

一般的答案是有很多方法可以做到这一点。 主要的两个是这些:

  • 复制
  • 聚类

复制是将数据库从一台机器复制到另一台机器的地方。 使用这种方法,理论上你至less应该有两个相同的数据库。 使用复制的数据库,您可以查询其中的任何数据; 你只需要小心写入,以便它们不会在服务器之间发生冲突。

集群使用共享数据存储和数据库服务器来识别数据存储共享并正确处理。 它还build议使用GFS等集群文件系统。

你可以做一些负载平衡; 但它很快变得棘手。 我发现最有用的东西是知道你的数据库通常做什么样的操作。 如果你有一个网站, 通常是它的读取。 跟踪应用程序(作为例子),你会有很多的写入。

如果你有很多的读取,你可以做很多只读镜像,在前面夹一个负载平衡器,你就完成了。 每个请求都是平衡的,所以每个请求获得最大的资源。

对于编写繁重的系统来说,这有点难度,因为当你添加一个新的服务器时,他们需要知道对方正在做什么 – 这是locking进来的地方。如果你有服务器A和B, A得到一个更新或插入请求,在它可以修改表之前,它必须说“嘿B,确保你不改变这个表,我正要改变它”(locking),然后提交改变。 这一切都发生在networking(通常),这意味着它可以是缓慢的(毫秒不usec),这可能会伤害性能。 当您添加服务器时,性能下降。 与A,B和C; 在提交之前,必须同时与B和C通话。

希望这可以作为db缩放的介绍。 我目前正在考虑Citrix Netscalers数据库负载平衡产品,可以帮助解决这些问题; 我build议至less看看他们对这个话题的文档:)

这实际上取决于数据库技术,但通常这是通过分片,主 – 主复制或主 – 从复制来完成的,所有写入到主设备和所有从设备读取。

还有很多其他的方法,但这些是最常见的。