唐榮杰 向玲玲 劉旨陽
摘要:遠程呼叫系統(tǒng)解決的是呼叫數(shù)據(jù)的采集、傳輸、存儲、應(yīng)用的問題,在設(shè)計的過程中,我們必須考慮設(shè)備數(shù)據(jù),用戶數(shù)據(jù),呼叫請求信息數(shù)據(jù),呼叫應(yīng)答處理數(shù)據(jù)的存儲問題,同時也關(guān)注數(shù)據(jù)庫系統(tǒng)的實時性、可用性、伸縮性等。在解決系統(tǒng)并發(fā)和終端設(shè)備交互的問題上,采用memcached緩存技術(shù),既可以滿足分布式設(shè)計的要求,也可以靈活快速部署,并且不影響系統(tǒng)在前期的資金投入,靈活性更大。
關(guān)鍵詞:遠程呼叫 數(shù)據(jù)庫 實時性 伸縮性
中圖分類號:TP311.13 文獻標識碼:A 文章編號:1007-9416(2016)07-0136-01
1 遠程呼叫系統(tǒng)架構(gòu)設(shè)計
在設(shè)計架構(gòu)遠程呼叫系統(tǒng),我們采用典型的分層模型,即應(yīng)用層、服務(wù)層、數(shù)據(jù)層;三層之間相互獨立,應(yīng)用層處理具體業(yè)務(wù)邏輯,服務(wù)層提供可復(fù)用的服務(wù),數(shù)據(jù)層處理存儲與訪問如圖1所示。
應(yīng)用層和服務(wù)層統(tǒng)一部署到中間的應(yīng)用服務(wù)器上,可以應(yīng)對高并發(fā)的訪問請求,通過負載均衡Nginx應(yīng)用服務(wù)器將一組服務(wù)器組成一個集群共同對外提供服務(wù),保證整個集群可用。
數(shù)據(jù)庫服務(wù)器要解決數(shù)據(jù)讀寫存儲的問題以及數(shù)據(jù)冗余備份的問題,為了保證服務(wù)器宕機時數(shù)據(jù)不丟失,數(shù)據(jù)訪問服務(wù)不中斷需要在寫入的時候進行有效的數(shù)據(jù)同步復(fù)制,將數(shù)據(jù)寫入到多臺服務(wù)器上,實現(xiàn)數(shù)據(jù)冗余備份,出現(xiàn)數(shù)據(jù)服務(wù)器宕機的情況的時候,應(yīng)用程序直接訪問備份數(shù)據(jù)。
在呼叫系統(tǒng)的數(shù)據(jù)存儲備份方案上我們選擇數(shù)據(jù)異步熱備的方式,應(yīng)用服務(wù)程序收到數(shù)據(jù)服務(wù)系統(tǒng)的寫操作成功以后,只寫成功一份,存儲系統(tǒng)將會異步的寫到其他的副本中。
異步寫入方式下,服務(wù)器分為主存儲服務(wù)器和從存儲服務(wù)器,應(yīng)用程序正常情況下只連接主存儲服務(wù)器,讓通過異步線程寫操作到從存儲服務(wù)器中。
MySQL數(shù)據(jù)庫集群的伸縮性設(shè)計,MySQL支持數(shù)據(jù)復(fù)制功能,使用這個功能可以對數(shù)據(jù)庫進行簡單的伸縮,在圖3的架構(gòu)中,由主服務(wù)器將數(shù)據(jù)同步到集群中其他的服務(wù)器上,數(shù)據(jù)讀寫和分析離線操作都在從服務(wù)器上進行。
2 memcached緩存設(shè)計
使用分布式緩存后,數(shù)據(jù)訪問壓力可以得到有效緩解。Memcached簡單的設(shè)計,優(yōu)異的性能,海量數(shù)據(jù)可伸縮的架構(gòu)可以解決很多問題。Memcached使用TCP協(xié)議通信,其序列號化協(xié)議是一套基于文本的自定義協(xié)議,非常簡單,以一個命令關(guān)鍵字開頭,后面都是操作數(shù)。同時,他具有高效的內(nèi)存管理辦法,固定空間分配。應(yīng)用程序通過Memcached客戶端訪問Memcached集群,Memcached客戶端主要由一組API、Memcached服務(wù)器集群路由算法、Memcached服務(wù)器集群列表及通信模塊構(gòu)成。
3 數(shù)據(jù)存儲系統(tǒng)的表結(jié)構(gòu)設(shè)計
遠程呼叫系統(tǒng)一共設(shè)計了9張表,超級管理員表、用戶表、網(wǎng)關(guān)表、路由器信息表、歷史信息表、手表信息表、關(guān)聯(lián)表、呼叫器信息表、按鍵配置表。
(1)超級管理員信息表,編號(id)、用戶名(username)、密碼(password)、創(chuàng)建時間(createtime)、郵箱(email)、地址(address)、真實姓名(name);
(2)網(wǎng)關(guān)表,編號(id)、網(wǎng)關(guān)的物理地址(Mac_address);
(3)用戶信息表,編號(id)、用戶姓名(username)、密碼(password)、
創(chuàng)建時間(createtime)、網(wǎng)關(guān)編號(gateway_id);
(4)路由信息表,編號(id),路由器編號(gateway_id);
(5)關(guān)聯(lián)表,編號(id),用戶(user_id),手表編號(w_id),按鈕編號(b_id);
(6)手表信息表,編號(id)、路由器編號(R_id)、網(wǎng)關(guān)編號(gate_id)、備注(comment)、指令(order);
(7)呼叫器信息表,編號(id)、路由器編號(R_id)、網(wǎng)關(guān)編號(gate_id)、指令(order)、備注(comment);
(8)歷史信息記錄表,編號(id)、更新時間(updateTime)、手表狀態(tài)(w_status)、呼叫器狀態(tài)(b_status)、路由器狀態(tài)(r_status)、預(yù)留備注(comment);
(9)按鍵配置信息表,編號(id)、鍵值(keyorder)。
參考文獻
[1]李智慧.大型網(wǎng)站技術(shù)架構(gòu)核心原理與案例分析[M].電子工業(yè)出版社,2014年3月.
[2]CraigS.Mullin.DBA修煉之道數(shù)據(jù)庫管理員的第一本書.機械工業(yè)出版社,2014年9月.
[3]PaulDuBios.MySQL技術(shù)內(nèi)幕(第4版).人民郵電出版社,2013年7月.
[4]BenForta.SQL必知必會(第4版).人民郵電出版社,2013年5月.