隨著資訊科技的進步,網際網路的應用日新月異。計算機新技術的發展也是突飛猛進。當前,雲端計算、AI、機器學習、自然語言處理、物聯網等成為熱點話題。隨之而興起的技術也是百家爭鳴,諸如Kubernetes、容器、微服務、DevOps、OpenStack、深度學習等。
  本篇主要介紹基於Kubernetes、容器(Docker)、微服務技術等在機器學習中的實踐應用構想和概念,後續將詳細介紹相關知識和實踐過程。

系統構想

  系統需要完成的功能點如下圖所示:

系統功能點構思

主要完成功能:

  • 支援映象化釋出,支援雲化部署;
  • 微服務化設計,支援服務擴縮容;
  • 支援負載均衡、系統資源監控、資源編排;
  • 支援多種機器學習演算法,中文分詞、特徵選擇、文字分類;
  • 支援Web圖形化UI效能評估與結果展示;
  • ……

微服務化

  微服務最早由Martin Fowler與James Lewis於2014年共同提出,微服務架構風格是一種使用一套小服務來開發單個應用的方式途徑,每個服務執行在自己的程序中,並使用輕量級機制通訊,通常是HTTP API,這些服務基於業務能力構建,並能夠通過自動化部署機制來獨立部署,這些服務使用不同的程式語言實現,以及不同資料儲存技術,並保持最低限度的集中式管理。
  在傳統的IT行業軟體大多都是各種獨立系統的堆砌,這些系統的問題總結來說就是擴充套件性差,可靠性不高,維護成本高。到後面引入了SOA(面向服務的架構)服務化,但是,由於 SOA 早期均使用了匯流排模式,這種匯流排模式是與某種技術棧強繫結的,比如:J2EE。這導致很多企業的遺留系統很難對接,切換時間太長,成本太高,新系統穩定性的收斂也需要一些時間。最終 SOA 看起來很美,但卻成為了企業級奢侈品,中小公司都望而生畏。
  用一張經典的圖來表現微服務,

單體架構的叢集(左)與微服務叢集(右)

微服務設計原則

  • 單一職責原則
  • 服務自治原則
  • 輕量級通訊原則
  • 介面明確原則

Docker容器

  Docker是一個開源的引擎,可以輕鬆的為任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機器)、bare metal、OpenStack 叢集和其他的基礎應用平臺。
Docker通常用於如下場景

  • web應用的自動化打包和釋出;
  • 自動化測試和持續整合、釋出;
  • 在服務型環境中部署和調整資料庫或其他的後臺應用;
  • 在服務型環境中部署和調整資料庫或其他的後臺應用;
  • 從頭編譯或者擴充套件現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

  Docker 架構

Docker 基本架構示意圖

  Docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠端API來管理和建立Docker容器。Docker 容器通過 Docker 映象來建立。容器與映象的關係類似於面向物件程式設計中的物件與類。

Kubernetes

  Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,排程和節點叢集間擴充套件。如果你曾經用過Docker容器技術部署容器,那麼可以將Docker看成Kubernetes內部使用的低級別元件。Kubernetes不僅僅支援Docker,還支援Rocket,這是另一種容器技術。
使用Kubernetes可以:

  • 自動化容器的部署和複製;
  • 隨時擴充套件或收縮容器規模;
  • 將容器組織成組,並且提供容器間的負載均衡;
  • 很容易地升級應用程式容器的新版本;
  • 提供容器彈性,如果容器失效就替換它,等等…

Kubernetes一些核心概念如下圖所示:

Kubernetes 叢集示意圖

上圖可以看到如下元件:

  • Pod
  • Container(容器)
  • Label(標籤)
  • Replication Controller(複製控制器)
  • Service(服務)
  • Node(節點)
  • Kubernetes Master(Kubernetes主節點)

參考:
[1].http://www.elecfans.com/d/631815.html
[2].https://www.sohu.com/a/221400925_100039689
[3].http://www.dockone.io/article/932
[4].http://www.docker.org.cn/book/docker/what-is-docker-16.html