一般的负载均衡指的是服务器,现在要求数据库级别实现负载均衡,像oracle的rac。
SQL Server 负载均衡集群
一个应用系统随着业务量的提高,以及访问量和数据流量的快速增长,各个核心部分的处理性能和计算强度也相应增大,使得单一设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,必将造成现有资源的浪费,而且下一次业务量的提升,又将导致再一次硬件升级的高额成本投入。于是,负载均衡机制应运而生。 对于应用系统的负载均衡的硬件和软件比比皆是,因为应用服务器上的程序基本上认为是不变化的,而且一般的各个应用服务器上的程序是不交互的。因此应用服务器的负载均衡非常好做,只需要能够进行分流的软件或者硬件把多个客户端的连接分配到多个应用服务器上去即可。
因为数据库内的数据是频繁变化的,为了数据的一致性以及锁资源的分配协调等,所以像应用服务器那样只有分流是不够的,各个节点需要频繁的交互。这也是数据库集群软件难做的原因,当然也是卖的贵的原因了。
Oracle Real Application Clusters
对于数据库负载均衡,大家最为耳熟能详的就是Oracle RAC了。RAC是双机并行服务器(8i及以前版本称作Oracle Parallel Server,OPS),用来在集群环境下实现多机共享数据库,以保证应用的高可用性,同时可以自动实现并行处理及均分负载,还能实现数据库在故障时的排错和无断点恢复。它可以自动进行负载平衡、故障修复和规划停机时间,以支持高可用性应用程序。若并行服务器中某节点失效,透明的应用程序容错能够把用户自动转接到另一节点上继续运行,应用程序在用户没有察觉的情况下继续执行。这使周期性和非周期性发生故障的系统增大了连续可用性。进程的失效可以完全透明地转移到另一节点上去,通过适当地配置,可以指定所有查询都在客户端进行缓存,这样它们便可以在转移后的节点上重新设置。
Moebius for SQL Server
截至到SQL Server 2008,微软还是没有推出负载均衡组件,只能靠第三方软件来实现,好在这个软件是几个从微软出来的人写的,也算是个小小的巧合。说他们是微软出来的并不是说他们的技术多厉害,而是他们利用SQL Server的一些内部接口把集群做的非常透明, 无论是应用程序的调用还是开发/管理人员的使用都和面对一个数据库一样。
他们的实现原理是这样的:和SQL Server镜像一样,每个数据库节点都有自己的数据,也就是无共享磁盘架构。他们称之为“中间件”的程序宿主在数据库的内部,每个节点数据库上写入数据导致数据变化时,SQL Server会激活“中间件”,“中间件”把变化的数据同步到其他的节点上。其他节点发生变化也是一样。因为“中间件”宿主在数据库内, 所以它能够把每个同步的Session和SQL Server的Session绑定到一起,也就是使用户的执行和数据的同步成为一个原子操作,从而保证数据在每时每刻都是一致的。因此查询可以随便到每个机器上去查,从而做到了真正的负载均衡。
这是一种叫"数据库路由器"的技术,这种技术的特点是灵活性好,但效率比RAC要低,毕竟RAC是在引擎里实现的不管怎么样有比没有强!