








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