主-主数据库系统架构
经常有人问我们,如何建立分离式网络系统,将一组服务器放置在中国,供中国用户使用;另一组服务器放置在国外,供国际用户使用。
从根本上来讲,这是一个很困难的问题,没有最佳选择方案。有很多选择方案,如采用Mongo数据库或使用主-主复制(即主机-主机复制),表面看起来很管用,但是会遇到很多几乎无法解决的实际问题,其实,这些方案根本就不能采用。
现今,我们还没有最钟意的解决方案,很多时候,我们唯一的选择就是将一套独立的系统放置在中间地理位置,如香港或东京的AWS,我们的用意在于,可以确保到中国大陆及港澳台地区以及到世界的其它国家和地区的连接基本可靠,当然,在中国,连接性能因地理位置不同而有所差异。
一个新的选择方案便是采用Tungsten Replicator, 它是一种数据库复制管理系统,最近,人们正在努力地开发此系统。它是开源的/商业性的,由Continuent研制的,可通过www.continuent.com, 获取详细信息。我们还未采用该系统,但是也许很快将会采用。
最近,我们也在考虑采用双重数据库,双重主-从系统(即主机-从机系统)在某些情况下非常实用,尤其适用于两个分离式的系统或在地理位置上是分离式的系统。例如,在电子商务或是交易类系统中,一方是上传产品和库存信息,而另一方是发出采购需求。关键是能够在两方实现彻底的读/写分离,或至少在两个数据库之间实现彻底的读/写分离。
基本理念就是:采用两组服务器,一组在中国大陆,另一组在香港,即一组服务器称作SA,另一组称作SB。在每台服务器上,安装两组完全独立的MySQL实例(嗯,都采用相同的二进制,但是采用两组不同的配置、不同的数据目录结构及不同的init脚本)。我们将这些实例称作IA 和IB, 有各自的独立的生产数据库,称作DBA 和DBB。 这一构想就是:大陆服务器SA 将成为DBA主机及DBB从机,而香港服务器将成为DBA从机及DBB主机。尽管两组服务器侦听端口号等各不相同,但是却进行正常的互相复制工作。
然后,在大陆,应用程序的很多工作在DBA上实现,仅在DBB上进行读操作。而在香港,服务器的很多工作将通过DBB实现,在DBA上仅实现读操作。
因为复制工作是服务器层面上的事情,不必在每个数据库上进行,所以,为确保进行合理的分离式控制及数据库复制,您将需要采用两个实例。
这事并不简单,但是如果您能够实现读/写分离,即分别在本地主机上实现写操作,在本地从机上实现读操作,那么您的系统会很健壮。如果您能够做到这些,您还需要谨慎的一点是:在全球范围内在两个地理位置建立双重系统,这些系统必须具有良好的性能且实现可靠的数据传输。
(Authored by Steve Mushero / ChinaNetCloud CEO & CTO 本博客英文原文请点此查看)