目录
数据库服务器可以共同工作,以允许在主服务器故障时,第二服务器快速接管(高可用性),或允许数台计算机处理相同数据(负载平衡)。理想情况下,数据库服务器可以无缝地协同工作。处理静态网页的网络服务器可以通过仅仅将网络请求负载均衡到多台机器来非常容易地进行合并。事实上,只读数据库服务器也可以相对轻松地进行合并。遗憾的是,大多数数据库服务器的请求包含读/写混合,而读/写服务器的合并难度大得多。之所以会出现这种情况是因为,虽然只需要将只读数据放在每台服务器上一次,但对任何服务器的写入都必须传播到所有服务器,以便对这些服务器的未来读取请求返回一致的结果。
这种同步问题是服务器协同工作的根本难题。由于没有单一解决方案可以消除同步问题对所有用例的影响,因此有多种解决方案。每种解决方案都以不同的方式解决这个问题,并最大限度地减少其对特定工作负载的影响。
一些解决方案通过只允许一台服务器修改数据来处理同步问题。能够修改数据的服务器被称为读/写服务器、主服务器或主服务器。跟踪主服务器中的更改的服务器被称为备服务器或辅助服务器。在被提升至主服务器之前断开的备服务器称为预热备用服务器,能接受连接和提供只读查询的服务器称为热备用服务器。
一些解决方案是同步的,这意味着数据修改事务在所有服务器都提交事务之前不被视为已提交。这可保证故障转移不会丢失任何数据,并且所有负载平衡服务器无论查询哪台服务器都将返回一致的结果。相比之下,异步解决方案允许提交和向其他服务器传播之间存在一定延迟,这有可能导致一些事务在切换至一台备份服务器过程中丢失,并且负载平衡服务器可能返回稍旧的结果。当同步解决方案太慢时,可使用异步通信。
解决方案还可以按其粒度进行分类。一些解决方案只能处理整个数据库服务器,而另一些解决方案允许在每个表或每个数据库级别进行控制。
在任何选择中都必须考虑性能。功能和性能之间通常存在权衡。例如,通过低速网络进行完全同步的解决方案可能会将性能降低一半以上,而异步解决方案的性能影响可能微乎其微。
本部分的其余内容概述了各种故障转移、复制和负载平衡解决方案。