怎样实现数据库负载均衡集群

这些天一直在思考如何实现数据库负载均衡集群?

数据库负载均衡集群的目的:实现数据的读和写的负载均衡。

1.使用数据库自身提供的事务复制可以实现数据库负载均衡集群,但有缺点:通过事务复制实现数据同步大约需要1~2秒的时间,在同步的过程中,数据有可能发生脏读。如果使用对等事务复制,有可能由于多个数据库服务器都同时更改同一行数据而发生冲突,一旦发生冲突,则更改可能失败,而且处理这种冲突会非常复杂。所以这种方案看起来似乎非常简单(数据库自带功能),但细想却不可行。

2.自行开发应用服务器可以实现数据库负载均衡集群。数据库事务分为读事务和写事务俩种。

首先讲写事务的处理:不使用数据库本身提供的那些数据同步技术,应用服务器依次序将写事务在各数据库中执行,这种执行要么全部成功,要么全部失败回滚,保证各数据库中的数据保持一致性。这样,各数据库之间不需要做任何附加的数据同步功能。这种方法是完全可行的。但也有缺点:写动作执行的比较慢,因为要依次写入各数据库服务器,这显然比只写入一个数据库服务器花的时间多。可以看出,这种数据库负载均衡集群是完全通过应用服务器来实现的。

3.应用服务器实现数据库负载均衡集群的实现方法

首先,应用服务器要实现负载均衡的功能,这可以通过使用代理服务器来实现。具体实现方法我在其它的博文里面有讲。此处省略。

应用服务器如何判断客户端提交的是读事务还是写事务?

一般地应用服务器的远程方法是会提供:读事务的数据查询方法和写事务的执行方法的,客户端分别调用应用服务器的读事务方法和写事务方法。

但调用的如果是存储过程呢?

那也有办法,可以通过存储过程的名字作文章,以区分是包含读事务的存储过程还是写事务的存储过程。

4.如果数据库结构发生变更(比如表结构、存储过程、视图),在各数据库服务器之间如何同步?

有俩个办法:一是将这些结构变化的脚本依次在各数据库服务器得到执行。二是使用数据库本身提供的复制功能(只复制结构变化)进行同步。

 

posted @ 2013-11-30 15:40  delphi中间件  阅读(4094)  评论(0编辑  收藏  举报