APP下载

带心跳功能的连接池技术研究

2015-05-15郭兴吉李淑珍文永革

现代计算机 2015年3期
关键词:客户端组件服务器

郭兴吉,李淑珍,文永革

(绵阳师范学院,绵阳 621000)

带心跳功能的连接池技术研究

郭兴吉,李淑珍,文永革

(绵阳师范学院,绵阳 621000)

在基于B/S或C/S架构的多层应用系统设计中,往往存在大量的TCP/IP客户连接和数据库信息存取操作。决定系统性能优劣的两个重要因素,一是如何快速建立数据库连接;二是如何避免出现死连接。在对数据库连接池技术和死连接产生原因进行分析的基础上,设计并实现带心跳功能的连接池。

心跳包;数据库;连接池

0 引言

在当今互联网时代,各行各业中凡涉及信息管理,无一例外都会利用计算机进行管理;为了提高信息的共享度和安全性,采用信息与系统程序分离存储技术,即信息存储于远程数据库服务器,应用系统程序存储于终端客户计算机中。无论采用B/S还是C/S结构的应用系统架构,由于信息安全,都会采用多层结构体系(本文以最常用的三层结构为例进行介绍)访问数据库中信息。Delphi作为一种成熟、开发效率高、使用广泛的多平台应用软件开发工具,它以其面向对象、安全性、平台无关性、多线程和分布式等特性而著称。基于Delphi的多层应用系统,能快速处理各种复杂的数据维护操作、捕获各种错误信息、高效响应众多用户的信息需求,等等。而决定应用系统响应效率的重要因素就是(不考虑硬件配置性能)数据库的连接速度和与服务器之间的连接数。

当终端客户需要使用数据库服务器信息时,首先需要在客户机与服务器之间建立网络连接通道,在此基础上,才能建立与数据库之间的连接。在建立与数据库之间的连接时,数据库引擎需要为连接配置一系列系统资源,如内存、数据库对象、全域SQL空间等。当终端客户用完数据库信息而释放数据库连接时,数据库引擎会关闭数据库连接、释放与之配套的系统资源;当终端客户结束应用程序运行时,释放网络连接通道。显然,最频繁的是数据库连接的建立与释放。这样一个建立和释放过程,将消耗服务器较长的时间。如果有许多用户不断访问数据库,数据库引擎将不断重复这样的资源分配和释放,导致终端客户连接数据库的延迟,严重影响系统程序的执行效率。另外,由于网络通道不可预知的原因,例如,客户端异常掉线或拔出网线、网络通道出现故障等,将会在服务器上残留一条TCP/IP死连接,如果客户端用该连接通道连接有数据库,与数据库的连接也将成为死连接。如果大量客户端并发,可能产生的死TCP连接和数据库连接过多,会消耗大量服务器内存,导致服务器内存耗尽而宕机。为了解决用户需求响应效率,提高服务器的健壮性,带心跳功能的数据库连接池技术应运而生。

1 三层结构模型

如图1为典型的三层结构模型。

从图中可以看出,客户端程序并不直接对数据库进行操作,而是向中间层的应用服务器提交数据库操作申请,由应用服务器中转,向目标数据库服务器申请数据,并将申请得到的数据集转发给客户端。其中,应用服务器可以与数据库使用同一服务器,也可以分设;数据库服务器可以只有一台,也可以任意多台。

从图中还可以看出,一方面,当网络连接通道出现异常时,在应用服务器上建立的TCP/IP连接就成为了一个死连接,客户端利用该通道建立的数据库连接也就成为了死连接。解决该问题的技术之一就是“心跳包”技术。另一方面,在应用服务器端,同时存在大量的数据库连接,每一个数据库连接都需要相应的数据库组件、内存等的支撑,这些组件的建立、管理与维护需要耗费服务器一定的时间开销。如果存在大量的客户端数据库申请,服务器对数据库组件、内存的管理与维护所需时间开销将直接导致客户端响应效率的低下。解决该问题的技术之一就是“连接池”技术。因此,带心跳功能的连接池技术解决的是在应用服务器上产生的TCP/IP、数据库死连接和数据库连接效率的问题。

图1 典型的三层结构模型

2 心跳包技术及其实现

解决TCP/IP死连接最便捷的方法是直接采用TCP/IP协议中提供的心跳包技术。

(1)TCP keep-alive原理

一个TCP keep-alive包是一个简单的ACK(Acknowledgement),该ACK包内容为一个比当前连接序列号小于1的包。主机接收到这些ACKs会返回一个包含当前序列号的ACK包。

Keep-alives一般被用来验证远端连接是否有效。如果该连接没有其他数据被传输,或者更高级别的keep-alives被传送,keep-alives在每个KeepAliveTime被发送(默认是2个小时)。如果没有收到keep-alive应答,keep-alive将在每间隔KeepAliveInterval秒重发一次(默认为1秒)。

(2)心跳包技术实现

根据TCP keep-alive原理,定义如下结构的心跳包记录:

在三层结构应用服务器端的DSServer1组件,建立OnConnect事件:

该事件中,如果1分钟内该连接没有与客户端存在信息通信,则主动向客户机发送一个keep-alive包,如果没有收到客户机应答的ACK包,则每间隔3秒发送一次,共发送5次,如果均未收到应答,则认为当前服务器与客户机之间网络通道出现故障,关闭当前TCP/IP连接,此时DSServer1组件将产生disconnect事件。

在该事件中,关闭连接池中与该连接端口有关的全部数据库连接。否则,虽然解决了网络TCP/IP的死连接,但仍然存在数据库死连接的现象(特别地,如果需要统计客户端利用该端口的网络连接数,可以在connect和disconnect事件中实现)。

3 连接池技术及其实现

(1)连接池原理

数据库连接池就是把由应用服务器建立的一定数量的连接对象放到一个缓冲池中,等待其他对象调用。数据库连接池技术的原理是:当有终端客户应用程序申请进行数据库连接时,首先从缓冲池中查询是否有空闲连接对象,如果有则连接供客户使用;如果没有,则客户应用程序等待,直至有客户使用完并归还连接对象后再使用。客户应用程序在使用完连接对象并归还给连接池时,不释放系统资源,只标识连接对象为“空闲”状态,取消连接对象相关属性设置。

(2)连接池类型定义

根据数据库连接池的工作原理,连接池类型定义为一个记录类型:

其中,元素name用于标识连接名称,作为客户使用结束数据库连接后归还连接的依据;qry用于连接数据表;prov用于数据集接口;mport用于记录与客户端连接使用的端口号;state用于标识该连接是否空闲。

(3)连接池定义

连接池规模,是指可同时接受客户端连接数据库的个数。其大小应依据服务器性能、所承担的客户申请数据库的数量等因素确定。如果客户可能频繁访问数据库,则要求服务器性能较优,连接池数量建议定得较大(上万数量级);相反可定义连接池上千数量级。

在Delphi中,在全局变量区定义连接池的大小,如:

其中,g_MaxPoolSize是由const定义的常量,值由上述原则确定。

(4)连接池的使用

①连接池的申请

当客户申请数据库连接时,首先查找连接池中的空闲连接,如果存在则进一步查看该连接的数据库组件和数据集组件是否建立,如果已建立则分配使用,同时标注连接端口号和连接状态;如果未建立,则创建数据库组件和数据集组件,标注连接端口号和连接状态。向客户返回连接名称;如果不存在空闲,则向客户返回一个nil。

②归还数据连接组件到连接池

当客户使用结束数据表时,需要归还数据连接组件到连接池。此时,关闭与数据表的连接,同时设置对应连接的端口号为0,连接状态为false。

4 结语

带心跳功能的连接池技术,已经多年实际使用证明该技术具有高可靠性、高稳定性和高运行效率的特点。结合客户端心跳包思想的应用,还可以解决两层结构的数据库死连接问题。

[1] 胡志坤,何多昌,桂卫华,阳春华.基于改进心跳包机制的整流远程监控系统[J].计算机应用,2008(02)

[2] 周凤石.基于Windows Socket的网络通信中的心跳机制原理及其实现[J].沙洲职业工学院学报,2009(03)

[3] 侯宗浩,董小社,郑守淇,刘爱华,胡雷钧.一种支持负载均衡的多机心跳模型[J].小型微型计算机系统,2005(01)

[4] 康明光,廖胜利,程春田,马慧芳,蔡华祥.管家式自适应数据库连接池及其应用[J].南方电网技术,2012(01)

[5] 杨长春.数据库连接池技术的分析与研究[J].硅谷,2008(13)

Research on the Connection Pool Technology with Heartbeat Function

GUO Xing-ji,LI Shu-zhen,WEN Yong-ge
(Mianyang Normal University,Mianyang 621000)

A large number of TCP/IP client connections and access operations of database information often exist in the design of multi-application system based on B/S or C/S architecture.The two most important factors that determine the system performance is how to establish the database connection rapidly,and the other one is how to avoid the appearance of dead joints.Designs and realizes a connection pool with heartbeat function,according to the analysis of the connection pool technology and the cause of the dead joints.

Heartbeat;Database;Connection Pool

1007-1423(2015)03-0065-05

10.3969/j.issn.1007-1423.2015.03.018

郭兴吉,男,四川南充人,大专,教授,研究方向为模式识别、算法设计与分析

2014-12-09

2014-12-29

李淑珍,女,四川南充人,本科,助理研究员,研究方向为档案存储的算法设计与分析

文永革,男,四川遂宁人,硕士研究生,副教授,研究方向为虚拟现实、算法设计与分析

猜你喜欢

客户端组件服务器
无人机智能巡检在光伏电站组件诊断中的应用
新型碎边剪刀盘组件
U盾外壳组件注塑模具设计
通信控制服务器(CCS)维护终端的设计与实现
如何看待传统媒体新闻客户端的“断舍离”?
PowerTCP Server Tool
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
得形忘意的服务器标准