亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        MongoDB負(fù)載均衡算法優(yōu)化研究

        2020-04-09 06:36:42陳敬靜馬明棟王得玉
        關(guān)鍵詞:均衡器分片集群

        陳敬靜,馬明棟,王得玉

        (1.南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003;2.南京郵電大學(xué) 地理與生物信息學(xué)院,江蘇 南京 210003)

        0 引 言

        隨著通信技術(shù)、互聯(lián)網(wǎng)、云計(jì)算的飛速發(fā)展,互聯(lián)網(wǎng)浪潮已經(jīng)到達(dá),接入到互聯(lián)網(wǎng)中的設(shè)備呈指數(shù)增長(zhǎng),越來(lái)越多的數(shù)據(jù)以不同內(nèi)容和形式涌現(xiàn)出來(lái),大數(shù)據(jù)時(shí)代正式到來(lái)。大數(shù)據(jù)時(shí)代最主要的特征就是數(shù)據(jù)種類與數(shù)量的繁多,除了結(jié)構(gòu)化數(shù)據(jù)還有半結(jié)構(gòu)化數(shù)據(jù)以及非結(jié)構(gòu)化數(shù)據(jù),這要求數(shù)據(jù)存儲(chǔ)系統(tǒng)必須能夠處理高并發(fā)問(wèn)題,同時(shí)還要易于擴(kuò)展[1]。盡管在主流應(yīng)用場(chǎng)景中仍然使用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù),但面對(duì)海量的數(shù)據(jù),它很難滿足海量數(shù)據(jù)的存儲(chǔ)需求,已經(jīng)無(wú)法滿足人們?nèi)找嬖鲩L(zhǎng)的需求。為了解決如何存儲(chǔ)和處理海量數(shù)據(jù)的問(wèn)題,非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)應(yīng)運(yùn)而生[2]。MongoDB也是NoSQL的一種,因其非常適合處理海量數(shù)據(jù)和高并發(fā)而得到大量應(yīng)用。文中通過(guò)研究MongoDB的自動(dòng)分片原理,提出一種改進(jìn)的基于節(jié)點(diǎn)實(shí)時(shí)負(fù)載的負(fù)載均衡算法[3],以有效解決其自身算法存在的部分問(wèn)題。

        1 MongoDB的自動(dòng)分片

        1.1 MongoDB簡(jiǎn)介

        MongoDB是10gen公司使用C++編寫開(kāi)發(fā)的基于分布式文件存儲(chǔ)的開(kāi)源NoSQL數(shù)據(jù)庫(kù)系統(tǒng),由于其性能高效、功能豐富,在生產(chǎn)中得到了廣泛應(yīng)用。MongoDB除了具有NoSQL 數(shù)據(jù)庫(kù)的相關(guān)特性外,還具有自動(dòng)分片、集群擴(kuò)展、單點(diǎn)故障自動(dòng)恢復(fù)、復(fù)雜查詢等優(yōu)點(diǎn),非常符合存儲(chǔ)海量的半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)[4]。MongoDB將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值對(duì)組成,其文檔的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似于JSON的BSON格式[5],存儲(chǔ)效率高。它是一個(gè)面向集合的,模式自由的文檔型數(shù)據(jù)庫(kù),相較于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),在面對(duì)海量數(shù)據(jù)的挑戰(zhàn)時(shí)更加有優(yōu)勢(shì),其主要功能特性有:面向集合存儲(chǔ)、模式自由、容易擴(kuò)展、支持復(fù)制和數(shù)據(jù)恢復(fù)、支持動(dòng)態(tài)查詢、支持完全索引以及自動(dòng)處理分片等[6]。

        1.2 分片介紹

        分片(Sharding)是指將內(nèi)存中的數(shù)據(jù)拆分成不同的塊,分別存儲(chǔ)到不同機(jī)器上的過(guò)程。通過(guò)分割數(shù)據(jù)到不同的服務(wù)器,讓數(shù)據(jù)集的不同部分分別由不同的服務(wù)器負(fù)責(zé),使得單個(gè)機(jī)器上的請(qǐng)求數(shù)得到減少,系統(tǒng)總負(fù)載得到提高,總存儲(chǔ)空間也得到提高[7]。分片是數(shù)據(jù)庫(kù)系統(tǒng)擴(kuò)展的必然產(chǎn)物,而不是某個(gè)特定數(shù)據(jù)庫(kù)軟件附屬的功能,分片能在一定程度上決定系統(tǒng)性能的優(yōu)劣。MongoDB采用自動(dòng)分片(Auto-Sharding)機(jī)制,如圖1所示。

        自動(dòng)分片技術(shù)一般用于自動(dòng)配置、監(jiān)控和數(shù)據(jù)轉(zhuǎn)移,當(dāng)數(shù)據(jù)量大到服務(wù)器的磁盤、內(nèi)存難以負(fù)擔(dān)時(shí),自動(dòng)分片技術(shù)可以自動(dòng)平衡負(fù)載和數(shù)據(jù)分布的變化,提升系統(tǒng)的擴(kuò)展性能。此外,它還提供無(wú)單點(diǎn)故障自動(dòng)恢復(fù)、自動(dòng)故障轉(zhuǎn)移以及動(dòng)態(tài)添加額外服務(wù)器等技術(shù),為提升系統(tǒng)性能提供了很大幫助。

        圖1 分片原理

        1.3 自動(dòng)分片集群架構(gòu)

        MongoDB的自動(dòng)分片集群架構(gòu)如圖2所示,主要包括分片服務(wù)器、路由服務(wù)器以及配置服務(wù)器,這三種服務(wù)器負(fù)責(zé)的功能如下:

        (1)Mongos:路由服務(wù)器,負(fù)責(zé)將讀取和寫入的請(qǐng)求從應(yīng)用程序路由到分片。集群通過(guò)Mongos連接客戶端和服務(wù)器,當(dāng)客戶端向數(shù)據(jù)庫(kù)發(fā)送更新或查詢操作請(qǐng)求,Mongos接收請(qǐng)求并聚合,然后發(fā)送給分片服務(wù)器,它并不存儲(chǔ)數(shù)據(jù),只傳遞請(qǐng)求[8]。

        (2)Config Server:配置服務(wù)器,存儲(chǔ)集群的配置信息以及分片與數(shù)據(jù)的對(duì)應(yīng)關(guān)系,運(yùn)行集群時(shí)向路由服務(wù)器提供配置信息和對(duì)應(yīng)關(guān)系。一般MongoDB自動(dòng)分片集群中配有多個(gè)配置服務(wù)器,每個(gè)配置服務(wù)器中都保存了所有信息,防止信息丟失。

        (3)Shard:分片節(jié)點(diǎn),用于存儲(chǔ)數(shù)據(jù)。在架構(gòu)中,一個(gè)片內(nèi)可以有多個(gè)Mongos服務(wù)器,每個(gè)服務(wù)器中存放的數(shù)據(jù)都相同,主服務(wù)器只有一個(gè),其他均為從服務(wù)器。存儲(chǔ)數(shù)據(jù)的部件是分片節(jié)點(diǎn),為了獲得高擴(kuò)展性和數(shù)據(jù)一致性,分片常與副本集(Replica Set)同時(shí)使用,防止該數(shù)據(jù)片單點(diǎn)故障[9]。

        圖2 自動(dòng)分片集群架構(gòu)

        一般情況下,當(dāng)用戶向數(shù)據(jù)庫(kù)發(fā)送操作請(qǐng)求時(shí),Mongos會(huì)解析數(shù)據(jù)庫(kù)的分片shard key(片鍵)規(guī)則,在存儲(chǔ)元數(shù)據(jù)的配置節(jié)點(diǎn)配置服務(wù)器中查找相關(guān)信息,找到對(duì)應(yīng)的分片后將請(qǐng)求轉(zhuǎn)發(fā)到正確的片上,對(duì)客戶端發(fā)送來(lái)的請(qǐng)求進(jìn)行響應(yīng),最后Mongos將獲取到的結(jié)果發(fā)送給應(yīng)用程序[10]。將數(shù)據(jù)片段與應(yīng)用程序分離是MongoDB分片技術(shù)中最獨(dú)特的地方,使用這種分片機(jī)制,用戶可以在不更改程序的前提下,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的擴(kuò)展。

        2 MongoDB負(fù)載均衡算法

        2.1 Chunk塊拆分

        MongoDB將分片服務(wù)器內(nèi)部數(shù)據(jù)分為chunks,不同chunk塊代表這個(gè)分片服務(wù)器內(nèi)部的部分?jǐn)?shù)據(jù),由指定片鍵的某一連續(xù)范圍內(nèi)的文檔組成。當(dāng)chunk塊過(guò)大時(shí),MongoDB后臺(tái)進(jìn)程會(huì)計(jì)算每個(gè)chunk塊的大小并選擇拆分點(diǎn),根據(jù)拆分點(diǎn)將該chunk塊切分成更小的chunk塊,避免chunk塊過(guò)大的情況[11]。在MongoDB中,負(fù)責(zé)數(shù)據(jù)遷移的工具就是均衡器(balancer),balancer是一個(gè)后臺(tái)進(jìn)程,負(fù)責(zé)chunk塊的遷移,從而均衡各個(gè)shard server的負(fù)載。拆分chunk塊最重要的兩點(diǎn)是選擇合適的拆分點(diǎn)和不同chunk塊所占用的空間基本相等。

        2.2 負(fù)載均衡算法分析

        隨著MongoDB中的數(shù)據(jù)越來(lái)越多,分片中chunk塊的數(shù)量也越來(lái)越多,每個(gè)分片服務(wù)器上chunk塊的個(gè)數(shù)也不相同,且差異越來(lái)越大。在MongoDB中,默認(rèn)的負(fù)載均衡算法認(rèn)為chunk塊數(shù)量相當(dāng)即負(fù)載均衡。負(fù)載均衡的實(shí)現(xiàn)主要來(lái)自于其內(nèi)部負(fù)載均衡器(balancer)進(jìn)程的運(yùn)行,均衡器周期性地檢查各分片,當(dāng)分片間chunk塊的數(shù)量差到達(dá)遷移閾值(默認(rèn)為8),均衡器啟動(dòng)自動(dòng)數(shù)據(jù)遷移,將數(shù)據(jù)從包含最多chunk塊的片上遷移到chunk塊最少的片上,直到chunk塊的數(shù)量差不大于2為止[12]。數(shù)據(jù)遷移以chunk塊為單位進(jìn)行遷移,最初默認(rèn)大小為64 M,但隨著數(shù)據(jù)量的逐漸增大,最終每個(gè)塊的數(shù)據(jù)量會(huì)達(dá)到200 M[13]。

        通過(guò)閱讀源碼并對(duì)源碼進(jìn)行分析,MongoDB負(fù)載均衡算法的流程如圖3所示。

        圖3 負(fù)載均衡算法流程

        條件1:Minshard未達(dá)存儲(chǔ)上限且不存在寫回隊(duì)列;

        條件2:Maxshard-Minshard>=Threshold;

        條件3:負(fù)載均衡器仍然開(kāi)啟。

        2.3 負(fù)載均衡算法的爭(zhēng)議

        一直以來(lái),MongoDB的負(fù)載均衡算法在實(shí)際應(yīng)用中仍然存在許多問(wèn)題。這個(gè)均衡器只考慮了數(shù)據(jù)的存儲(chǔ)平衡,而沒(méi)有考慮負(fù)載平衡[14]。節(jié)點(diǎn)的負(fù)載取決于其配置及接受任務(wù)的輕重,盡管分片節(jié)點(diǎn)上的chunk塊數(shù)量相同,但在選擇目標(biāo)分片時(shí),沒(méi)有考慮分片節(jié)點(diǎn)上的負(fù)載不相同這一問(wèn)題,因此得到的結(jié)果也可能不是最好的,所以很有必要對(duì)MongoDB的負(fù)載均衡算法進(jìn)行改進(jìn)。

        3 基于節(jié)點(diǎn)實(shí)時(shí)負(fù)載的負(fù)載均衡算法

        3.1 基于節(jié)點(diǎn)的均衡算法思想

        通過(guò)前面的分析了解到MongoDB的負(fù)載均衡算法并不是十分完善,因此文中在原始算法的基礎(chǔ)上提出一種基于節(jié)點(diǎn)實(shí)時(shí)負(fù)載的負(fù)載均衡算法。改進(jìn)的算法將節(jié)點(diǎn)的實(shí)時(shí)負(fù)載情況作為判斷條件,在節(jié)點(diǎn)上增加負(fù)載代理,在負(fù)載均衡器上增加負(fù)載監(jiān)視器,通過(guò)負(fù)載代理監(jiān)測(cè)各節(jié)點(diǎn)的負(fù)載情況并將數(shù)據(jù)發(fā)送給負(fù)載監(jiān)視器,均衡器將節(jié)點(diǎn)負(fù)載指數(shù)作為確定源分片和目的分片的一個(gè)指標(biāo)。

        將節(jié)點(diǎn)i的負(fù)載代理檢測(cè)到的CPU占有率、內(nèi)存使用率以及網(wǎng)絡(luò)帶寬占有率分別記為Ci、Mi以及Ni,CPU、內(nèi)存和網(wǎng)絡(luò)帶寬的權(quán)值分別設(shè)為i1、i2和i3,則節(jié)點(diǎn)i的負(fù)載指數(shù)Iload可表示為:

        Iload=i1×Ci+i2×Mi+i3×Ni

        (1)

        i1+i2+i3=1

        (2)

        假設(shè)自動(dòng)分片集群架構(gòu)中有n個(gè)分片,則平均負(fù)載Aveload為:

        (3)

        最大的節(jié)點(diǎn)負(fù)載為Maxload,設(shè)定閾值γ(一般默認(rèn)為8),若

        Maxload-Aveload≥γ

        (4)

        則此節(jié)點(diǎn)過(guò)載。改進(jìn)的基于節(jié)點(diǎn)的均衡算法在均衡chunk塊數(shù)量的同時(shí),還均衡了分片節(jié)點(diǎn)上的負(fù)載,可以有效提升原算法的性能,解決數(shù)據(jù)分布不均的問(wèn)題[15]。

        3.2 基于節(jié)點(diǎn)的均衡算法設(shè)計(jì)

        基于節(jié)點(diǎn)實(shí)時(shí)負(fù)載的負(fù)載均衡算法具體設(shè)計(jì)如下:

        (1)負(fù)載代理周期性地遍歷各分片,獲取節(jié)點(diǎn)負(fù)載信息并發(fā)送給負(fù)載監(jiān)視器。

        (2)負(fù)載監(jiān)視器計(jì)算出平均負(fù)載,確定負(fù)載最大的分片、chunk塊數(shù)最多的分片和存儲(chǔ)即將超過(guò)上限的待移除分片,將既不是待移除分片且chunk塊數(shù)也不是最多的分片列入最小分片的候選列表。

        (3)若分片塊數(shù)差超過(guò)設(shè)定閾值,則確定源分片為chunk塊數(shù)最多的分片;若分片塊數(shù)差滿足條件,但存在待移除分片,則確定源分片為待移除分片;若前兩個(gè)條件都不滿足但根據(jù)式(4)計(jì)算得出存在過(guò)載分片,則源分片為負(fù)載最大的分片;若以上條件都不滿足,則不需要遷移。

        算法流程如圖4所示。

        圖4 基于節(jié)點(diǎn)實(shí)時(shí)負(fù)載的負(fù)載均衡算法流程

        4 算法性能評(píng)估

        4.1 測(cè)試環(huán)境

        測(cè)試環(huán)境基于MongoDB的自動(dòng)分片集群,由3臺(tái)機(jī)器構(gòu)成,每臺(tái)機(jī)器內(nèi)存都為4 GB,操作系統(tǒng)為L(zhǎng)inux Redhat,MongoDB版本為3.4.0。集群包含3個(gè)分片,每個(gè)分片由一個(gè)副本集組成,每個(gè)副本集包含1個(gè)primary節(jié)點(diǎn),2個(gè)secondary節(jié)點(diǎn)和1個(gè)arbiter節(jié)點(diǎn)。結(jié)合實(shí)際運(yùn)行情況,設(shè)置CPU占有率和內(nèi)存使用率權(quán)重占比較大,網(wǎng)絡(luò)帶寬占有率權(quán)重較小,i1、i2和i3分別為0.2、0.7和0.1,閾值γ設(shè)置為13%。

        4.2 平臺(tái)搭建

        (1)配置副本集。

        > cfg={_id:“shard1”,members:[{_id:0,host:“192.168.169.128:40007”},

        {_id:0,host:“192.168.169.128:40007”},

        {_id:0,host:“192.168.169.128:40007”}]}

        > rs.initiate(cfg);

        (2)配置Config Server。

        mongod --configsvr --dbpath=/home/mongod/data/mongo.conf

        (3)配置Mongos。

        mongos -f /home/mongod/mongos/mongo.conf

        (4)配置Shard。

        >db.runCommand({addshard“shard1/192.168.148.61:40007,192.168.148.63:40007,192.168.148.65:40007”})

        4.3 算法測(cè)試結(jié)果

        首先,測(cè)試集群的并發(fā)寫入功能。為了保證數(shù)據(jù)總量相等,均插入一百萬(wàn)條數(shù)據(jù),在不同并發(fā)數(shù)下,新舊算法每秒可寫入的數(shù)據(jù)記錄如表1所示。

        表1 新舊算法并發(fā)寫入性能數(shù)據(jù)統(tǒng)計(jì)

        在并發(fā)數(shù)和記錄不變的情況下,測(cè)試集群的并發(fā)讀取性能,新舊算法每秒讀取的數(shù)據(jù)記錄如表2所示。

        表2 新舊算法并發(fā)讀取性能數(shù)據(jù)統(tǒng)計(jì)

        從實(shí)驗(yàn)數(shù)據(jù)結(jié)果可以看出,在并發(fā)數(shù)較小的時(shí)候,新算法的讀寫性能并沒(méi)有明顯優(yōu)于原算法,甚至可能會(huì)低于原算法,但隨著并發(fā)數(shù)的增加,新算法明顯優(yōu)于原算法。這是因?yàn)楦倪M(jìn)的基于節(jié)點(diǎn)實(shí)時(shí)負(fù)載的負(fù)載均衡算法將節(jié)點(diǎn)負(fù)載作為一個(gè)考慮條件,當(dāng)數(shù)據(jù)量不夠大時(shí),計(jì)算節(jié)點(diǎn)的負(fù)載情況資源利用率低,影響了系統(tǒng)性能,而在大數(shù)據(jù)及大并發(fā)的情況下,應(yīng)用新算法之后的讀寫性能明顯優(yōu)于原算法,提高了集群的并發(fā)讀寫能力。

        5 結(jié)束語(yǔ)

        首先介紹了MongoDB自動(dòng)分片的原理,然后分析了其負(fù)載均衡算法的缺點(diǎn),針對(duì)分片間分配數(shù)據(jù)不均勻的問(wèn)題,提出了一種基于節(jié)點(diǎn)實(shí)時(shí)負(fù)載的負(fù)載均衡算法。接著搭建了測(cè)試環(huán)境,針對(duì)數(shù)據(jù)的并發(fā)讀寫性能與原算法做一個(gè)對(duì)比實(shí)驗(yàn),通過(guò)實(shí)驗(yàn)得出,該算法在數(shù)據(jù)的讀寫均衡上得到了明顯優(yōu)化,提高了集群的并發(fā)讀寫性能,證明了算法的有效性。

        猜你喜歡
        均衡器分片集群
        上下分片與詞的時(shí)空佈局
        詞學(xué)(2022年1期)2022-10-27 08:06:12
        分片光滑邊值問(wèn)題的再生核方法
        CDN存量MP4視頻播放優(yōu)化方法
        海上小型無(wú)人機(jī)集群的反制裝備需求與應(yīng)對(duì)之策研究
        基于模糊二分查找的幀分片算法設(shè)計(jì)與實(shí)現(xiàn)
        一種無(wú)人機(jī)集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計(jì)
        電子制作(2018年11期)2018-08-04 03:25:40
        Python與Spark集群在收費(fèi)數(shù)據(jù)分析中的應(yīng)用
        勤快又呆萌的集群機(jī)器人
        無(wú)線傳感網(wǎng)OFDM系統(tǒng)中信道均衡器的電路實(shí)現(xiàn)
        電子器件(2015年5期)2015-12-29 08:42:39
        一種基于LC振蕩電路的串聯(lián)蓄電池均衡器
        中出内射颜射骚妇| 久久亚洲中文字幕乱码| 少妇被又大又粗又爽毛片久久黑人| 亚洲国产另类精品| 欧美在线观看一区二区| 日韩久久免费精品视频| 成人一区二区人妻少妇| 狠狠色婷婷久久综合频道日韩| 亚洲国产成人精品女人久久久 | 成人国产一区二区三区精品不卡| 亚洲av成人一区二区| 特黄做受又粗又长又大又硬| 无码欧亚熟妇人妻AV在线外遇 | 亚洲人成77777在线播放网站| 大香视频伊人精品75| 国产区高清在线一区二区三区| 国产免费在线观看不卡| 亚洲精品无码国产| 国产成人精品三级麻豆| 白白色青青草视频免费观看| 天堂网站一区二区三区| 少妇高潮潮喷到猛进猛出小说| 一区二区视频观看在线| 免费视频亚洲一区二区三区| 97se亚洲国产综合自在线观看| 免费人成再在线观看网站 | 国产自拍三级黄片视频| 特级做a爰片毛片免费看| 欧美黑人巨大xxxxx| 日本精品久久性大片日本| 日本一区三区三区在线观看| 99精品国产在热久久| 免费国产一级特黄aa大片在线| 久久久精品少妇—二区| 日产精品久久久一区二区| 亚洲欧美精品91| 日本免费三片在线播放| 免费国产在线精品一区 | 亚洲三级在线播放| 亚洲最大av在线精品国产| 色婷婷亚洲精品综合影院|