摘要:文章設(shè)計(jì)的基于容器虛擬化技術(shù)的領(lǐng)域概念知識(shí)點(diǎn)自動(dòng)問(wèn)答系統(tǒng),不僅能夠準(zhǔn)確地回答學(xué)生所提出的問(wèn)題,幫助學(xué)生加深對(duì)概念及專業(yè)術(shù)語(yǔ)的理解,還能幫助教師節(jié)省答疑時(shí)間。同時(shí),該系統(tǒng)結(jié)合了Docker容器與K8S集群的優(yōu)點(diǎn),利用Docker+K8S相結(jié)合的容器虛擬化技術(shù)實(shí)現(xiàn)負(fù)載均衡,根據(jù)實(shí)時(shí)訪問(wèn)用戶數(shù)量對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)伸縮擴(kuò)容,從而滿足不同數(shù)量用戶的訪問(wèn)需求。
關(guān)鍵詞:容器虛擬化;自動(dòng)問(wèn)答系統(tǒng);Docker;K8S;負(fù)載均衡
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2024)27-0034-04
0 引言
自動(dòng)問(wèn)答系統(tǒng)(Automatic Question and AnsweringSystem,簡(jiǎn)稱QA) ,也稱為人機(jī)對(duì)話系統(tǒng)(Humanmachineconversation, HMC) ,是指用戶輸入自然語(yǔ)言形式描述的問(wèn)題,機(jī)器系統(tǒng)從大量數(shù)據(jù)中查找出準(zhǔn)確、簡(jiǎn)潔、人性化的回答并反饋給用戶。例如,當(dāng)用戶輸入“中國(guó)共產(chǎn)黨哪一年成立?”,問(wèn)答系統(tǒng)會(huì)回答“1921年”。
在現(xiàn)今的“互聯(lián)網(wǎng)+”時(shí)代,隨著互聯(lián)網(wǎng)技術(shù)與人工智能的飛速發(fā)展,問(wèn)答系統(tǒng)在人工智能和自然語(yǔ)言處理領(lǐng)域有廣泛的應(yīng)用前景和研究?jī)r(jià)值[1]。這種系統(tǒng)能夠給所提出的問(wèn)題提供準(zhǔn)確的回答,并可應(yīng)用于各個(gè)領(lǐng)域。國(guó)外開(kāi)發(fā)的限定領(lǐng)域問(wèn)答系統(tǒng)如:2015年,Caner Derici專門(mén)為高中生提供教育支持的封閉領(lǐng)域QA系統(tǒng)[2]。2018年,Karpagam等人設(shè)了基于移動(dòng)領(lǐng)域的自動(dòng)問(wèn)答系統(tǒng),為用戶提供計(jì)算機(jī)、軟硬件、書(shū)評(píng)等方面的知識(shí)[3]。
國(guó)內(nèi)研究的限定領(lǐng)域自動(dòng)問(wèn)答系統(tǒng)如:2018年,史夢(mèng)飛設(shè)計(jì)了一種結(jié)合基于語(yǔ)義依存分析的剪枝算法及自動(dòng)化模板的問(wèn)答方法,設(shè)計(jì)開(kāi)發(fā)了一套基于特定領(lǐng)域的中文知識(shí)庫(kù)問(wèn)答系統(tǒng)[4]。2019年,張楚婷將傳統(tǒng)的FAQ問(wèn)答模型和基于知識(shí)圖譜的問(wèn)答模型相結(jié)合,并基于BiLSTM-CRF的細(xì)粒ea64a7b1fefc5deea128880b0203772833dc674e5e2e356403e0324709577a9e度知識(shí)圖譜問(wèn)答模型,設(shè)計(jì)了以廣西為例的旅游行業(yè)問(wèn)答系統(tǒng)[5]。2021 年,文獻(xiàn)[6]設(shè)計(jì)并實(shí)現(xiàn)了信息安全領(lǐng)域的自動(dòng)問(wèn)答系統(tǒng)。2022年,范鈺程設(shè)計(jì)并實(shí)現(xiàn)了高考自動(dòng)問(wèn)答系統(tǒng),對(duì)問(wèn)答系統(tǒng)的算法進(jìn)行研究,分為實(shí)體識(shí)別任務(wù)和問(wèn)答匹配任務(wù),收集了3 000余所院校信息構(gòu)建高校招生知識(shí)圖譜,可以滿足用戶獲取高校專業(yè)信息的需求[7]。2023年,涂凌將知識(shí)圖譜中的結(jié)構(gòu)化信息和問(wèn)答與知識(shí)庫(kù)中常見(jiàn)問(wèn)題和答案相結(jié)合,設(shè)計(jì)并實(shí)現(xiàn)了面向蠶桑領(lǐng)域的自動(dòng)問(wèn)答系統(tǒng),從而提供更加全面和高效的問(wèn)答服務(wù)[8]。
以上系統(tǒng)大多是基于本地實(shí)現(xiàn),用戶承載量有限,一旦訪問(wèn)用戶量增多,就會(huì)出現(xiàn)查詢緩慢等問(wèn)題。本文設(shè)計(jì)的基于容器虛擬化技術(shù)的領(lǐng)域概念知識(shí)點(diǎn)自動(dòng)問(wèn)答系統(tǒng),不僅能夠準(zhǔn)確回答學(xué)生所提出的問(wèn)題,幫助學(xué)生加深對(duì)概念及專業(yè)術(shù)語(yǔ)的理解,還能幫助教師節(jié)省答疑時(shí)間。同時(shí),該系統(tǒng)結(jié)合了Docker容器與K8S集群的優(yōu)點(diǎn),利用Docker+K8S相結(jié)合的容器虛擬化技術(shù)實(shí)現(xiàn)負(fù)載均衡,根據(jù)實(shí)時(shí)訪問(wèn)用戶數(shù)量對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)伸縮擴(kuò)容,從而滿足不同數(shù)量用戶的訪問(wèn)需求。
1 相關(guān)工作
1.1 Docker 容器
Docker容器于2013年作為開(kāi)源項(xiàng)目推出,是基于經(jīng)典的C/S架構(gòu)并使用Go語(yǔ)言編寫(xiě)的應(yīng)用程序。它利用了cgroups和命名空間等容器計(jì)算概念。Docker 鏡像提供了一個(gè)輕量的、可執(zhí)行的軟件包,包含執(zhí)行程序所需的全部條件:代碼運(yùn)行和系統(tǒng)庫(kù)等。其優(yōu)點(diǎn)包括能夠與其他容器共享主機(jī)OS內(nèi)核,允許在單個(gè)服務(wù)器(或虛擬機(jī))上部署多個(gè)容器,僅需維護(hù)一個(gè)操作系統(tǒng)即可實(shí)現(xiàn)快速擴(kuò)展和部署。
相比于單純的Linux內(nèi)核容器技術(shù),Docker提供了完整的應(yīng)用/服務(wù)器運(yùn)行時(shí)環(huán)境打包,采用了分層鏡像構(gòu)建存儲(chǔ)等特性,以服務(wù)和應(yīng)用為核心。Docker 的核心模塊包括Docker Client、rootfs和Docker Regis?try。Docker Registry是Docker的鏡像倉(cāng)庫(kù)(類似于Git的代碼倉(cāng)庫(kù))。Images指Docker服務(wù)器從鏡像倉(cāng)庫(kù)中拉取的鏡像,而Containers指通過(guò)這些拉取的鏡像實(shí)例化并運(yùn)行的多個(gè)容器實(shí)體。所有操作請(qǐng)求均從Docker客戶端發(fā)出。
1.2 K8S 集群
K8S是一種基于容器技術(shù)的分布式解決方案,起初是在谷歌公司內(nèi)部運(yùn)營(yíng)了十幾年的一個(gè)開(kāi)源項(xiàng)目——Borg(博格)。2014年9月,谷歌公司將其開(kāi)源,并命名為Kubernetes。2015年7月,發(fā)布了第一個(gè)正式版本。截至目前,最新版本為1.30.0。K8S的架構(gòu)如圖2所示。
K8S(Kubernetes) 架構(gòu)圖通常包含多個(gè)組件和節(jié)點(diǎn),這些組件和節(jié)點(diǎn)共同協(xié)作,以實(shí)現(xiàn)容器的編排、管理和自動(dòng)化部署。K8S架構(gòu)圖主要包含以下組件:
1) Master 節(jié)點(diǎn)。這是Kubernetes 集群的控制中心,主要負(fù)責(zé)API服務(wù)、集群狀態(tài)管理和決策等。Mas?ter節(jié)點(diǎn)主要包括以下組件:
① kube-apiserver:Kubernetes API 的服務(wù)器,提供RESTful API接口,是所有組件交互的樞紐。
②etcd:分布式鍵值存儲(chǔ),用于保存集群的所有數(shù)據(jù)。
③kube-scheduler:負(fù)責(zé)Pod的調(diào)度,根據(jù)預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的Node上。
④ kube-controllermanager:負(fù)責(zé)維護(hù)集群的狀態(tài),如故障檢測(cè)、自動(dòng)擴(kuò)展和滾動(dòng)更新等。
2) Node 節(jié)點(diǎn)。這是Kubernetes集群的工作節(jié)點(diǎn),用于運(yùn)行容器化應(yīng)用。Node 節(jié)點(diǎn)主要包括以下組件:
① kubelet:在每個(gè)Node上運(yùn)行,負(fù)責(zé)維持容器的生命周期,同時(shí)負(fù)責(zé)Volume(CVI) 和網(wǎng)絡(luò)(CNI) 的管理。
② kube-proxy:負(fù)責(zé)為Service 提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡。
③ Container runtime:負(fù)責(zé)鏡像管理以及Pod和容器的實(shí)際運(yùn)行(CRI) 。
3) 網(wǎng)絡(luò)組件。如CNI(容器網(wǎng)絡(luò)接口)插件,用于實(shí)現(xiàn)容器網(wǎng)絡(luò)。
4) 存儲(chǔ)組件。如CVI(容器卷接口)插件,用于實(shí)現(xiàn)容器存儲(chǔ)。
5) 其他組件。如kube-dns,負(fù)責(zé)為Service 提供DNS服務(wù),以便Pod能夠相互發(fā)現(xiàn)和通信。
在這個(gè)架構(gòu)中,Master節(jié)點(diǎn)和Node節(jié)點(diǎn)通過(guò)API 進(jìn)行交互,Node節(jié)點(diǎn)負(fù)責(zé)運(yùn)行容器,而Master節(jié)點(diǎn)則負(fù)責(zé)管理和調(diào)度這些容器。此外,Kubernetes還提供了豐富的API接口和插件機(jī)制,使得用戶可以根據(jù)自己的需求進(jìn)行定制和擴(kuò)展。
1.3 資源調(diào)度與負(fù)載均衡
Kubernetes(K8S) 的資源調(diào)度與負(fù)載均衡涉及多個(gè)組件和策略,以確保集群中的資源得到高效、合理的利用,并滿足應(yīng)用程序的需求。
1.3.1 資源調(diào)度
K8S進(jìn)行資源調(diào)度遵循以下主要策略:
1) Scheduler。Kubernetes Scheduler 負(fù)責(zé)Pod 調(diào)度。它根據(jù)一系列調(diào)度算法和約束條件,決定將Pod 放置在集群中的哪個(gè)Node上運(yùn)行。
2) 資源親和性與反親和性。① 親和性(Affinity) 。定義了Pod應(yīng)該被調(diào)度到哪些Node上。② 反親和性(Anti-Affinity) 。定義了Pod 不應(yīng)該被調(diào)度到哪些Node上。通常用于確保高可用性,例如,避免將同一服務(wù)的多個(gè)副本都調(diào)度到同一個(gè)Node上。
3) 資源預(yù)留與限制。通過(guò)設(shè)置資源請(qǐng)求(re?quests) 和限制(limits) ,可以確保Pod 獲得足夠的資源,并防止單個(gè)Pod 消耗過(guò)多的資源。資源請(qǐng)求是Pod所需的最低資源量,而資源限制是Pod可以使用的最大資源量。
4) 優(yōu)先級(jí)與搶占。Kubernetes支持根據(jù)Pod的優(yōu)先級(jí)進(jìn)行調(diào)度。如果高優(yōu)先級(jí)的Pod需要資源,而當(dāng)前Node上只有低優(yōu)先級(jí)的Pod,那么低優(yōu)先級(jí)的Pod 可能會(huì)被搶占(preempted) ,以便為高優(yōu)先級(jí)的Pod提供資源。
1.3.2 負(fù)載均衡
負(fù)載均衡主要通過(guò)以下組件實(shí)現(xiàn):
1) Service。在Kubernetes中,Service是一種抽象,用于定義Pod的邏輯集合和訪問(wèn)策略。當(dāng)Pod需要對(duì)外提供服務(wù)時(shí),可以通過(guò)Service進(jìn)行暴露。
2) Service Load Balancer。Kubernetes支持多種類型的Service,其中LoadBalancer類型的Service會(huì)在云提供商的負(fù)載均衡器上創(chuàng)建一個(gè)外部負(fù)載均衡器。外部負(fù)載均衡器負(fù)責(zé)將外部流量分發(fā)到后端的Pod 上,實(shí)現(xiàn)負(fù)載均衡。
3) Ingress。Ingress資源用于定義集群外部的訪問(wèn)策略,包括負(fù)載均衡和SSL終止等。Ingress Control?ler是Ingress資源的實(shí)現(xiàn),負(fù)責(zé)將外部流量路由到集群內(nèi)部的服務(wù)。
4) 內(nèi)部負(fù)載均衡。對(duì)于集群內(nèi)部的Pod之間的通信,Kubernetes提供了多種內(nèi)部負(fù)載均衡機(jī)制,如kube-proxy。kube-proxy可以根據(jù)Service的定義,將流量路由到后端的Pod上,實(shí)現(xiàn)內(nèi)部負(fù)載均衡。
本文的負(fù)載均衡功能主要通過(guò)在多個(gè)Master節(jié)點(diǎn)之外使用負(fù)載均衡器來(lái)實(shí)現(xiàn)。
2 系統(tǒng)設(shè)計(jì)
本文中,設(shè)計(jì)的基于容器虛擬化技術(shù)的領(lǐng)域概念知識(shí)點(diǎn)自動(dòng)問(wèn)答系統(tǒng)不僅能夠準(zhǔn)確回答學(xué)生提出的問(wèn)題,幫助學(xué)生加深對(duì)概念及專業(yè)術(shù)語(yǔ)的理解,還能幫助教師節(jié)省答疑時(shí)間。同時(shí),該系統(tǒng)結(jié)合了Docker 容器與K8S集群的優(yōu)點(diǎn),利用Docker+K8S相結(jié)合的容器虛擬化技術(shù)實(shí)現(xiàn)負(fù)載均衡,根據(jù)實(shí)時(shí)訪問(wèn)用戶數(shù)量對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)伸縮擴(kuò)容,從而滿足不同數(shù)量用戶的訪問(wèn)需求。
2.1 系統(tǒng)實(shí)現(xiàn)流程
系統(tǒng)主要從中文維基百科中選取信息安全領(lǐng)域的概念。選取好概念后,采用JWPL從維基百科提取概念解釋文本,對(duì)提取好的概念解釋文本進(jìn)行繁簡(jiǎn)轉(zhuǎn)換、去停用詞等操作,并以字典的形式存儲(chǔ)到數(shù)據(jù)庫(kù)中。系統(tǒng)主要通過(guò)TCP協(xié)議進(jìn)行通信,并根據(jù)用戶查詢要求,從數(shù)據(jù)庫(kù)中提取概念解釋文本供用戶使用。本地用戶系統(tǒng)實(shí)現(xiàn)后,將其部署到K8S集群上,并在訪問(wèn)量大的時(shí)候通過(guò)資源調(diào)度算法實(shí)現(xiàn)系統(tǒng)的負(fù)載均衡,從而滿足不同數(shù)量用戶的訪問(wèn)需求。系統(tǒng)實(shí)現(xiàn)流程如圖3所示。
2.2 負(fù)載均衡實(shí)現(xiàn)原理
本文的負(fù)載均衡功能主要通過(guò)在多個(gè)Master節(jié)點(diǎn)之外使用負(fù)載均衡器實(shí)現(xiàn),相當(dāng)于在多個(gè)Master節(jié)點(diǎn)之上設(shè)置了一層入口分流。外部請(qǐng)求首先通過(guò)負(fù)載均衡器,然后由其選擇具體的Master 節(jié)點(diǎn)進(jìn)行處理,實(shí)現(xiàn)基于靜態(tài)Pod特性。同時(shí),可以將后續(xù)的兩個(gè)其他核心服務(wù)打包在一個(gè)靜態(tài)Pod中,這種方式穩(wěn)定性好且易于上手,更適合公有云環(huán)境。
此方案對(duì)公有云的良好支持也有利于項(xiàng)目快速?gòu)膬?nèi)網(wǎng)遷移到外網(wǎng)。此外,K8S控制器和K8S調(diào)度器本身是主節(jié)點(diǎn)的一部分,其高可用性較易部署,只需確保同一時(shí)間僅有一個(gè)組件對(duì)集群進(jìn)行操作即可,可以采用Leader選舉機(jī)制來(lái)實(shí)現(xiàn)。負(fù)載均衡的具體執(zhí)行流程如圖4所示。
3 實(shí)驗(yàn)
3.1 實(shí)驗(yàn)環(huán)境
本文所部署的集群節(jié)點(diǎn)采用一個(gè)Master和兩個(gè)Node節(jié)點(diǎn),配置情況如表1所示:
集群所部署的系統(tǒng)軟件版本如表2所示:
3.2 K8S 集群搭建流程
K8S 集群搭建流程總共包括6 個(gè)步驟,如圖5 所示:
1) 配置基礎(chǔ)環(huán)境。每個(gè)節(jié)點(diǎn)按照要求配置免密SSH;關(guān)閉所有節(jié)點(diǎn)的SELinux和防火墻,進(jìn)行時(shí)間同步;所有節(jié)點(diǎn)添加主機(jī)名解析;所有節(jié)點(diǎn)添加Docker 軟件倉(cāng)庫(kù);所有節(jié)點(diǎn)添加K8S軟件倉(cāng)庫(kù);禁用所有節(jié)點(diǎn)的swap;調(diào)整所有節(jié)點(diǎn)的系統(tǒng)資源限制;所有節(jié)點(diǎn)升級(jí)系統(tǒng)并重啟。
2) 每個(gè)節(jié)點(diǎn)安裝Docker容器。安裝Docker容器,但需安裝指定版本,以確保后續(xù)安裝K8S 時(shí)不出問(wèn)題。
3) 安裝Kubelet、Kubeadm、Kubectl。第1步:配置K8S的下載地址信息;第2步:進(jìn)行安裝;第3步:?jiǎn)?dòng)kubelet。
4) 使用Kubeadm引導(dǎo)集群。第1步:配置Master 服務(wù)器節(jié)點(diǎn);第2步:配置Node1、Node2服務(wù)器節(jié)點(diǎn);第3 步:初始化主節(jié)點(diǎn);第4 步:讓W(xué)orker 節(jié)點(diǎn)加入集群。
5) 安裝可視化界面Dashboard。
6) 登錄驗(yàn)證。第1 步:訪問(wèn)Web 界面:http://192.168.102.151:8001;第2步:驗(yàn)證Token,結(jié)果如圖6 所示;第3步:登錄界面。
3.3 單機(jī)自動(dòng)問(wèn)答系統(tǒng)部署
該部分已在文獻(xiàn)[6]中實(shí)現(xiàn)。
3.4 實(shí)驗(yàn)結(jié)果及分析
將已經(jīng)實(shí)現(xiàn)的本地問(wèn)答系統(tǒng)部署到K8S上。經(jīng)測(cè)試,系統(tǒng)在K8S上能夠同時(shí)滿足多個(gè)用戶的訪問(wèn)需求,部分測(cè)試訪問(wèn)結(jié)果如圖7所示。該問(wèn)答系統(tǒng)能夠根據(jù)用戶提問(wèn),快速且準(zhǔn)確地提供概念的解釋文本信息。
4 總結(jié)
本文設(shè)計(jì)的基于容器虛擬化技術(shù)的領(lǐng)域概念知識(shí)點(diǎn)自動(dòng)問(wèn)答系統(tǒng),不僅能夠準(zhǔn)確回答學(xué)生提出的問(wèn)題,幫助學(xué)生加深對(duì)概念及專業(yè)術(shù)語(yǔ)的理解,還能幫助教師節(jié)省答疑時(shí)間。同時(shí),該系統(tǒng)結(jié)合了Docker容器與K8S集群的優(yōu)點(diǎn),通過(guò)Docker與K8S相結(jié)合的容器虛擬化技術(shù)實(shí)現(xiàn)負(fù)載均衡。系統(tǒng)可以根據(jù)實(shí)時(shí)訪問(wèn)的用戶數(shù)量進(jìn)行動(dòng)態(tài)伸縮擴(kuò)容,從而滿足不同數(shù)量用戶的訪問(wèn)需求。
參考文獻(xiàn):
[1] 詹晨迪.基于知識(shí)庫(kù)的自然語(yǔ)言問(wèn)答方法研究[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2017.
[2] DERICI C,?ELIK K,KUTBAY E,et al.Question analysis for a closed domain question answering system[M].Lecture Notes in Computer Science. Cham: Springer International Publishing,2015:468-482.
[3] KARPAGAM K,SARADHA A.A mobile based intelligent ques?tion answering system for education domain[J]. International Journal of Information Engineering and Electronic Business,2018,10(1):16-23.
[4] 史夢(mèng)飛.基于中文知識(shí)庫(kù)的問(wèn)答系統(tǒng)研究與實(shí)現(xiàn)[D].上海:華東師范大學(xué),2018.
[5] 張楚婷.基于知識(shí)圖譜的旅游問(wèn)答系統(tǒng)研究與實(shí)現(xiàn)[D].桂林:桂林電子科技大學(xué),2019.
[6] 張巧燕,裴棟,薛慧君.基于維基百科的領(lǐng)域概念知識(shí)點(diǎn)自動(dòng)問(wèn)答系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2021(4):46-48.
[7] 范鈺程.基于知識(shí)圖譜的高考自動(dòng)問(wèn)答系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].太原:太原理工大學(xué),2021.
[8] 涂凌.面向蠶桑領(lǐng)域自動(dòng)問(wèn)答系統(tǒng)的研究與實(shí)現(xiàn)[D].合肥:安徽農(nóng)業(yè)大學(xué),2023.
【通聯(lián)編輯:唐一東】