国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

帶心跳功能的連接池技術(shù)研究

2015-05-15 10:19:03郭興吉李淑珍文永革
現(xiàn)代計(jì)算機(jī) 2015年3期
關(guān)鍵詞:客戶端組件服務(wù)器

郭興吉,李淑珍,文永革

(綿陽師范學(xué)院,綿陽 621000)

帶心跳功能的連接池技術(shù)研究

郭興吉,李淑珍,文永革

(綿陽師范學(xué)院,綿陽 621000)

在基于B/S或C/S架構(gòu)的多層應(yīng)用系統(tǒng)設(shè)計(jì)中,往往存在大量的TCP/IP客戶連接和數(shù)據(jù)庫信息存取操作。決定系統(tǒng)性能優(yōu)劣的兩個(gè)重要因素,一是如何快速建立數(shù)據(jù)庫連接;二是如何避免出現(xiàn)死連接。在對數(shù)據(jù)庫連接池技術(shù)和死連接產(chǎn)生原因進(jìn)行分析的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)帶心跳功能的連接池。

心跳包;數(shù)據(jù)庫;連接池

0 引言

在當(dāng)今互聯(lián)網(wǎng)時(shí)代,各行各業(yè)中凡涉及信息管理,無一例外都會利用計(jì)算機(jī)進(jìn)行管理;為了提高信息的共享度和安全性,采用信息與系統(tǒng)程序分離存儲技術(shù),即信息存儲于遠(yuǎn)程數(shù)據(jù)庫服務(wù)器,應(yīng)用系統(tǒng)程序存儲于終端客戶計(jì)算機(jī)中。無論采用B/S還是C/S結(jié)構(gòu)的應(yīng)用系統(tǒng)架構(gòu),由于信息安全,都會采用多層結(jié)構(gòu)體系(本文以最常用的三層結(jié)構(gòu)為例進(jìn)行介紹)訪問數(shù)據(jù)庫中信息。Delphi作為一種成熟、開發(fā)效率高、使用廣泛的多平臺應(yīng)用軟件開發(fā)工具,它以其面向?qū)ο?、安全性、平臺無關(guān)性、多線程和分布式等特性而著稱?;贒elphi的多層應(yīng)用系統(tǒng),能快速處理各種復(fù)雜的數(shù)據(jù)維護(hù)操作、捕獲各種錯(cuò)誤信息、高效響應(yīng)眾多用戶的信息需求,等等。而決定應(yīng)用系統(tǒng)響應(yīng)效率的重要因素就是(不考慮硬件配置性能)數(shù)據(jù)庫的連接速度和與服務(wù)器之間的連接數(shù)。

當(dāng)終端客戶需要使用數(shù)據(jù)庫服務(wù)器信息時(shí),首先需要在客戶機(jī)與服務(wù)器之間建立網(wǎng)絡(luò)連接通道,在此基礎(chǔ)上,才能建立與數(shù)據(jù)庫之間的連接。在建立與數(shù)據(jù)庫之間的連接時(shí),數(shù)據(jù)庫引擎需要為連接配置一系列系統(tǒng)資源,如內(nèi)存、數(shù)據(jù)庫對象、全域SQL空間等。當(dāng)終端客戶用完數(shù)據(jù)庫信息而釋放數(shù)據(jù)庫連接時(shí),數(shù)據(jù)庫引擎會關(guān)閉數(shù)據(jù)庫連接、釋放與之配套的系統(tǒng)資源;當(dāng)終端客戶結(jié)束應(yīng)用程序運(yùn)行時(shí),釋放網(wǎng)絡(luò)連接通道。顯然,最頻繁的是數(shù)據(jù)庫連接的建立與釋放。這樣一個(gè)建立和釋放過程,將消耗服務(wù)器較長的時(shí)間。如果有許多用戶不斷訪問數(shù)據(jù)庫,數(shù)據(jù)庫引擎將不斷重復(fù)這樣的資源分配和釋放,導(dǎo)致終端客戶連接數(shù)據(jù)庫的延遲,嚴(yán)重影響系統(tǒng)程序的執(zhí)行效率。另外,由于網(wǎng)絡(luò)通道不可預(yù)知的原因,例如,客戶端異常掉線或拔出網(wǎng)線、網(wǎng)絡(luò)通道出現(xiàn)故障等,將會在服務(wù)器上殘留一條TCP/IP死連接,如果客戶端用該連接通道連接有數(shù)據(jù)庫,與數(shù)據(jù)庫的連接也將成為死連接。如果大量客戶端并發(fā),可能產(chǎn)生的死TCP連接和數(shù)據(jù)庫連接過多,會消耗大量服務(wù)器內(nèi)存,導(dǎo)致服務(wù)器內(nèi)存耗盡而宕機(jī)。為了解決用戶需求響應(yīng)效率,提高服務(wù)器的健壯性,帶心跳功能的數(shù)據(jù)庫連接池技術(shù)應(yīng)運(yùn)而生。

1 三層結(jié)構(gòu)模型

如圖1為典型的三層結(jié)構(gòu)模型。

從圖中可以看出,客戶端程序并不直接對數(shù)據(jù)庫進(jìn)行操作,而是向中間層的應(yīng)用服務(wù)器提交數(shù)據(jù)庫操作申請,由應(yīng)用服務(wù)器中轉(zhuǎn),向目標(biāo)數(shù)據(jù)庫服務(wù)器申請數(shù)據(jù),并將申請得到的數(shù)據(jù)集轉(zhuǎn)發(fā)給客戶端。其中,應(yīng)用服務(wù)器可以與數(shù)據(jù)庫使用同一服務(wù)器,也可以分設(shè);數(shù)據(jù)庫服務(wù)器可以只有一臺,也可以任意多臺。

從圖中還可以看出,一方面,當(dāng)網(wǎng)絡(luò)連接通道出現(xiàn)異常時(shí),在應(yīng)用服務(wù)器上建立的TCP/IP連接就成為了一個(gè)死連接,客戶端利用該通道建立的數(shù)據(jù)庫連接也就成為了死連接。解決該問題的技術(shù)之一就是“心跳包”技術(shù)。另一方面,在應(yīng)用服務(wù)器端,同時(shí)存在大量的數(shù)據(jù)庫連接,每一個(gè)數(shù)據(jù)庫連接都需要相應(yīng)的數(shù)據(jù)庫組件、內(nèi)存等的支撐,這些組件的建立、管理與維護(hù)需要耗費(fèi)服務(wù)器一定的時(shí)間開銷。如果存在大量的客戶端數(shù)據(jù)庫申請,服務(wù)器對數(shù)據(jù)庫組件、內(nèi)存的管理與維護(hù)所需時(shí)間開銷將直接導(dǎo)致客戶端響應(yīng)效率的低下。解決該問題的技術(shù)之一就是“連接池”技術(shù)。因此,帶心跳功能的連接池技術(shù)解決的是在應(yīng)用服務(wù)器上產(chǎn)生的TCP/IP、數(shù)據(jù)庫死連接和數(shù)據(jù)庫連接效率的問題。

圖1 典型的三層結(jié)構(gòu)模型

2 心跳包技術(shù)及其實(shí)現(xiàn)

解決TCP/IP死連接最便捷的方法是直接采用TCP/IP協(xié)議中提供的心跳包技術(shù)。

(1)TCP keep-alive原理

一個(gè)TCP keep-alive包是一個(gè)簡單的ACK(Acknowledgement),該ACK包內(nèi)容為一個(gè)比當(dāng)前連接序列號小于1的包。主機(jī)接收到這些ACKs會返回一個(gè)包含當(dāng)前序列號的ACK包。

Keep-alives一般被用來驗(yàn)證遠(yuǎn)端連接是否有效。如果該連接沒有其他數(shù)據(jù)被傳輸,或者更高級別的keep-alives被傳送,keep-alives在每個(gè)KeepAliveTime被發(fā)送(默認(rèn)是2個(gè)小時(shí))。如果沒有收到keep-alive應(yīng)答,keep-alive將在每間隔KeepAliveInterval秒重發(fā)一次(默認(rèn)為1秒)。

(2)心跳包技術(shù)實(shí)現(xiàn)

根據(jù)TCP keep-alive原理,定義如下結(jié)構(gòu)的心跳包記錄:

在三層結(jié)構(gòu)應(yīng)用服務(wù)器端的DSServer1組件,建立OnConnect事件:

該事件中,如果1分鐘內(nèi)該連接沒有與客戶端存在信息通信,則主動(dòng)向客戶機(jī)發(fā)送一個(gè)keep-alive包,如果沒有收到客戶機(jī)應(yīng)答的ACK包,則每間隔3秒發(fā)送一次,共發(fā)送5次,如果均未收到應(yīng)答,則認(rèn)為當(dāng)前服務(wù)器與客戶機(jī)之間網(wǎng)絡(luò)通道出現(xiàn)故障,關(guān)閉當(dāng)前TCP/IP連接,此時(shí)DSServer1組件將產(chǎn)生disconnect事件。

在該事件中,關(guān)閉連接池中與該連接端口有關(guān)的全部數(shù)據(jù)庫連接。否則,雖然解決了網(wǎng)絡(luò)TCP/IP的死連接,但仍然存在數(shù)據(jù)庫死連接的現(xiàn)象(特別地,如果需要統(tǒng)計(jì)客戶端利用該端口的網(wǎng)絡(luò)連接數(shù),可以在connect和disconnect事件中實(shí)現(xiàn))。

3 連接池技術(shù)及其實(shí)現(xiàn)

(1)連接池原理

數(shù)據(jù)庫連接池就是把由應(yīng)用服務(wù)器建立的一定數(shù)量的連接對象放到一個(gè)緩沖池中,等待其他對象調(diào)用。數(shù)據(jù)庫連接池技術(shù)的原理是:當(dāng)有終端客戶應(yīng)用程序申請進(jìn)行數(shù)據(jù)庫連接時(shí),首先從緩沖池中查詢是否有空閑連接對象,如果有則連接供客戶使用;如果沒有,則客戶應(yīng)用程序等待,直至有客戶使用完并歸還連接對象后再使用??蛻魬?yīng)用程序在使用完連接對象并歸還給連接池時(shí),不釋放系統(tǒng)資源,只標(biāo)識連接對象為“空閑”狀態(tài),取消連接對象相關(guān)屬性設(shè)置。

(2)連接池類型定義

根據(jù)數(shù)據(jù)庫連接池的工作原理,連接池類型定義為一個(gè)記錄類型:

其中,元素name用于標(biāo)識連接名稱,作為客戶使用結(jié)束數(shù)據(jù)庫連接后歸還連接的依據(jù);qry用于連接數(shù)據(jù)表;prov用于數(shù)據(jù)集接口;mport用于記錄與客戶端連接使用的端口號;state用于標(biāo)識該連接是否空閑。

(3)連接池定義

連接池規(guī)模,是指可同時(shí)接受客戶端連接數(shù)據(jù)庫的個(gè)數(shù)。其大小應(yīng)依據(jù)服務(wù)器性能、所承擔(dān)的客戶申請數(shù)據(jù)庫的數(shù)量等因素確定。如果客戶可能頻繁訪問數(shù)據(jù)庫,則要求服務(wù)器性能較優(yōu),連接池?cái)?shù)量建議定得較大(上萬數(shù)量級);相反可定義連接池上千數(shù)量級。

在Delphi中,在全局變量區(qū)定義連接池的大小,如:

其中,g_MaxPoolSize是由const定義的常量,值由上述原則確定。

(4)連接池的使用

①連接池的申請

當(dāng)客戶申請數(shù)據(jù)庫連接時(shí),首先查找連接池中的空閑連接,如果存在則進(jìn)一步查看該連接的數(shù)據(jù)庫組件和數(shù)據(jù)集組件是否建立,如果已建立則分配使用,同時(shí)標(biāo)注連接端口號和連接狀態(tài);如果未建立,則創(chuàng)建數(shù)據(jù)庫組件和數(shù)據(jù)集組件,標(biāo)注連接端口號和連接狀態(tài)。向客戶返回連接名稱;如果不存在空閑,則向客戶返回一個(gè)nil。

②歸還數(shù)據(jù)連接組件到連接池

當(dāng)客戶使用結(jié)束數(shù)據(jù)表時(shí),需要?dú)w還數(shù)據(jù)連接組件到連接池。此時(shí),關(guān)閉與數(shù)據(jù)表的連接,同時(shí)設(shè)置對應(yīng)連接的端口號為0,連接狀態(tài)為false。

4 結(jié)語

帶心跳功能的連接池技術(shù),已經(jīng)多年實(shí)際使用證明該技術(shù)具有高可靠性、高穩(wěn)定性和高運(yùn)行效率的特點(diǎn)。結(jié)合客戶端心跳包思想的應(yīng)用,還可以解決兩層結(jié)構(gòu)的數(shù)據(jù)庫死連接問題。

[1] 胡志坤,何多昌,桂衛(wèi)華,陽春華.基于改進(jìn)心跳包機(jī)制的整流遠(yuǎn)程監(jiān)控系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2008(02)

[2] 周鳳石.基于Windows Socket的網(wǎng)絡(luò)通信中的心跳機(jī)制原理及其實(shí)現(xiàn)[J].沙洲職業(yè)工學(xué)院學(xué)報(bào),2009(03)

[3] 侯宗浩,董小社,鄭守淇,劉愛華,胡雷鈞.一種支持負(fù)載均衡的多機(jī)心跳模型[J].小型微型計(jì)算機(jī)系統(tǒng),2005(01)

[4] 康明光,廖勝利,程春田,馬慧芳,蔡華祥.管家式自適應(yīng)數(shù)據(jù)庫連接池及其應(yīng)用[J].南方電網(wǎng)技術(shù),2012(01)

[5] 楊長春.數(shù)據(jù)庫連接池技術(shù)的分析與研究[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

郭興吉,男,四川南充人,大專,教授,研究方向?yàn)槟J阶R別、算法設(shè)計(jì)與分析

2014-12-09

2014-12-29

李淑珍,女,四川南充人,本科,助理研究員,研究方向?yàn)闄n案存儲的算法設(shè)計(jì)與分析

文永革,男,四川遂寧人,碩士研究生,副教授,研究方向?yàn)樘摂M現(xiàn)實(shí)、算法設(shè)計(jì)與分析

猜你喜歡
客戶端組件服務(wù)器
無人機(jī)智能巡檢在光伏電站組件診斷中的應(yīng)用
能源工程(2022年2期)2022-05-23 13:51:50
新型碎邊剪刀盤組件
U盾外殼組件注塑模具設(shè)計(jì)
通信控制服務(wù)器(CCS)維護(hù)終端的設(shè)計(jì)與實(shí)現(xiàn)
縣級臺在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
傳媒評論(2018年4期)2018-06-27 08:20:24
孵化垂直頻道:新聞客戶端新策略
傳媒評論(2018年4期)2018-06-27 08:20:16
基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
電子測試(2018年10期)2018-06-26 05:53:34
得形忘意的服務(wù)器標(biāo)準(zhǔn)
計(jì)算機(jī)網(wǎng)絡(luò)安全服務(wù)器入侵與防御
風(fēng)起新一代光伏組件膜層:SSG納米自清潔膜層
太陽能(2015年11期)2015-04-10 12:53:04
宁陵县| 阜新| 四子王旗| 平舆县| 通许县| 新蔡县| 灵石县| 昭苏县| 凤冈县| 买车| 博爱县| 南宫市| 龙南县| 双牌县| 凤冈县| 牟定县| 青海省| 湾仔区| 武强县| 阳曲县| 松原市| 抚远县| 冀州市| 喜德县| 洞口县| 龙泉市| 孟连| 白玉县| 枞阳县| 博客| 东兰县| 青阳县| 高安市| 富源县| 大洼县| 叙永县| 孟村| 乌海市| 介休市| 图木舒克市| 即墨市|