当前,在大规模在线事务处理的系统中,普遍使用了OLTP中间来完成事务处理的核心业务逻辑,因而形成了“具有大量并发短小请求”的特点。其短小是指:对每个请求,中间件服务器的处理时间都是很短,而且数据量较小。与这种系统相对应的还有一种使用在线分析处理的系统,不仅客户端数量小,且对每一个请求服务器要做长时间、大数据量的处理。因此本文所关注的是前一种系统,由于该系统对响应时间要求很高,且容易出现单个服务器无法承受的情况,因而需要进行负载均衡,本文所讨论的就是负载均衡的问题。
目前,控制台的中间件负载均衡的方法有很多,比较常用的有两种:
一是轮询方法,类似于计算机操作系统的时间片轮转算法。其原理是将请求轮流分给每一个服务器,使任务得到平均分配。这种方法看起来简单和直观,但实际上有很多局限性,其中最突出的就是不能实时掌握服务器当前负载的情况,而将任务分配给负载过大乃至濒临崩溃的服务器,使相对“清闲”的服务器依然“清闲”。同时,由于平均分配任务的方法,是建立在假定每台服务器的处理能力一样的基础上的,这实际上是难以做到的。因为即使是同一公司同一型号的服务器,其性能在不同的运行环境中也是不一样的(与网络连接有关),而且有可能因买不到与原来同型号的设备(新设备可能性能更好,价格更便宜)而不利于以后的系统扩充。
二是主从节点的方法。原理是将多个服务器中的某个服务器作为主节点,其除了具有中间件的功能外,还充当中间件系统管理者的角色,用以实现负载的均衡,因此成为主从节点法。这种方法在一些大型商业中间件中已较多采用,确实起到了负载均衡的作用。当然,让主节点既作为中间件系统的管理者,又作为服务的一个提供者,也导致了一些问题的出现。其中最大的问题就是会因主节点的崩溃而导致系统的崩溃。因为在事务处理过程中会出现各种各样的异常情况,例如大量的请求集中在一起使存储器吃紧,以及受数据库系统性能的影响,使管理节点增加崩溃的可能性,导致系统崩溃的可能性等等。