为什么要运用负载均衡

一般我们在数据库中的操作无非不就是增删改查这四个基本操作,最终数据库和磁盘文件打交道也就是读写操作。如果采用传统的一台服务器去运作,可能会在读写高峰时会出现一些无法预知的问题。这些我们或许可以通过优化应用代码结构,采用缓存技术等等,这些都在一定程度上是可以减轻数据库服务器的负载。但是,如果我们能将数据库读写操作分离开来,也就是使用负载均衡的方案来优化我们的系统结构。


场景

假设我们业务中有这样的场景:业务A正在进行一个比较耗时的查询,而业务B又需要进行数据的更新操作。在这种情况下,A操作一定程度上会对B操作带来了影响,因为A的耗时查询已经占用了部分数据库服务器的资源,这样的后果就是B的操作会出现延时、响应慢等情况,如果处于高峰期则有可能会造成数据库服务器崩溃(作一个最坏的打算,这是一个比较严重的后果)。


Oracle 数据库的解决方案

读写分离技术应该是大部分系统采用的一种方案。针对商业数据库Oracle,其研究的人也是甚少,相对于MySQL、PostgreSQL等开源的数据库,要实现读写分离功能是具备一定难度的(因为协议不开源,研究资料比较少)。在花了大量的时间和精力进行比较深入的研究后,我们研发了一款针对Oracle数据库的中间件产品。软件采用C++编写而成,只有一个可执行文件,不依赖任何组件,直接运行即可使用。目前仅支持Oracle11g的数据库和JDBC11gR2的客户端连接。在这里我主要介绍软件中的读写分离功能。


下载软件

软件可以在 http://www.onexsoft.com/ 网站上进行获取(目前只有Linux下的版本)。

下载完后运行

数据库负载均衡实现 oracle数据库负载均衡方案_数据库负载均衡实现


要使用读写分离只需这样启动即可

数据库负载均衡实现 oracle数据库负载均衡方案_Oracle_02

指定好master和slave并设置要登录的用户密码,再指定访问策略(目前支持master_only和read_slave策略)。要读写分离,使用read_slave即可。

这样启动后再用客户端连接此程序(默认是8221端口),进行各种操作,你会发现读写操作会路由到不同的机器上去了。

注:对于事务中的操作均到master,非事务的读操作会到slave;Statement 和 PrepareStatement 操作均支持。


软件稳定性测试

对于软件的稳定性,我们也做了比较多的测试,均没发现任何异常或者错误的地方。其中我们用BenchmarkSQL工具模拟了业务场景的测试。和直连相比,性能损失极小,可以忽略不计。

数据库负载均衡实现 oracle数据库负载均衡方案_负载均衡_03