1. 程式人生 > >基於Kubernetes的機器學習微服務系統設計系列——(二)架構與部署

基於Kubernetes的機器學習微服務系統設計系列——(二)架構與部署

 內容提要

  本篇主要介紹基於Kubernetes、容器(Docker)、微服務技術等在機器學習中的實踐應用的架構與部署。

1 系統介紹

1.1 核心功能

  主要完成功能:

  1. 支援Docker映象化釋出,支援Kuberneetes雲化部署;
  2. 微服務化設計支援服務自治,支援服務擴縮容;
  3. 支援負載均衡、系統資源監控、資源編排;
  4. 統一設計輕量級通訊RESTful API 介面框架,支援JSON格式請求;
  5. 支援多種機器學習演算法,支援JSON格式引數配置;
  6. 支援中文分詞:RobinSeg(RS)、IKAnalyzer(IK)、JEAnalysis(JE)、MmSeg4j(MS)、PaoDing(PD)、SmallSeg4j(SS)等;
  7. 支援特徵選擇演算法:Document Frequency(DF)、Information Gain(IG)、(χ2)Chi-Square Test(CHI)、Mutual Information(MI)、Matrix Projection(MP)等;
  8. 支援分類演算法:k-Nearest Neighbor(kNN)、Naïve Bayes(NB)、Support Vector Machine(SVM)、Normalized Vector(NLV)等;
  9. 支援Web圖形化UI機器學習效能評估、資料視覺化;

2 系統架構

2.1 雲化架構圖

  雲化微服務機器學習系統架構架構如圖所示:

圖 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 部署圖

  雲化微服務機器學習系統架構架構如圖所示:

圖 2 雲化微服務機器學習系統部署圖

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