田相齋
(勝利地質(zhì)錄井公司信息中心 山東 東營 257064)
實時數(shù)據(jù)的服務(wù)器端接收軟件作用是接收數(shù)據(jù)后將其寫入到錄井中心數(shù)據(jù)庫中。經(jīng)過幾年的使用,系統(tǒng)發(fā)揮了很大的作用,但是也存在一些問題。(1)當網(wǎng)絡(luò)或系統(tǒng)發(fā)生問題時,缺乏自動連接機制,時常造成數(shù)據(jù)漏傳,需要人工手動重新連接;(2)軟件運行時占用系統(tǒng)資源過多,平均每臺服務(wù)器只能接收十幾個發(fā)送端數(shù)據(jù);(3)缺乏故障和異常報警、遠程異常提示的功能,容易漏掉重要傳輸資料,影響全面正確評價現(xiàn)場錄井質(zhì)量。因此需要對接收軟件進行重新的設(shè)計與開發(fā)。
數(shù)據(jù)網(wǎng)絡(luò)傳輸使用的是GPRS和衛(wèi)星傳輸網(wǎng)絡(luò),這種網(wǎng)絡(luò)性質(zhì)決定其不穩(wěn)定性,容易受到天氣、電磁信號、基站功率的影響。
原來的傳輸軟件使用TCP/IP協(xié)議,采用Socket連接方式進行數(shù)據(jù)傳輸,這種采用底層協(xié)議的操作需要有很多的優(yōu)化措施來保證程序的有效性。接收軟件耗費服務(wù)器資源太多就是Socket連接不斷占用系統(tǒng)資源,同時接收軟件設(shè)計時沒有采用多線程技術(shù),只用一個進程接收處理數(shù)據(jù),不能使數(shù)據(jù)多通道、并行處理,導致了數(shù)據(jù)在接受端阻塞,只能通過擴充服務(wù)器的方式來解決。設(shè)備的擴充既浪費了資金,又增添了系統(tǒng)的不穩(wěn)定性。
本軟件作為Client/Server軟件架構(gòu)的Server端,運行在服務(wù)器上,接收客戶端傳送的錄井數(shù)據(jù),存儲到數(shù)據(jù)庫服務(wù)器上。
軟件數(shù)據(jù)流包括系統(tǒng)采集的數(shù)據(jù)及存儲。接收程序接收到錄井數(shù)據(jù)后,先寫入內(nèi)存數(shù)據(jù)隊列中,同時提供數(shù)據(jù)給顯示隊列和消息隊列供界面顯示;本地數(shù)據(jù)保存程序從內(nèi)存數(shù)據(jù)隊列中讀取數(shù)據(jù),寫入本地數(shù)據(jù)庫;遠程數(shù)據(jù)保存程序從本地數(shù)據(jù)庫中讀取數(shù)據(jù),寫入到遠程業(yè)務(wù)數(shù)據(jù)庫中。
(1)數(shù)據(jù)接收部分
網(wǎng)絡(luò)數(shù)據(jù)傳輸采用的是Socket方式,服務(wù)器端開啟Socket接口,等待客戶端連接后,接收客戶端發(fā)送的數(shù)據(jù)。提供多網(wǎng)卡支持,單個服務(wù)器上的多個網(wǎng)卡可以同時接收來自多個客戶端的連接。能夠及時高效的接收客戶端的數(shù)據(jù)傳輸。
(2)數(shù)據(jù)存儲部分
將接收到的數(shù)據(jù)存儲到數(shù)據(jù)庫服務(wù)器和備份數(shù)據(jù)庫服務(wù)器,為每個接收到的井位建立數(shù)據(jù)表,將數(shù)據(jù)存儲到數(shù)據(jù)庫中,同時如果記錄超過了8000條,則將8000條現(xiàn)有數(shù)據(jù)之前的刪除掉,避免數(shù)據(jù)增長過快消耗掉硬盤存儲容量。
(3)界面顯示部分
界面提供兩種顯示模式,一種是系統(tǒng)模式,一種是井位模式。系統(tǒng)模式顯示系統(tǒng)的各項狀態(tài),包括網(wǎng)卡狀態(tài),各個數(shù)據(jù)庫連接狀態(tài),數(shù)據(jù)接收的狀態(tài)等等,在界面上一一以直觀的方式顯示出來,使操作者能夠直觀的獲取系統(tǒng)運行的狀況。井位模式下可以看到所有連接井位的狀態(tài),選擇需要觀察的井位,將接收到的數(shù)據(jù)顯示在界面上,可以監(jiān)控單口井的狀態(tài)。
(4)消息傳遞部分
如果有重要消息需要傳遞,客戶端可輸入信息,傳送到服務(wù)器端,服務(wù)器端可以針對所有客戶端或選定客戶端發(fā)送消息。當服務(wù)器端接收到客戶端的消息時,或服務(wù)器運行出現(xiàn)重大故障時(網(wǎng)絡(luò)終端、數(shù)據(jù)庫停止),服務(wù)器將信息通過互聯(lián)網(wǎng)傳輸?shù)蕉滔⒅行?,有短消息中心發(fā)送短消息給值班人員。
(5)系統(tǒng)管理部分
系統(tǒng)管理部分設(shè)定系統(tǒng)參數(shù),包括本機網(wǎng)卡參數(shù),業(yè)務(wù)數(shù)據(jù)庫和備份數(shù)據(jù)庫的參數(shù),并對其進行狀態(tài)監(jiān)控。還有程序的啟動處理和退出處理等操作。
獲取數(shù)據(jù)后,直接將數(shù)據(jù)寫入內(nèi)存中的隊列,然后去處理另一個數(shù)據(jù),防止了數(shù)據(jù)不能及時寫入數(shù)據(jù)庫造成丟失的問題。為避免內(nèi)存的緩存增長過快,造成內(nèi)存溢出,增加了一級本地數(shù)據(jù)庫緩存,進一步避免了數(shù)據(jù)丟失。
通過兩級數(shù)據(jù)緩存的使用,既提高了數(shù)據(jù)存儲的效率和時效性,也避免了意外因素造成的數(shù)據(jù)丟失。
圖1 多線程處理
采用一個主線程,將所有的運行時線程包含在其中,使程序的流程更加清晰。當主線程啟動時,啟動數(shù)據(jù)庫檢測線程,該線程啟動各個數(shù)據(jù)庫的檢測線程;主線程啟動網(wǎng)卡接收線程,該線程啟動各個網(wǎng)卡的Socket綁定線程,等待客戶端的接入,如果有接入則轉(zhuǎn)入數(shù)據(jù)接收處理線程處理;主線程啟動本地傳輸線程,將網(wǎng)卡接收到隊列中的數(shù)據(jù)寫入本地數(shù)據(jù)庫;遠程傳輸線程則將數(shù)據(jù)從本地數(shù)據(jù)庫傳送到業(yè)務(wù)主數(shù)據(jù)庫和備份數(shù)據(jù)庫中。除此之外,還有其他線程在運行,如數(shù)據(jù)顯示線程。
系統(tǒng)自動檢測本機存在的網(wǎng)卡數(shù)量,并提供給操作員選用,操作員根據(jù)需要選擇所需的網(wǎng)卡數(shù)量和種類。
(1)網(wǎng)卡管理線程
接收線程自動檢測選用的網(wǎng)卡數(shù)量和網(wǎng)卡地址,依次將其綁定到接收端口,為每個網(wǎng)卡啟動單獨的接收線程。將網(wǎng)卡管理與網(wǎng)卡處理分開進行,不會出現(xiàn)在一塊網(wǎng)卡處理過程中,導致其他網(wǎng)卡處于閑置狀態(tài)。
(2)Socket綁定線程
當Socket有外來接入時,將接入轉(zhuǎn)入處理線程,原來的Socket連接重新等待接入,可以同時處理多個接入。
(3)數(shù)據(jù)接收處理線程
線程將來自客戶端的數(shù)據(jù)進行解析,將線性的二進制字節(jié)流分解成為有意義的數(shù)據(jù)賦值給相應(yīng)的數(shù)據(jù)結(jié)構(gòu),然后將數(shù)據(jù)寫入接收隊列,完成一次連接的處理過程。
以上的三個線程互相配合,環(huán)環(huán)相扣,各司其職。網(wǎng)卡管理線程檢測到網(wǎng)卡可用,處于空閑狀態(tài)就將其轉(zhuǎn)入Socket處理線程;Socket線程等待客戶端接入,有數(shù)據(jù)連接就啟動一個數(shù)據(jù)接收處理線程的實例來進行處理;數(shù)據(jù)接收處理線程得
以完成一筆數(shù)據(jù)的接收。這種分解的狀態(tài),使得網(wǎng)絡(luò)接收的每個環(huán)節(jié)都不會處于空置狀態(tài),滿足了大流量、高頻率數(shù)據(jù)接入的要求。
除了上面提供的完成數(shù)據(jù)接收和保存主要功能的實現(xiàn)方式,還需實現(xiàn)客戶端連接狀態(tài)的自動監(jiān)測和數(shù)據(jù)庫服務(wù)器狀態(tài)的自動監(jiān)測,另外,完成系統(tǒng)的整體功能還需要一些輔助功能的幫助,包括手機短信發(fā)送重要消息、重要信息的日志寫入、標準化的配置文件和完善的系統(tǒng)控制的功能。
錄井信息對于科學的生產(chǎn)有著重要的作用,能夠?qū)浘畔⑼暾行Ъ皶r地采集到,對于錄井信息的應(yīng)用具有重要的決定作用。通過采用新技術(shù)的改造,將能使整個錄井信息傳輸系統(tǒng)的功能大大提高,保證數(shù)據(jù)能夠跨越網(wǎng)絡(luò)中斷和系統(tǒng)故障傳輸?shù)綌?shù)據(jù)庫,將能夠保證信息的有效完備。同時由于傳輸軟件具有很強的容錯能力,能大大減少人工干預(yù),減輕工作人員的壓力。軟件效率的提高,使得不必額外配備服務(wù)器等設(shè)備,節(jié)約設(shè)備投資。并且軟件平臺具備良好的可擴充性,能夠在此平臺上擴展新的應(yīng)用,減少日后改進的投資。
[1]汪煜凱.石油行業(yè)計算機應(yīng)用技術(shù)綜述[M].北京:石油工業(yè)出版社,2005.
[2]Warton,Java 多線程編程初步[J].電腦報,2004-4-10.