張曉燕 肖明 周偉立

摘? ?要:在數(shù)據(jù)業(yè)務(wù)和移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)應(yīng)用中DNS系統(tǒng)的穩(wěn)定性尤為重要。在現(xiàn)網(wǎng)DNS系統(tǒng)中遞歸服務(wù)器是一個(gè)節(jié)點(diǎn)一臺(tái)服務(wù)器,采用單進(jìn)程bind軟件,穩(wěn)定性堪憂。本文以輪循負(fù)載調(diào)度算法進(jìn)行DNS的UDP請(qǐng)求分發(fā),通過以容器為進(jìn)程處理單元來應(yīng)對(duì)并發(fā)請(qǐng)求,以提高DNS在面對(duì)高延時(shí)的遞歸解析服務(wù)成功率及物理資源的有效利用率,并在本文中以對(duì)比測(cè)試的方式展現(xiàn)了容器技術(shù)與傳統(tǒng)BIND技術(shù)的優(yōu)缺。
關(guān)鍵詞:DNS系統(tǒng)? bind? 遞歸服務(wù)器? 穩(wěn)定性? 容器技術(shù)
中圖分類號(hào):TP393? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? ? ? ? ? ? ? ? ? 文章編號(hào):1674-098X(2020)03(c)-0143-02
隨著移動(dòng)通信的迅猛發(fā)展,運(yùn)營商之間的競爭也越來激烈,用戶對(duì)業(yè)務(wù)質(zhì)量的要求越來越高。DNS系統(tǒng)作為互聯(lián)網(wǎng)的核心業(yè)務(wù)應(yīng)用,在數(shù)據(jù)業(yè)務(wù)和移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)應(yīng)用的支撐方面起到越來越重要的作用,DNS的穩(wěn)定性直接影響全網(wǎng)用戶的上網(wǎng)感知。然而在DNS系統(tǒng)的所有資源中,遞歸服務(wù)器是一個(gè)節(jié)點(diǎn)一臺(tái)服務(wù)器,因此,遞歸服務(wù)器的穩(wěn)定性就顯得尤為重要。新疆移動(dòng)現(xiàn)網(wǎng)DNS遞歸服務(wù)目前采用單進(jìn)程bind軟件的開源解決方案。為保證服務(wù)的運(yùn)行穩(wěn)定,進(jìn)程中沒有采用較多的線程服務(wù)方式運(yùn)行。線程數(shù)量與系統(tǒng)穩(wěn)定性成正比,一個(gè)線程異常將會(huì)使得整個(gè)bind進(jìn)程錯(cuò)誤,進(jìn)程錯(cuò)誤將導(dǎo)致業(yè)務(wù)受阻,因此bind軟件底層沒有運(yùn)行較多的線程。如何提高設(shè)備運(yùn)行效率呢?若單一追求多線程工作將直接影響系統(tǒng)的穩(wěn)定性,系統(tǒng)不穩(wěn)定直接反映在用戶的使用感知上,為避免對(duì)用戶體驗(yàn)造成不良并提高遞歸請(qǐng)求的服務(wù)瓶頸,新疆移動(dòng)為了降低成本和提高利潤,決定從現(xiàn)有網(wǎng)絡(luò)中來挖掘潛力,本文首次提出容器技術(shù)進(jìn)行設(shè)備性能優(yōu)化。主要闡述如何運(yùn)用容器技術(shù)進(jìn)行進(jìn)程組隔離(cgroup)的方式并行運(yùn)行bind軟件。項(xiàng)目實(shí)施后我部將通過增加容器數(shù)量,提高服務(wù)進(jìn)程數(shù)量,以提高系統(tǒng)穩(wěn)定性,降低進(jìn)程異常導(dǎo)致的系統(tǒng)異常。單個(gè)容器進(jìn)程的異常或掛死后不會(huì)影響到其他容器內(nèi)bind的正常服務(wù),以降低對(duì)新疆移動(dòng)用戶的影響面積。
1? 遞歸的能力
隨著4G-LTE、3G、WLAN以及有線寬帶業(yè)務(wù)的快速發(fā)展,內(nèi)容服務(wù)商的不斷新增,運(yùn)營商在全國各省普遍出現(xiàn)DNS系統(tǒng)流量猛增的情況,遞歸性能更是成倍增長,導(dǎo)致服務(wù)器CPU占用率很高,導(dǎo)致系統(tǒng)效率不高,嚴(yán)重影響用戶的上網(wǎng)感知,DNS的遞歸服務(wù)器性能已經(jīng)不能滿足未來業(yè)務(wù)發(fā)展所需要求,對(duì)運(yùn)營商業(yè)務(wù)的發(fā)展,有很大影響。新疆移動(dòng)雖然在2015年DNS系統(tǒng)已新增一套手機(jī)DNS系統(tǒng),但面對(duì)現(xiàn)階段和未來日益猛增的遞歸業(yè)務(wù),DNS遞歸服務(wù)的并發(fā)能力是否能滿足業(yè)務(wù)的發(fā)展需要、達(dá)到集團(tuán)規(guī)范要求,目前仍是未知數(shù)。
根據(jù)2017年7月30日統(tǒng)計(jì)數(shù)據(jù)表明,新疆移動(dòng)手機(jī)DNS遞歸總訪問量達(dá)到6.91億次,峰值為3.1萬QPS。
DNS系統(tǒng)遞歸服務(wù)能力是業(yè)務(wù)發(fā)展的主要瓶頸。目前新疆移動(dòng)存在的主要問題有:
(1)目前新疆移動(dòng)的DNS遞歸解決方案采用的是bind的開源解決方案,為保證系統(tǒng)的穩(wěn)定運(yùn)行,沒有開放多線程運(yùn)行模式。因?yàn)槎嗑€程運(yùn)行對(duì)系統(tǒng)服務(wù)的穩(wěn)定性沖擊較大,一個(gè)線程的異常會(huì)使所在進(jìn)程內(nèi)的所有線程運(yùn)行錯(cuò)誤。
(2)遞歸服務(wù)的上限基本上在3~5萬QPS內(nèi),達(dá)到該并發(fā)量時(shí),仍有大量的CPU和內(nèi)存資源閑滯,其中被使用的物理資源中大部分消耗在高延時(shí)的請(qǐng)求服務(wù)和隊(duì)列等待中。
由此可見新疆移動(dòng)亟需對(duì)DNS遞歸服務(wù)器在保證服務(wù)器穩(wěn)定性的前提下提升遞歸服務(wù)的并發(fā)處理能力。
2? 新疆移動(dòng)DNS系統(tǒng)遞歸服務(wù)器容器化流程
新疆移動(dòng)DNS系統(tǒng)遞歸服務(wù)器容器化是基于LVS負(fù)載均衡架構(gòu)的DNS容器應(yīng)用,如圖1所示。
LVS+Dcoker為主體架構(gòu)設(shè)計(jì),以輪循負(fù)載調(diào)度算法進(jìn)行DNS的UDP請(qǐng)求分發(fā),通過以docker容器為進(jìn)程處理單元來應(yīng)對(duì)高并發(fā)請(qǐng)求,以提高DNS在面對(duì)高延時(shí)的遞歸解析服務(wù)成功率及物理資源的有效利用率,此架構(gòu)設(shè)計(jì),可以應(yīng)對(duì)不同的使用場(chǎng)景,具有開放性的選擇。以bind程序?yàn)榛A(chǔ)來解決udp請(qǐng)求的高并發(fā)場(chǎng)景,同樣,也可以以此架構(gòu)來解決tcp請(qǐng)求的高并發(fā)方案,應(yīng)用場(chǎng)景可擴(kuò)展的目前主流的任何應(yīng)用。
3? 新疆移動(dòng)DNS系統(tǒng)遞歸服務(wù)器容器化目標(biāo)
3.1 實(shí)現(xiàn)負(fù)載均衡
為了有效地實(shí)現(xiàn)負(fù)載均衡,在DNS系統(tǒng)遞歸服務(wù)器內(nèi)部中采用LVS技術(shù)。
3.2 實(shí)現(xiàn)容器互備份
容器間互為備份,當(dāng)其中一個(gè)容器出現(xiàn)問題時(shí),其他容器應(yīng)可以為其用戶提供服務(wù)。
3.3 性能目標(biāo)
由于域名服務(wù)系統(tǒng)是互聯(lián)網(wǎng)絡(luò)的重要基礎(chǔ)設(shè)施之一,因此域名解析系統(tǒng)的服務(wù)要盡最大可能做到不發(fā)生中斷,服務(wù)可用性需要達(dá)到99.99%。具體實(shí)施過程中,應(yīng)利用多服務(wù)器冗余的部署實(shí)施方法,滿足服務(wù)系統(tǒng)的高可用性要求。
遞歸服務(wù)器域名解析能力應(yīng)保證具備不低于服務(wù)域內(nèi)正常業(yè)務(wù)量情況下歷史請(qǐng)求量峰值3倍的處理能力,以應(yīng)對(duì)可能針對(duì)域名系統(tǒng)的突發(fā)訪問或服務(wù)攻擊。
4? 新疆移動(dòng)DNS系統(tǒng)遞歸服務(wù)器容器化實(shí)現(xiàn)
遞歸服務(wù)器容器化后,容器間互為災(zāi)備,當(dāng)其中一個(gè)容器出現(xiàn)問題時(shí),其他容器應(yīng)可以為其用戶提供服務(wù)。
4.1 遞歸服務(wù)器容器配置
新疆移動(dòng)DNS系統(tǒng)架構(gòu)目前為緩存、遞歸服務(wù)器和DNS相關(guān)軟件,每個(gè)節(jié)點(diǎn)一臺(tái)遞歸服務(wù)器,現(xiàn)通過容器的方式實(shí)現(xiàn)單節(jié)點(diǎn)多容器,實(shí)現(xiàn)在無硬件擴(kuò)容的基礎(chǔ)上達(dá)到多服務(wù)。
遞歸服務(wù)器采用LVS的方式進(jìn)行負(fù)載均衡。當(dāng)一個(gè)容器出問題后,其將無法更新路由表,則上層網(wǎng)絡(luò)設(shè)備將會(huì)把DNS業(yè)務(wù)流量發(fā)送給其他正常服務(wù)器,可有效避免DNS服務(wù)中斷的風(fēng)險(xiǎn)。創(chuàng)建容器時(shí),只需配置虛IP對(duì)緩存服務(wù)器發(fā)布即可,遞歸補(bǔ)對(duì)用戶提供服務(wù),對(duì)前端安全防護(hù)設(shè)備無需任何操作,對(duì)DNS網(wǎng)管設(shè)備無需任何操作,對(duì)DNS日志設(shè)備無需任何操作,對(duì)DNS日志分析設(shè)備無需任何操作。整套方案簡單高效,便于施工,加快項(xiàng)目建設(shè)速度,快速完工。
考慮到DNS業(yè)務(wù)的重要性,因此DNS系統(tǒng)遞歸服務(wù)器的優(yōu)化仍然采用雙局址,即北京路和南湖路兩個(gè)物理節(jié)點(diǎn)的遞歸服務(wù)器均容器化。其整體配置如下:
(1)南湖節(jié)點(diǎn)遞歸服務(wù)器:開10個(gè)容器,每個(gè)容器跑一個(gè)DNS應(yīng)用。設(shè)備內(nèi)使用LVS進(jìn)行負(fù)載均衡,通過ospf發(fā)布服務(wù)IP,對(duì)南湖緩存服務(wù)器提供DNS服務(wù)。
(2)北京路節(jié)點(diǎn)遞歸服務(wù)器:開10個(gè)容器,每個(gè)容器跑一個(gè)DNS應(yīng)用。設(shè)備內(nèi)使用LVS進(jìn)行負(fù)載均衡,通過ospf發(fā)布服務(wù)IP,對(duì)北京路緩存服務(wù)器提供DNS服務(wù)。
4.2 DNS系統(tǒng)容器化后的安全問題
DNS系統(tǒng)在安全方面,內(nèi)部容器化不影響DNS系統(tǒng)本身的安全。面對(duì)遞歸攻擊的防護(hù),我們的遞歸服務(wù)器的遞歸軟件在容器化后,單套軟件性能不變,容器數(shù)量的增加對(duì)服務(wù)器抗遞歸攻擊的能力增強(qiáng)。遞歸DNS的遞歸淘汰機(jī)制,可在遞歸資源飽和時(shí)通過遞歸淘汰算法計(jì)算出可能是黑客發(fā)出的攻擊遞歸請(qǐng)求,并釋放這些遞歸資源,這項(xiàng)策略的意義在于當(dāng)服務(wù)器遭受遞歸攻擊時(shí),能夠使遞歸個(gè)數(shù)滿足正常的用戶遞歸請(qǐng)求,而不是被垃圾流量占用。
DNS服務(wù)器在做遞歸請(qǐng)求時(shí),需要占用服務(wù)器更多的資源,所以DNS服務(wù)軟件會(huì)對(duì)遞歸并發(fā)數(shù)進(jìn)行限制,當(dāng)并發(fā)數(shù)達(dá)到設(shè)定的數(shù)值后系統(tǒng)就不再處理新的遞歸請(qǐng)求,這樣黑客就會(huì)利用極少量的流量發(fā)送大量的遞歸請(qǐng)求來耗盡DNS服務(wù)器的遞歸資源,導(dǎo)致用戶的DNS遞歸解析失敗。
5? 結(jié)語
在對(duì)該課題研究的時(shí)候,閱讀了大量的國內(nèi)外文獻(xiàn)以及書籍,結(jié)合新疆移動(dòng)的遞歸優(yōu)化項(xiàng)目課題,對(duì)新疆移動(dòng)DNS系統(tǒng)的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,并對(duì)遞歸數(shù)據(jù)的分析做了一定工作。結(jié)合當(dāng)前互聯(lián)網(wǎng)的發(fā)展,使得DNS解析逐漸增多的現(xiàn)實(shí),對(duì)DNS系統(tǒng)遞歸服務(wù)器做了深入地研究,解決了單點(diǎn)DNS在面對(duì)高延時(shí)域名遞歸請(qǐng)求時(shí),大量的過期應(yīng)答判斷占用了多數(shù)的線程,導(dǎo)致CPU中斷、上下文切換數(shù)、內(nèi)核隊(duì)列線程數(shù)倍增,過多的運(yùn)算資源被閑置,影響其他的正常請(qǐng)求無法處理。容器的引入讓內(nèi)核依據(jù)容器負(fù)載分擔(dān)到各CPU核心上,保證其他高延時(shí)的域名請(qǐng)求負(fù)載在多個(gè)容器中,以容器為單位,高延時(shí)的域名請(qǐng)求占用較低的線程比例運(yùn)行,在保證每個(gè)容器內(nèi)最少線程數(shù)的前提下,加大容器數(shù)量,提高了服務(wù)進(jìn)程數(shù)量,將容器進(jìn)程組充分作用于每顆CPU核心,提高系統(tǒng)資源有效利用率。采用LVS的NAT負(fù)載均衡方式,以輪循負(fù)載調(diào)度算法進(jìn)行DNS的UDP請(qǐng)求分發(fā),通過以容器為進(jìn)程處理單元來應(yīng)對(duì)并發(fā)請(qǐng)求,以提高DNS在面對(duì)高延時(shí)的遞歸解析服務(wù)成功率及物理資源的有效利用率。在服務(wù)運(yùn)行期間容器可進(jìn)行批量快速部署,并且面對(duì)服務(wù)異常可直接快速新增容器接管,實(shí)現(xiàn)秒級(jí)服務(wù)冗余切換。
參考文獻(xiàn)
[1] 王軍亮,謝曉堯,黎春,等.LVS集群中IP負(fù)載均衡技術(shù)的研究[J].貴州科學(xué),2009,27(2):76-79.
[2] 莘建浦.基于Docker容器的網(wǎng)絡(luò)安全實(shí)訓(xùn)平臺(tái)的研究與實(shí)現(xiàn)[D]. 北京郵電大學(xué),2018 .
[3] 李燦彬,甘宏.基于Docker容器的云平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].科技廣場(chǎng),2017(6):38-41.
[4] 劉輝揚(yáng).基于Docker的容器監(jiān)控和調(diào)度的研究與實(shí)現(xiàn)[D].華南理工大學(xué),2016.