基於Kubernetes的機器學習微服務系統設計系列——(二)架構與部署
內容提要
本篇主要介紹基於Kubernetes、容器(Docker)、微服務技術等在機器學習中的實踐應用的架構與部署。
1 系統介紹
1.1 核心功能
主要完成功能:
- 支援Docker映象化釋出,支援Kuberneetes雲化部署;
- 微服務化設計支援服務自治,支援服務擴縮容;
- 支援負載均衡、系統資源監控、資源編排;
- 統一設計輕量級通訊RESTful API 介面框架,支援JSON格式請求;
- 支援多種機器學習演算法,支援JSON格式引數配置;
- 支援中文分詞:RobinSeg(RS)、IKAnalyzer(IK)、JEAnalysis(JE)、MmSeg4j(MS)、PaoDing(PD)、SmallSeg4j(SS)等;
- 支援特徵選擇演算法:Document Frequency(DF)、Information Gain(IG)、(χ2)Chi-Square Test(CHI)、Mutual Information(MI)、Matrix Projection(MP)等;
- 支援分類演算法:k-Nearest Neighbor(kNN)、Naïve Bayes(NB)、Support Vector Machine(SVM)、Normalized Vector(NLV)等;
- 支援Web圖形化UI機器學習效能評估、資料視覺化;
2 系統架構
2.1 雲化架構圖
雲化微服務機器學習系統架構架構如圖所示:
2.2 架構說明
整個系統採用雲端計算的架構設計。系統支援部署在傳統的虛擬化技術(如KVM)或雲端計算IaaS層服務上(如Openstack等)。PaaS層採用Kubernetes+Docker的應用方式。
整個系統的重點是SaaS層的設計開發,即微服務化的機器學習系統。圖 2 所示紅框藍底部分為系統的核心部分。
系統主要功能模組包括:公共庫Comm-lib、微服務核(中文分詞、預處理、特徵選擇、分類器)、RESTful微服務框架(微服務核載入 、HTTP API)、應用服務+WEB、管理維護等。
公共庫Comm-lib
RESTful微服務框架:主要統一微服務介面,解耦與業務的關係,統一RESTful API。
微服務核:按照微服務介面定義,關注自身的業務實現。實現中文分詞、預處理、特徵選擇、分類器的獨立功能。
管理維護:主要包括Docker映象化製作、釋出,Kubernetes、Docker、微服務資源監控,資源的編排功能。
應用WEB:如果把微服務看出深服務端,那麼這裡包含淺服務端應用和WEB客戶端。服務端處理WEB分類任務的請求、排程和生命週期管理。WEB端顯示任務執行的狀態和機器學習的結果UI顯示,還包括資源的監控顯示。
3 雲化部署
3.1 部署圖
雲化微服務機器學習系統架構架構如圖所示:
3.2 部署說明
系統部署服務元件主要包括:ETCD、Docker 、Kubernetes Master、Kubernetes Node、Docker Private Registry、Glassfish Server、Flannel。
ETCD:一個開源的、分散式的鍵值對資料儲存系統,提供共享配置、服務的註冊和發現。ETCD為Kubernetes提供預設的儲存系統,儲存所有叢集資料,使用時需要為etcd資料提供備份計劃。ETCD為Flannel 儲存網路配置、分配的子網以及任何輔助資料(如主機的公網 IP)。
Docker: 應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。
Kubernetes Master:叢集的管理控制中心。
Kubernetes Node:提供Kubernetes執行時環境,以及維護Pod。
Docker Private Registry:Docker 映象私倉,存放開發的微服務映象。
Glassfish Server:Web 應用伺服器,提供web應用的部署。也可以採用映象化的方式部署。
Flannel:常用的網路配置工具,用於配置第三層(網路層)網路結構。
3.3 部署例項
如上圖2所示,在一臺伺服器上部署例項。
伺服器配置如下:
處理器:2顆Intel Xeon E5-2670 8核16執行緒
記憶體:32G = 8X4G PC3-106000R 1333
硬碟:240GB SSD + 4TB HDD
作業系統:Ubuntu 14.04.5 LTS
使用KVM啟動6臺虛擬機器。
虛擬機器配置:
處理器:4核
記憶體:4G
硬碟:80GB
作業系統:CentOS 7.5
虛擬機器網路採用linux系統網橋管理工具配置網橋進行連結。Kubernetes Master和ETCD部署在一臺虛擬機器上。4臺虛擬機器作為Kubernetes Node節點,其上部署Docker、Flannel服務。一臺作為Docker 私倉,部署Docker服務。
軟體版本:
ETCD版本:3.0.0
Docker版本:1.12.6
Kubernetes 版本:1.6.7
Flannel版本:0.9.1
Docker映象倉庫版本: 2.5