朱慶華,?,?,張景峰
(北京電子科技職業(yè)學(xué)院電信工程學(xué)院,北京100176)
5G核心網(wǎng)是第一個(gè)互聯(lián)網(wǎng)技術(shù)和通信技術(shù)融合(ICT)的實(shí)際應(yīng)用,采用基于服務(wù)的網(wǎng)絡(luò)架構(gòu),其相較于4G,最主要的變化就是虛擬化,即網(wǎng)元功能虛擬化(NFV),即使用HP,IBM等廠商的x86通用服務(wù)器,目前主要為刀片服務(wù)器[2],而對(duì)于軟件而言,主要采用開源平臺(tái),構(gòu)建屬于自己的虛擬化平臺(tái),將核心網(wǎng)網(wǎng)元在上面進(jìn)行構(gòu)建[3]。5G主要基于SBA架構(gòu),基于云原生設(shè)計(jì),采取微服務(wù)理念[4],將5G 核心網(wǎng)拆分為多個(gè)不同功能的個(gè)體,每個(gè)個(gè)體實(shí)現(xiàn)自己的微服務(wù),使其具有高可用性[5]。云原生部署簡(jiǎn)單快捷,應(yīng)用按需伸縮,但依舊存在著安全性不足,可靠性不夠,需要研究負(fù)載均衡算法來(lái)應(yīng)用多場(chǎng)景多業(yè)務(wù)的需求。
容器化技術(shù)可以輕松打包應(yīng)用程序的代碼、配置和依賴關(guān)系,將其變成容易使用的構(gòu)建塊,從而實(shí)現(xiàn)環(huán)境一致性、運(yùn)營(yíng)效率、開發(fā)人員生產(chǎn)力和版本控制等諸多目標(biāo)。容器可以幫助保證應(yīng)用程序快速、可靠、一致地部署人們所需的應(yīng)用[6],為5G核心網(wǎng)部署帶來(lái)便捷。
本文基于現(xiàn)目前開源5G核心網(wǎng)進(jìn)展,研究云原生5G核心網(wǎng)原型系統(tǒng)平臺(tái)的構(gòu)建,主要包括現(xiàn)有網(wǎng)絡(luò)功能的容器化實(shí)現(xiàn),符合5G核心網(wǎng)的云原生系統(tǒng)構(gòu)建,以及云化環(huán)境中的動(dòng)態(tài)擴(kuò)縮容算法的研究,以實(shí)現(xiàn)具備高可靠的云原生5G 核心網(wǎng)系統(tǒng)平臺(tái)。
該系統(tǒng)通過(guò)將5G核心網(wǎng)元部署到docker上,之后通過(guò)k8s中的pod將docker中運(yùn)行的核心網(wǎng)鏡像進(jìn)行管控,對(duì)于5G核心網(wǎng)內(nèi)部的工作原理由于過(guò)于冗長(zhǎng),且不是本文主要內(nèi)容,所以在這里不再進(jìn)行解釋。如果對(duì)于AMF,SMF,UDR,AUSF 的請(qǐng)求過(guò)多,會(huì)通過(guò)k8s 中的HPA 自動(dòng)擴(kuò)縮容進(jìn)行pod 的增加或者減少,同時(shí)如果那個(gè)節(jié)點(diǎn)出現(xiàn)問題,通過(guò)K8s 自帶的負(fù)載均衡算法也同時(shí)會(huì)將上面的節(jié)點(diǎn)的pod轉(zhuǎn)移至其他的節(jié)點(diǎn)上,在這里,用了一個(gè)master,兩個(gè)node節(jié)點(diǎn)進(jìn)行管控,通過(guò)將一個(gè)節(jié)點(diǎn)關(guān)閉調(diào)度,觀察其中的pod 轉(zhuǎn)移情況,及新增pod 的情況,除此之外,通過(guò)一個(gè)新增的虛擬機(jī)對(duì)于系統(tǒng)產(chǎn)生過(guò)多的激增請(qǐng)求,觀察k8s基于HPA對(duì)于新增的pod節(jié)點(diǎn)的調(diào)度。
使用ip+port 接收,然后將其傳輸?shù)较鄳?yīng)的服務(wù),并在傳輸層進(jìn)行操作。客戶端和服務(wù)器進(jìn)行一次TCP連接。該算法類似于路由器的作用。主要是在四層和七層起作用,而四層和七層的概念來(lái)自O(shè)SI七層模型。該算法主要是利用DNS解析,通過(guò)kube-proxy 實(shí)現(xiàn)。該算法默認(rèn)解析到虛擬IP 是一個(gè)service服務(wù),該虛擬IP 通過(guò)kube-proxy 將其均衡到各個(gè)不同的Pod上。Pod 的IP 不穩(wěn)定,每次重啟pod 后會(huì)隨機(jī)改變。但service的IP是穩(wěn)定的。所以主要是通過(guò)Node Port暴露服務(wù)。使相應(yīng)的pod可以被外界所訪問[7]。
Service 根據(jù)kube-proxy 的不同的代理,展現(xiàn)出不同的性能:
1)userspace模式
service的請(qǐng)求會(huì)從用戶空間進(jìn)入內(nèi)核,然后再返回到用戶空間,由kube-proxy 完成后端的選擇和代理工作,但是這樣所耗費(fèi)的流量和資源巨大,導(dǎo)致性能急劇下降。但是,需要注意的是:請(qǐng)求到達(dá)iptables時(shí)會(huì)進(jìn)入內(nèi)核,而kube-proxy 在這里的主要作用監(jiān)聽是在用戶的工作狀態(tài)。因此請(qǐng)求就會(huì)相應(yīng)地形成從用戶到內(nèi)核再到用戶的一個(gè)傳遞過(guò)程,從而降低了服務(wù)性能。因此,userspace 性能差。
2)iptables模式
通過(guò)Iptables實(shí)現(xiàn)一個(gè)四層的TCP連接;kube-proxy負(fù)責(zé)創(chuàng)建iptables 中NAT 的相應(yīng)規(guī)則,但不負(fù)責(zé)流量轉(zhuǎn)發(fā)。這種基于iptables 的負(fù)載均衡,操作簡(jiǎn)單,但是當(dāng)集群規(guī)模大導(dǎo)致請(qǐng)求響應(yīng)變得多起來(lái)的時(shí)候,這種基于iptables 的負(fù)載均衡的性能就會(huì)相應(yīng)變差。當(dāng)添加一個(gè)service的時(shí)候,命令行工具需要從內(nèi)核中讀取當(dāng)前所有的service 列表,然后重新編輯列表,之后再將內(nèi)核中的列表進(jìn)行更新。例如:假如要添加N 個(gè)service 同時(shí),相應(yīng)的復(fù)雜度為O(N^2)。但是在轉(zhuǎn)發(fā)面上,所有service ip地址組成了一個(gè)list,每一個(gè)報(bào)文都需要查找這個(gè)list,在其中找到相應(yīng)的IP,才可以進(jìn)行下一步操作。但是假如一個(gè)IP 在list 末尾,就需要遍歷N 次,復(fù)雜度為O(N/2)。
沖擊波波陣面前方A和后方B的應(yīng)變、應(yīng)力和粒子速度分別為和{εB, σB, vB} = {εB, σB, 0},其中v為沖擊速度,其值在沖擊過(guò)程中逐漸減少。波陣面上的質(zhì)量和能量守恒關(guān)系[13]分別給出:
四層這種負(fù)載均衡有一些缺點(diǎn),缺點(diǎn)如下:
Service 如果有很多,并且為了暴露端口供外面的主機(jī)訪問,就需要綁定Node 的主機(jī)端口,這樣的話,外圍的相應(yīng)端口必須開放從而就可以進(jìn)行服務(wù)調(diào)用。為解決這個(gè)問題,比較通用的方式是通過(guò)一個(gè)外部的負(fù)載均衡器,例如nginx,綁定相應(yīng)的端口號(hào),之后再根據(jù)相應(yīng)的地址接口進(jìn)行向后面的Service IP進(jìn)行一系列的轉(zhuǎn)發(fā)操作。
Service的同時(shí)存在著很多分發(fā)策略:例如輪詢機(jī)制。將請(qǐng)求轉(zhuǎn)發(fā)到后端的各個(gè)pod之中,由此衍生除了加權(quán)輪詢,即給不同的pod加入權(quán)重,幫助加速實(shí)現(xiàn)負(fù)載均衡。
七層負(fù)載均衡主要來(lái)自現(xiàn)代通信的OSI 七層模型中的第七層應(yīng)用層,負(fù)載均衡器根據(jù)虛擬的URL和主機(jī)名來(lái)接收或者發(fā)送請(qǐng)求,將請(qǐng)求進(jìn)行相應(yīng)的負(fù)載均衡處理之后,進(jìn)行相應(yīng)轉(zhuǎn)發(fā),最終實(shí)現(xiàn)整個(gè)系統(tǒng)的負(fù)載均衡。
七層負(fù)載均衡是通過(guò)建立兩次TCP 連接來(lái)進(jìn)行相應(yīng)的負(fù)載均衡??蛻舻截?fù)載均衡器,負(fù)載均衡器依據(jù)于相關(guān)的請(qǐng)求中所傳輸?shù)膬?nèi)容主要來(lái)自URL或cookie中的信息,選擇合適的負(fù)載均衡的算法,選擇相應(yīng)的服務(wù)器;建立負(fù)載均衡器到服務(wù)器之間的連接。但必須注意的是負(fù)載均衡設(shè)備需要先實(shí)現(xiàn)使得服務(wù)器和客戶端建立TCP 連接后,客戶端發(fā)送的含有應(yīng)用層內(nèi)容的報(bào)文會(huì)被接受,然后系統(tǒng)會(huì)根據(jù)該報(bào)文中的特定字段,通過(guò)負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,內(nèi)部服務(wù)器就因此會(huì)被最終確定,反向代理也由此而來(lái)。
Ingress 是k8s 的一種資源對(duì)象,Ingress 允許外部訪問k8s服務(wù),通過(guò)創(chuàng)建規(guī)則集合來(lái)配置訪問權(quán)限,這些規(guī)則定義了相應(yīng)的服務(wù)被訪問的權(quán)限設(shè)置,支持HTTP 和HTTPS 協(xié)議;In‐gress 配置相應(yīng)的URL 訪問設(shè)置、同時(shí)設(shè)立相關(guān)的主機(jī)名等一系列配置,促使系統(tǒng)正常運(yùn)行。
七層負(fù)載均衡相較于四層負(fù)載均衡更占CPU,但并不會(huì)導(dǎo)致服務(wù)器性能下降。七層負(fù)載均衡可以讓負(fù)載均衡器做出相應(yīng)的更恰當(dāng)?shù)姆磻?yīng)抉擇,并通過(guò)相應(yīng)操作對(duì)于相關(guān)內(nèi)容進(jìn)行優(yōu)化,例如壓縮、加密等。七層負(fù)載均衡同樣可以利用buffering等一些操作來(lái)卸載其他服務(wù)器的例如慢速連接等一些壞連接,從而提高性能。
圖2 七層負(fù)載均衡原理圖
對(duì)于上述負(fù)載而言,還有若干種均衡算法:
第一種:輪循均衡;負(fù)載均衡器將任何一次來(lái)自客戶端的請(qǐng)求輪流平均分配給其內(nèi)部中的服務(wù)器,每次服務(wù)請(qǐng)求到達(dá)時(shí),一次查找內(nèi)部服務(wù)器,找到?jīng)]有負(fù)載的服務(wù)器,這種算法在服務(wù)器配置均衡的情況下,大有裨益。
第二種:權(quán)重輪循均衡:由于每組組服務(wù)器中不同的服務(wù)器處理的性能有很大的差別,如果給每個(gè)服務(wù)器分配不同的權(quán)值,服務(wù)器可以因?yàn)椴煌臋?quán)值而規(guī)劃相應(yīng)的負(fù)載。
第三種:隨機(jī)均衡(Random):把來(lái)自網(wǎng)絡(luò)的請(qǐng)求通過(guò)哈希等相關(guān)算法不均勻的分配給內(nèi)部中的多個(gè)服務(wù)器。
第四種:最少連接數(shù)均衡是值得是客戶端的每一次服務(wù)請(qǐng)求在使服務(wù)器工作的時(shí)間很可能大有不同,一旦工作時(shí)間變得更長(zhǎng),如果僅僅是簡(jiǎn)單地套用相關(guān)的輪詢和隨機(jī)均衡算法,不同的服務(wù)器會(huì)有極大的不同,所以隨之帶來(lái)的負(fù)載均衡仍舊有很大的問題。
第五種:處理能力均衡,這種負(fù)載均衡算法是一種在七層負(fù)載下使用較多的均衡算法,該均衡算法的主要原理是依據(jù)于相關(guān)的系統(tǒng)指標(biāo),將請(qǐng)求的服務(wù)分發(fā)給負(fù)載較輕的服務(wù)器,該指標(biāo)包括,服務(wù)器的處理性能,和網(wǎng)絡(luò)的擁塞情況,所以,更加因地制宜,性能更加優(yōu)秀。
四層負(fù)載均衡主要應(yīng)用于單master 節(jié)點(diǎn),即,通過(guò)關(guān)閉其中一個(gè)node節(jié)點(diǎn),發(fā)現(xiàn):停止一個(gè)節(jié)點(diǎn)的調(diào)度之后:
圖3所示,k8snode2節(jié)點(diǎn)停止調(diào)度
圖3 關(guān)閉節(jié)點(diǎn)調(diào)度
增加pod副本數(shù)驗(yàn)證新增pod的節(jié)點(diǎn)分布
輸入命令:kubectl scale deploy/amf --replicas=5,將新增數(shù)設(shè)為5
由圖中可知,其新增節(jié)點(diǎn)均未在k8snode2上分布
恢復(fù)節(jié)點(diǎn)2(k8snode2)調(diào)度
輸入命令:kubectl uncordon k8snode2
輸入命令:kubectl get pods
圖4 重新調(diào)度后pod
可見原本的k8snode2節(jié)點(diǎn)上的pod,轉(zhuǎn)入k8snode2節(jié)點(diǎn)。
本文通過(guò)四層負(fù)載均衡和七層負(fù)載均衡算法的介紹并通過(guò)但master節(jié)點(diǎn),關(guān)閉一個(gè)節(jié)點(diǎn)之后,通過(guò)考察剩余pod所處節(jié)點(diǎn)位置得到service 和kube-proxy 將其中的pod 進(jìn)行調(diào)度,實(shí)驗(yàn)證明所得到所部署的基于k8s 的5G 核心網(wǎng)系統(tǒng)擁有初步的負(fù)載均衡和擴(kuò)縮容能力。