閆娟雅
摘要:針對傳統(tǒng)的集中式網(wǎng)絡數(shù)據(jù)存儲方式存儲數(shù)據(jù)效率低的問題,研究了基于Kubernetes的海量網(wǎng)絡數(shù)據(jù)存儲方法。對海量網(wǎng)絡數(shù)據(jù)動態(tài)合并處理后,設計Kubernetes集群并部署外部上傳端與Kubernetes服務的訪問過程,從而實現(xiàn)對海量數(shù)據(jù)的存儲。對比實驗結(jié)果顯示,該存儲方法相比能夠減少約62%的運算內(nèi)存占用,并且存儲操作速度快,更能滿足實際需求。
關(guān)鍵詞:Kubernetes;海量數(shù)據(jù);網(wǎng)絡數(shù)據(jù);數(shù)據(jù)存儲
中圖分類號:TP392? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)27-0028-02
Kubernetes是用于管理云平臺中多個主機上的容器應用部署方式[1]。相比于傳統(tǒng)系統(tǒng)綁定并通過插件、腳本或者沉重的虛擬機來安裝應用的應用部署方式,Kubernetes可以通過部署互相隔離的存儲容器的方式,在避免不同數(shù)據(jù)進程互相干擾的同時,還能利用容器各自的文件系統(tǒng)有效區(qū)分計算資源。將Kubernetes應用于網(wǎng)絡海量數(shù)據(jù)存儲中,能夠改善集中式數(shù)據(jù)存儲方法并發(fā)率低的問題。因此,本文將研究基于Kubernetes的海量網(wǎng)絡數(shù)據(jù)存儲方法,并對該方法的可行性進行驗證。
1 基于Kubernetes的海量網(wǎng)絡數(shù)據(jù)存儲方法研究
1.1 海量網(wǎng)絡數(shù)據(jù)動態(tài)合并處理
網(wǎng)絡海量數(shù)據(jù)因網(wǎng)絡的互聯(lián)互通特殊性,網(wǎng)絡中的數(shù)據(jù)大多存在一定的相關(guān)性。為節(jié)省數(shù)據(jù)存儲過程中占用的內(nèi)容,需要對網(wǎng)絡海量數(shù)據(jù)進行動態(tài)合并處理。在本研究中,使用子集檢測的頻繁項挖掘算法,找出存在關(guān)聯(lián)關(guān)系的網(wǎng)絡數(shù)據(jù),從而實現(xiàn)網(wǎng)絡海量數(shù)據(jù)的動態(tài)合并,提高網(wǎng)絡海量數(shù)據(jù)的訪問速度,減少數(shù)據(jù)存儲過程中的輸入輸出次數(shù)[2]。
網(wǎng)絡海量數(shù)據(jù)不僅數(shù)據(jù)量大,而且數(shù)據(jù)更新累加速度極快,為提高數(shù)據(jù)的存儲效率采用并行化算法實現(xiàn)海量網(wǎng)絡數(shù)據(jù)動態(tài)合并處理,具體處理步驟如下:
1)統(tǒng)計在某一時間段T內(nèi),需要存儲的網(wǎng)絡海量數(shù)據(jù)個數(shù)。找到該時間段內(nèi)數(shù)據(jù)個數(shù)的最大值K,并設定該值為需要動態(tài)合并的數(shù)據(jù)數(shù)量。
2)掃描網(wǎng)絡數(shù)據(jù)記錄日志,得到數(shù)據(jù)對應的IP地址、時間、數(shù)據(jù)量等信息,并建立對應時間段的網(wǎng)絡數(shù)據(jù)子集。
3)統(tǒng)計輸出所有時間段的網(wǎng)絡數(shù)據(jù)子集的數(shù)量。如果時間段的網(wǎng)絡數(shù)據(jù)子集的個數(shù)大于設定的閾值,并且子集項在大于K的子集項中沒有出現(xiàn)過,將所有子集輸出。
對于大小為K的網(wǎng)絡數(shù)據(jù)子集,將子集中的前K項初始化為1,后N-K項初始化為0。按順序掃描子集中所有元素,將排序為“10”交換為“01”。判斷在所有時間段的網(wǎng)絡數(shù)據(jù)子集中,k個標記為“1”的元素全部移動到子集序列的最右端,則停止處理。對每一組的網(wǎng)絡數(shù)據(jù)進行分片,以逗號分隔元素,獲取所有大小為K的網(wǎng)絡數(shù)據(jù)子集,并且輸出[3]。重復上述過程直至將所有時間段的網(wǎng)絡數(shù)據(jù)子集都完成動態(tài)合并。海量網(wǎng)絡數(shù)據(jù)動態(tài)合并后,設計部署數(shù)據(jù)存儲容器的Kubernetes集群。
1.2 Kubernetes 集群設計
根據(jù)Kubernetes的理論,若存儲大量的網(wǎng)絡數(shù)據(jù),需要設計集群,通過對Kubernetes集群的部署,保持網(wǎng)絡數(shù)據(jù)狀態(tài)信息的同時,避免單存儲點方式故障造成的數(shù)據(jù)存儲停滯。
在Kubernetes集群中,利用分布式鍵值數(shù)據(jù)庫Etcd組件保存Kubernetes集群上的應用信息、配置參數(shù)以及管理存儲對象的時間狀態(tài)信息。在對多個Etcd組件部署時,利用Raft算法產(chǎn)生分布式鍵值數(shù)據(jù)庫Etcd組件的Leader節(jié)點處理所有組件對數(shù)據(jù)的管理操作信息提交。若Etcd組件的Leader節(jié)點失效,Kubernetes集群集群會自動重新選舉Leader節(jié)點從而保障Etcd數(shù)據(jù)存儲服務不受故障影響,實現(xiàn)高可用的目的[4]。根據(jù)Raft算法的處理原理,選舉的Leader節(jié)點通常為奇數(shù)節(jié)點,因此按照以下具體過程對Etcd集群部署:
1)在Kubernetes集群中下載和分發(fā)分布式鍵值數(shù)據(jù)庫Etcd組件安裝文件。
2)創(chuàng)建Etcd組件各節(jié)點的TLS證書,證書用于加密數(shù)據(jù)上傳與Etcd集群和Etcd集群間的通信。
3)創(chuàng)建分發(fā)分布式鍵值數(shù)據(jù)庫Etcd組件的systemd unit文件,并根據(jù)數(shù)據(jù)存儲目標配置Etcd組件的服務參數(shù)。
4)檢查Kubernetes集群工作狀態(tài)。
在Kubernetes集群部署過程中,分發(fā)分布式鍵值數(shù)據(jù)庫Etcd組件集群確保了與Kubernetes集群部署運行相關(guān)操作信息數(shù)據(jù)的可靠存儲。而利用Kubernetes集群中的 Master節(jié)點可以為接入集群的上傳設備提供集群入口和所有資源管理接口的API Server、管理集群資源的Controller Manager、負責集群調(diào)度的Schedule三個重要組件。為滿足網(wǎng)絡海量數(shù)據(jù)存儲時,Kubernetes集群的部署需求,以及保證各個組件不會因單獨的故障而影響集群的穩(wěn)定運行,采用分別在多個集群Master節(jié)點上部署操作副本即可[5]。與Etcd組件各節(jié)點相類似,通過競爭選舉機制產(chǎn)生leader節(jié)點,當leader節(jié)點不可用后,剩余Master節(jié)點再次進行選舉,從而產(chǎn)生新的leader節(jié)點從而保證kubernetes集群服務的可用性。
1.3 實現(xiàn)海量數(shù)據(jù)存儲
采用Kubernetes集群對網(wǎng)絡海量數(shù)據(jù)進行存儲容器部署時,由于Kubernetes集群中的應用服務無法直接對外服務,因此,為保證網(wǎng)絡海量數(shù)據(jù)能正常接入Kubernetes集群,需對Kubernetes集群由內(nèi)部向外部服務接口暴露出來,從而實現(xiàn)網(wǎng)絡數(shù)據(jù)的訪問存儲。
考慮到接入網(wǎng)絡海量數(shù)據(jù)的服務數(shù)量較多,采用Ingress方式設計Kubernetes集群設計網(wǎng)絡外端口訪問。Ingress可以通過定義了外部URL請求到內(nèi)部服務的轉(zhuǎn)發(fā)規(guī)則,具體轉(zhuǎn)發(fā)實現(xiàn)由Ingress Controller完成將對外界服務請求的響應轉(zhuǎn)換為Kubernetes集群內(nèi)部服務。