陳宇收
摘要
隨著城市汽車保有量的累年增多,傳統(tǒng)的使用關(guān)系型數(shù)據(jù)庫存儲交通生產(chǎn)數(shù)據(jù)的解決方案缺陷逐漸暴露,具體表現(xiàn)在存儲容量達到上限、存取效率隨著存儲數(shù)據(jù)增多逐漸變慢等,不但給數(shù)據(jù)存儲、維護帶來了極大不便,而且還影響到正常交通業(yè)務(wù)的開展,因此,迫切需要改變通過Mycat技術(shù)體系的應(yīng)用,不但解決了交通大數(shù)據(jù)的存儲瓶頸,而且通過基于Mycat建立的高可用數(shù)據(jù)庫存儲方案的設(shè)計,還保障了數(shù)據(jù)存儲能夠持續(xù)、不間斷的提供訪問支持,保障了交通大數(shù)據(jù)存儲能夠高質(zhì)量、高效率的進行。
【關(guān)鍵詞】Mycat 交通大數(shù)據(jù) 分布式 數(shù)據(jù)存儲
1 引言
隨著人們生活質(zhì)量的提高以及汽車行業(yè)的飛速發(fā)展,使得汽車購置出現(xiàn)了爆炸式的增長,直接導(dǎo)致了針對車輛的過車數(shù)據(jù)、違章數(shù)據(jù)等呈現(xiàn)直線上升,并逐漸積累成一定規(guī)模的海量數(shù)據(jù),不但給傳統(tǒng)的數(shù)據(jù)管理工作帶來了極大負擔(dān),而且如何有效的完成這些新增數(shù)據(jù)的存儲管理,并實現(xiàn)對這些數(shù)據(jù)的高效、準(zhǔn)確、便捷分析,最終為構(gòu)建安全便捷、暢通高效、綠色智能的交通管理體系提供數(shù)據(jù)依據(jù)已經(jīng)成為當(dāng)前交通大數(shù)據(jù)存儲研究的重點。
在大數(shù)據(jù)存儲領(lǐng)域,當(dāng)前主流的解決方案為Hbase數(shù)據(jù)庫、Hive數(shù)據(jù)倉庫以及傳統(tǒng)結(jié)構(gòu)化的解決方案Oracle RAC等,其中Hbase雖然通過分布式存儲方案能夠有效完成交通大數(shù)據(jù)的存儲,但由于其數(shù)據(jù)存儲為非結(jié)構(gòu)化,不支持使用SQL語句完成交通數(shù)據(jù)記錄的高效存取,所以針對交通大數(shù)據(jù)頻繁的記錄篩選應(yīng)用存在一定的不足;Hive數(shù)據(jù)倉庫在應(yīng)用時,雖然其憑借結(jié)構(gòu)化的存儲模式能夠較好的支持SQL語言的統(tǒng)計、分析,但是由于其定位在數(shù)據(jù)倉庫存儲,對單個記錄的輸入、變更及刪除支持不友好,而交通大數(shù)據(jù)是實時單個記錄的生產(chǎn)方式,所以也不宜采用;Oracle RAC雖然兼顧了結(jié)構(gòu)化存儲以及海量數(shù)據(jù)存儲等應(yīng)用需求,然而由于Oralce為商業(yè)軟件,成本昂貴,所以當(dāng)建設(shè)Oracle RAC集群時,其成本勢必高昂,不利于商業(yè)化推廣。
為了支援湖南省吉首市智慧城市建設(shè),同時也為了改善吉首市當(dāng)前擁堵的交通狀況,由深圳市賽為智能股份有限公司為其建設(shè)了智能交通綜合管控大數(shù)據(jù)平臺,實現(xiàn)對其城市交通大數(shù)據(jù)的采集、存儲、分析及調(diào)度,不但提升了吉首市交通運轉(zhuǎn)服務(wù)能力,而且通過交通網(wǎng)絡(luò)的優(yōu)化調(diào)配,更方便民眾出行。另外,在平臺建設(shè)時,數(shù)據(jù)存儲采用了多個低成本的單機MySQL數(shù)據(jù)庫進行分布式集群管理,不但實現(xiàn)了數(shù)據(jù)存儲“云”端的平滑遷移,而且還解決了其交通大數(shù)據(jù)不斷增長的數(shù)據(jù)存儲容量瓶頸,而這一切歸功于分布式數(shù)據(jù)存儲管理中間件Mycat的應(yīng)用。
2 Mycat概述
2.1 Mycat定義
Mycat是一款基于阿里開源項目Cobar的開源分布式數(shù)據(jù)庫系統(tǒng),雖然其是針對MySQL協(xié)議的Server實現(xiàn),但是其卻能夠兼容Oralce、SQL Server以及PostgreSQL等數(shù)據(jù)庫實現(xiàn),并提供和原生數(shù)據(jù)庫一致的命令訪問支持,因此,對用戶而言是Mycat是透明的,不會增加任何學(xué)習(xí)及使用負擔(dān)。Mycat在設(shè)計時,雖然提供了故障切換、主從分離、多租戶方案、分布式事務(wù)、WIB監(jiān)控、IP黑白名單等功能,但是其核心功能卻是對數(shù)據(jù)的水平切分存儲,進而實現(xiàn)特定業(yè)務(wù)海量數(shù)據(jù)的高效存儲及應(yīng)用,這也是交通大數(shù)據(jù)存儲方案設(shè)計的重點。
2.2 Mycat原理
Mycat在應(yīng)用時,其原理是將用戶所有請求SQL語句進行攔截,然后根據(jù)配置規(guī)則對攔截的SQL語句進行必要的語義分析,包括路由、分片以及讀寫分離等,然后根據(jù)語義分析結(jié)果,將SQL語句發(fā)送到后端真實數(shù)據(jù)庫中執(zhí)行,并對執(zhí)行的數(shù)據(jù)結(jié)果再進行必要的處理,最后返回給用戶。
在交通大數(shù)據(jù)存儲方案設(shè)計時,主要應(yīng)用了Mycat的分片存儲功能,其原理是使用多個不同的服務(wù)器節(jié)點完成數(shù)據(jù)的水平拆分存儲,拆分算法包括時間分片算法、取模分片算法以及Hash分片算法等,進而利用每個服務(wù)器節(jié)點的存儲資源完成數(shù)據(jù)的存儲及運算,最終提升完整數(shù)據(jù)的存儲及運算性能,由于采用這種分片策略,對單個存儲服務(wù)器節(jié)點硬件資源要求不高,且可以根據(jù)存儲需要理論上無限擴容節(jié)點,所以該方案具備成本低、性能高且易擴展等特點,因此能夠為交通大數(shù)據(jù)存儲提供理論上的無限支持。
3 基于Mycat存儲架構(gòu)設(shè)計
在交通大數(shù)據(jù)存儲方案設(shè)計時,為了給應(yīng)用系統(tǒng)提供簡單、穩(wěn)定、可靠、不間斷的數(shù)據(jù)存儲、訪問支持,就需要在其存儲方案設(shè)計時,進行必要的優(yōu)化設(shè)計。根據(jù)這一目標(biāo)需求,結(jié)合當(dāng)前交通大數(shù)據(jù)高可用存儲解決方案綜合考慮,設(shè)計了吉首市交通大數(shù)據(jù)存儲架構(gòu)方案,如圖1所示。
由圖1可知,在交通大數(shù)據(jù)高可用存儲架構(gòu)設(shè)計時,物理數(shù)據(jù)庫使用了開源的MySQL數(shù)據(jù)庫,并使用Mycat完成物理庫的分布式管理,最后通過Haproxy負載均衡器提供訪問支持。在具體設(shè)計時,針對每一個數(shù)據(jù)存儲節(jié)點dataHost,均進行了主從復(fù)制、讀寫分離設(shè)計,其中主從復(fù)制使用MySQL的binlog日志實現(xiàn),而讀寫分離則利用了Mycat提供的功能特性,當(dāng)需要執(zhí)行SQL寫操作時,Mycat將SQL語句發(fā)送到WriteHost主機執(zhí)行,當(dāng)需要進行SQL讀操作時,將SQL發(fā)送到ReadHost讀主機進行,不但提高了數(shù)據(jù)庫的讀寫操作效率,而且當(dāng)其中一個數(shù)據(jù)庫發(fā)生異常時,Mycat通過提供的心跳檢測機制能夠快速發(fā)現(xiàn)異常,并及時的完成可用數(shù)據(jù)庫切換,進而保障了數(shù)據(jù)庫能夠不間斷的提供數(shù)據(jù)存取支持。在Mycat部署時,為了提高Mycat的高可用性,部署了兩套完全一樣的Mycat服務(wù),并由負載均衡器Haproxy進行訪問,不但提高了Mycat的容錯能力,提供更持續(xù)、穩(wěn)定的服務(wù)支持,而且還可以對用戶訪問進行分流,提升系統(tǒng)的處理性能。另外,在負載均衡器Haproxy部署時,考慮到單個節(jié)點的負載均衡器還存在故障拒絕訪問的可能,所以也部署了兩套一樣的負載均衡器提供高可用切換,并采用Keepalive死連接檢測機制提供搶占IP的訪問入口。
4 Mycat部署
根據(jù)Mycat高可用存儲架構(gòu)設(shè)計方案,對交通大數(shù)據(jù)存儲系統(tǒng)進行了部署實現(xiàn),其中核心應(yīng)用部署包括MySQL,Mycat以及Haproxyo
4.1 MySQL
在交通大數(shù)據(jù)存儲數(shù)據(jù)庫部署時,考慮到存儲數(shù)據(jù)包括兩個不同類別,其中當(dāng)數(shù)據(jù)總量不會超過單表存儲容量時,比如用戶信息,則使用傳統(tǒng)數(shù)據(jù)表存儲,而當(dāng)存儲數(shù)據(jù)不可預(yù)估容量時,比如過車數(shù)據(jù),則使用Mycat進行必要的分庫分表存儲。根據(jù)吉首市當(dāng)前的車輛保有量進行估算,在MySQL安裝時,共創(chuàng)建了3組6個數(shù)據(jù)庫實例,其中1組實例用于存儲不需要分片的數(shù)據(jù)存儲,而另外2組則實例則是分片存儲實例,分配IP段為10.1.1.1 至10.1.1.6,其中10.1.1.4至10.1.1.6段的數(shù)據(jù)庫實例為10.1.1.1至10.1.1.3段數(shù)據(jù)庫實例的從庫,在數(shù)據(jù)庫安裝后,配置主從關(guān)系即可,其中主庫創(chuàng)建可用數(shù)據(jù)復(fù)制賬號、密碼命令:
grant replication slave on*.*toslave@'10.1.1.1'identified by'123456';
從庫開啟復(fù)制命令:
CHANGE MASTER TO MASTERHOST='10.1.1.1'MASTER_USER='slave'
MASTER_PASSWORD='123456'MASTER_PORT-3306 MASTER_AUTO_POSITION=1;
4.2 Mycat
在Mycat應(yīng)用部署時,根據(jù)交通大數(shù)據(jù)業(yè)務(wù)需求,需要配置邏輯庫、邏輯表以及分片規(guī)則等,進而通過Mycat與后端Mysql數(shù)據(jù)庫建立一對多的分布式關(guān)系,而對用戶操作而言,還是針對唯一的邏輯庫、邏輯表進行,不但提高了數(shù)據(jù)庫的數(shù)據(jù)存儲能力,而且對用戶完全透明,不會增加新的使用負擔(dān)。
4.2.1 邏輯庫
邏輯庫是用戶直接操作的數(shù)據(jù)庫集群對象,它底層是將一個或多個不同的物理庫進行集群管理,進而實現(xiàn)對存儲大數(shù)據(jù)的分片管理,解決數(shù)據(jù)的存儲瓶頸。在交通大數(shù)據(jù)存儲方案設(shè)計時,為了不增加邏輯庫操作的復(fù)雜性,配置了和底層物理庫名稱一致的邏輯庫,并允許根據(jù)業(yè)務(wù)數(shù)據(jù)量的增長,自定義的拓展分片數(shù)量。部分核心配置如下:
database="its_passing_record$1-365">
select user()
配置和物理數(shù)據(jù)庫一致的邏輯數(shù)據(jù)庫訪問賬號及密碼,如下:
123456
its
4.2.2 邏輯表
邏輯表即是用戶進行數(shù)據(jù)存取實際操作的數(shù)據(jù)集對象,其根據(jù)是否分片存儲數(shù)據(jù)分為分片表、非分片表、全局表三個不同類型。
(1)分片表。針對MySQL物理表單表存儲容量超過800萬會存在較為嚴(yán)重的存取性能問題,所以當(dāng)預(yù)估存儲數(shù)據(jù)量超過此數(shù)量時,就需要根據(jù)業(yè)務(wù)數(shù)據(jù)量的不同,進行必要的分片存儲,進而降低單個數(shù)據(jù)表的存儲容量,提高數(shù)據(jù)的存取效率。根據(jù)交通大數(shù)據(jù)的業(yè)務(wù)需求,對其中過車數(shù)據(jù)按日進行分片存儲,設(shè)計如下:
1.1.3 :3306" password="123456" user=",,root,,">
<readhost host="it="" ostsl"url="10.
1.1 .6:3306"user="root"password,,123456"/>
(3)全局表。全局表在應(yīng)用時,主要是針對需要進行關(guān)聯(lián)查詢的分片數(shù)據(jù)表而設(shè)計,其目的是在每個分片數(shù)據(jù)表所在的數(shù)據(jù)庫中設(shè)計相同的全局表,進而提升數(shù)據(jù)的關(guān)聯(lián)查詢效率,其和普通的非分片數(shù)據(jù)表的區(qū)別是在相應(yīng)節(jié)點上增加type "global"屬性即可。
4.2.3 分片規(guī)則
在交通大數(shù)據(jù)存儲時,為了完成這些大容量數(shù)據(jù)的有效組織、存儲,進而提高數(shù)據(jù)的存取效率,就需要根據(jù)存儲業(yè)務(wù)數(shù)據(jù)的不同,制訂合適的分片規(guī)則。根據(jù)過車數(shù)據(jù)的存儲需求,制訂了按日分片的策略,如下:
cap date
pdate
yyyy-MM-dd
2017-10-09
2018-10-08
1
4.3 Haproxy
在Haproxy安裝部署時,根據(jù)官方規(guī)范編譯安裝即可,并且在部署時,為了提高Haproxy的高可用性,也是部署了兩套完全一樣的實例提供訪問支持,分別部署在10.1.1.31與10.1.1.32主機上。在Haproxy安裝之后,即可對其進行Mycat的負載均衡配置,核心配置如下:
listen allmycat_service 10.1.1.31:8096
mode rep
option tcplog
option httpchk OPTIONS*HTTP/1.1\r\n]lost:\www
balance roundrobin
server mycat_01 10.1.1.21:8066 checkport 48700 inter 5s rise 2 fall 3
server mycat_02 10.1.1.22:8066 checkport 48700 inter 5s rise 2 fall 3
timeout server 20000
由此可知,在針對Haproxy配置時,需要指定當(dāng)前實例主機IP以及負責(zé)調(diào)配的Mycat實例對象,并使用8096端口提供數(shù)據(jù)庫訪問支持。
5 總結(jié)
通過Mycat技術(shù)的應(yīng)用,對多個不同的物理數(shù)據(jù)庫進行分布式集群管理,進而將現(xiàn)有的單機業(yè)務(wù)數(shù)據(jù)庫平滑遷移到云端,不但充分利用了各個數(shù)據(jù)庫實例的單機數(shù)據(jù)存取能力,提高海量數(shù)據(jù)的存取效率,而且由于采用了分布式的集群管理模式,集群中的數(shù)據(jù)庫在不影響現(xiàn)有業(yè)務(wù)開展前提下,能夠任意的增加實例,所以有效解決了交通大數(shù)據(jù)存儲的瓶頸問題。另外,通過Haproxy、Keepalive等工具的應(yīng)用,實現(xiàn)了交通大數(shù)據(jù)存儲的高可用,能夠為交通大數(shù)據(jù)的存儲提供持續(xù)、不間斷的存取支持,進而為業(yè)務(wù)系統(tǒng)的穩(wěn)定、可靠應(yīng)用提供了保障。
參考文獻
[1]周智.基于Mycat的分布式數(shù)據(jù)庫在運營商IT系統(tǒng)轉(zhuǎn)型中的實現(xiàn)與探索[J].電腦知識與技術(shù),2018(15):25-27.
[2]王錦,梁正和,王法強.表廣播機制在MyCat中的實現(xiàn)[J].計算機技術(shù)與發(fā)展,2017(03):42-46.
[3]黃達文.科學(xué)運用大數(shù)據(jù)推動城市交通智能化發(fā)展[J].數(shù)字通信世界,2018(01):127-127.
[4]陳晏.運用大數(shù)據(jù)緩解城市交通擁堵[J].中國人大,2018(09):45-46.