陳宇收

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