鄒理賢
(云宏信息科技股份有限公司 廣東省廣州市 510650)
過去幾十年來,IT 機構的發(fā)展經歷了單機架構、分布式架構和云計算架構的過程[1]。當前,國內外基于服務器虛擬化的云計算平臺發(fā)展已經較為成熟,很多企業(yè)應用已經遷移到了云端。這些應用大部分基于傳統(tǒng)的設計方法,并沒有充分利用和發(fā)揮云的特點。近年來,云原生[2]的理念應運而生,主要特點是為云而生,充分利用云的彈性及分布式優(yōu)勢。云原生涵蓋了容器、微服務、服務網格等技術[3]。隨著 Docker 的出現(xiàn)與流行,基于容器的云計算平臺逐漸火熱,而現(xiàn)階段 Docker 使用大多集中于操作系統(tǒng)虛擬化,基于 Docker 容器環(huán)境的云存儲在線應用系統(tǒng)較少,雖然 Docker Hub 中提供了多種數(shù)據庫的開源 Docker 鏡像,但是目前鮮有企業(yè)級應用。
本文針對上述問題,主要研究如下幾個內容:
(1)研究容器技術,形成搭建支撐云存儲在線應用的基礎架構平臺;
(2)研究與實現(xiàn)云存儲在線應用系統(tǒng)及其相關聯(lián)服務微服務化,實現(xiàn)平臺應用服務組件的模塊化,使管理者可通過 UI 界面控制容器引擎,完成應用服務的自動化部署和運維;
(3)在此基礎上進行分布式云存儲在線應用系統(tǒng)的服務內容設計。
容器運行于多個計算節(jié)點上,共同組成一個應用的微服務架構。容器編排技術為容器化的應用提供資源調度、部署運行以及服務的發(fā)現(xiàn)、擴容、縮容等一整套功能。
容器編排為高可用容器集群管理軟件架構。集群中的機器被劃分為一個(或多個)管理節(jié)點和一群計算節(jié)點(Node),其中管理節(jié)點上運行著集群管理相關的一組進程API 服務、多種控制管理器、調度器和分布式數(shù)據庫四個組件,其中前三個組件構成了集群的總控中心,負責對集群中所有資源進行管控和調度。在每個計算節(jié)點上運行工作者、服務訪問代理和容器代理三個組件,負責對本節(jié)點的容器的生命周期進行管理,以及實現(xiàn)服務代理的功能。另外,在所有節(jié)點皆可運行編排的命令行工具,提供集群管理工具集。
每個編排計算節(jié)點上運行一個編排的工作者,其監(jiān)聽管理節(jié)點的api 資源,通過監(jiān)聽到本節(jié)點的任務來編排本節(jié)點上的容器。當一個容器部署到本節(jié)點上時,節(jié)點訪問代理就設置對應的訪問規(guī)則來設定集群的訪問能力,如網絡端口,路由策略等。每個節(jié)點上都有個虛擬網絡節(jié)點,其互相通信,通過加密虛擬網絡包的方式實現(xiàn)集群內節(jié)點的安全通訊。
1.1.1 資源調度
集群中的調度器,負責容器在集群節(jié)點中的調度分配。接收控制管理器創(chuàng)建的新容器,為其安排一個目標計算節(jié)點,目標節(jié)點上的工作者服務進程接管后續(xù)工作負責容器整個生命周期。
編排器的作用是將帶調度的容器按照特定的調度算法和調度策略綁定到集群中的某個計算節(jié)點上,并將綁定信息寫入數(shù)據庫中。在整個調度過程中涉及三個對象,分別是:待調度容器列表、可用計算節(jié)點列表,以及調度算法和策略。
調度器默認的調度流程分為以下兩步。
(1)預選調度過程,即遍歷所有目標計算節(jié)點,篩選出符合要求的候選節(jié)點。編排器內置了多種預選策略。
(2)確定最優(yōu)節(jié)點,采用優(yōu)先策略計算出每個候選節(jié)點的積分,積分高者勝出。
調度策略支持支持基于容器名稱和服務名稱的容器調度設置,可以指定容器運行的主機,支持主機親和性/反親和性調度,支持容器親和性/反親和性調度。
1.1.2 服務發(fā)現(xiàn)
編排集群內部包含服務發(fā)現(xiàn)控制器,負責服務的創(chuàng)建、注冊、監(jiān)控、發(fā)現(xiàn)以及容器與服務之間的通訊。服務是一個定義容器集合的抽象,或則被訪問者看作一個訪問策略,有時也被稱作微服務。服務是一種資源對象與容器相似??梢酝^API 服務的POST 接口創(chuàng)建一個新的實例。
集群服務實現(xiàn)上主要通過集群內部的域名解析DNS 來實現(xiàn),DNS 服務器通過API 服務監(jiān)控與服務相關活動。當監(jiān)控到服務創(chuàng)建時,DNS 服務器為每個Service 創(chuàng)建以一系列DNS 記錄,通過DNS 來查找服務,NDS 返回的結果是集群IP(虛擬IP、集群IP)。
集群內的容器就可以通過對應的服務來解析出對應的IP,最終來實現(xiàn)集群內的容器服務發(fā)現(xiàn)通訊。
1.1.3 彈性伸縮
集群內部包含副本控制器,其核心作用是確保在任何時候集群中一個副本資源所關聯(lián)的容器都保持一定數(shù)量的容器副本處于正常運行狀態(tài)。如果該類容器副本數(shù)量太多,則副本控制器會銷毀一些容器副本,反之副本控制器會添加容器副本,直到該類容器的副本數(shù)量達到預設的副本數(shù)量,實現(xiàn)自動創(chuàng)建、補足、替換、刪除容器副本。
副本控制器常用的實用模式:
(1)重新調度。不管你想運行1 個副本還是1000 個副本,副本控制器都能確保指定數(shù)量的副本存在于集群中,即使發(fā)生節(jié)點故障或容器副本被終止運行等意外狀況。
(2)彈性伸縮。手動或者通過自動擴容代理修改副本控制器的副本期望屬性值,可實現(xiàn)擴大或縮小的副本數(shù)量。
圖1:基于容器環(huán)境的基礎架構設計
(3)滾動更新。副本控制器被設計成通過逐個替換容器的方式來輔助服務的滾動更新。推薦的方式是創(chuàng)建一個新的只有一個副本的資源,若新的資源副本數(shù)量加1,則舊的副本數(shù)量減1,直到這個舊的副本數(shù)量為零,然后刪除該舊的容器。
1.1.4 編排服務
編排是集群內部的管理控制中心內,負責集群內的計算節(jié)點、容器副本、服務端點、命名空間、服務賬號、資源定額等的管理并執(zhí)行自動化修復流程,確保集群處于預期的工作狀態(tài)。
其通過一個統(tǒng)一的編排服務接口,提供各個編排資源的提交及注冊,其分為用戶期望及編排狀態(tài)兩部分。當用戶保存對應的信息后,編排控制器把對應的任務下發(fā)到各個對應的控制管理器上,讓其編排調度。
1.1.5 健康檢查
監(jiān)控檢測為資源的正常服務狀態(tài)的檢查,其分為準備態(tài)和健康態(tài)。準備態(tài)為容器服務從無到有準備完成可以提供正常服務了。健康態(tài)為容器服務運行很長時間后,編排引擎通過它來檢測對應服務是否正常運行。
用戶可以設置不用的規(guī)則,讓監(jiān)控檢查來檢測對應的服務,如端口是否打開,api 請求是否正常等。
1.1.6 生命周期管理
編排對容器的生命周期管理主要指其通過資源在集群內的狀態(tài)其實現(xiàn)其副本數(shù),對應節(jié)點存活遷移等。其主要通過各個節(jié)點的編排工作者來實現(xiàn)對應的生命周期管理。
編排工作者通過觀察控制器對應的api 接口,然后通過容器調度標準接口來控制本節(jié)點的容器。其直接調用容器運行管理器器內建編排插件,通過方法調用來進行交互,從而減少遠程的開銷。
1.1.7 負載均衡管理
通過設置容器的入口點規(guī)則,生成對應負載均衡器的負載均衡規(guī)則。然后把動態(tài)生成的規(guī)則下發(fā)到各個節(jié)點的負載均衡器上。最終實現(xiàn)對集群內部服務的負載均衡的訪問,實現(xiàn)高可用。
1.1.8 容器多集群管理
容器的多集群管理指的是集群通過集群命名空間的方式實現(xiàn)集群內部的租戶環(huán)境劃分。每個命名空間內包含多個容器服務,并建立對應的容器服務。各個命名空間件的容器服務不可互相訪問,只能通過命名空間的服務來訪問。以此實現(xiàn)通過命名空間對環(huán)境的隔離。
以提升用戶的體驗和滿意度,提高云存儲系統(tǒng)質量為目標,建設基于容器環(huán)境的云存儲在線應用系統(tǒng),研究基于Docker 技術快速構建容器基礎設施,構建一套容器云平臺,解決容器的多種資源編排和調度統(tǒng)一管理問題,實現(xiàn)云存儲在線應用系統(tǒng)的輕量級自動化部署與管理功能。容器云環(huán)境的基礎架構如圖1 所示。
針對云存儲在線應系統(tǒng)的建設要求,實現(xiàn)如下幾個關鍵功能:
(1)大規(guī)?;A設施管理,實現(xiàn)容器與現(xiàn)有IaaS 平臺融合和統(tǒng)一管理,實現(xiàn)大規(guī)模集群資源的自動化接入和管理,支持云存儲在線應用系統(tǒng)的應用服務及合作伙伴系統(tǒng)的IT 資源需求,支持一鍵式的應用部署和應用管理功能。
(2)資源編排和調度:研究容器的Kubernetes、Mesos、Swarm、Cattle 等多種業(yè)界主流編排引擎支持問題,滿足云存儲在線應用生態(tài)圈建設的用戶對各種類型資源編排和調度需求。
(3)實現(xiàn)彈性擴容機制,以應用為顆粒度進行動態(tài)的負載管理,配合持續(xù)部署規(guī)則,實現(xiàn)復雜場景下的應用全自動彈性伸縮。
(4)支持云存儲在線應用的按照預先配置的策略,完成應用的自動化打包封裝和交付過程。
(5)持續(xù)部署技術,支持云存儲在線應用的按可通過全自動化的策略驅動,配合可定制的部署模板及調度策略,實現(xiàn)應用的一鍵部署及自動運維。
(6)無狀態(tài)容器的分布式存儲后端設計。
容器鏡像是一種自包含格式,即包含云應用及其所有依賴,運行容器時無需任何外部依賴,可以充分保證云應用的遷移性。如果容器應用需要持久保存數(shù)據,即有狀態(tài)容器,如何保證數(shù)據的遷移性就成為一個迫切需要解決的問題。解決問題的思路是分別處理容器和數(shù)據的生命周期,在容器引擎或容器云層面實現(xiàn)持久存儲。
圖2:基于容器環(huán)境的微服務基礎架構示意
圖3:云存儲在線應用的功能架構設計圖
第一種是基于單臺宿主機器的持久存儲解決方案,由該宿主機負責持久保存容器的數(shù)據。以Docker 容器引擎為例,運行容器時指定數(shù)據卷參數(shù),能把宿主機系統(tǒng)的文件系統(tǒng)映射到容器內部文件系統(tǒng)。即使容器宕機,數(shù)據也仍然持久保存在當前宿主機上。當然,容器不再具備遷移性,因為數(shù)據仍然保留在宿主機器上。
第二種是基于多臺宿主機器的持久存儲解決方案。從Docker容器引擎1.8 版開始,提供了卷插件功能,確立容器引擎與存儲后端的標準接口和交互方式。容器云Kubernetes 提供持久卷功能,支持有狀態(tài)容器集合的運行。Apache Mesos 也提供類似的持久卷和共享持久卷功能。由此可見,主流容器云實現(xiàn)都提供支持有狀態(tài)容器的前端接口,問題的關鍵變成如何選擇合適的持久存儲后端。
為了運行有狀態(tài)容器,需要存儲后端提供存儲資源池。本項目擬研究一種由容器云統(tǒng)一管理的分布式存儲系統(tǒng),不僅支持物理節(jié)點、虛擬機節(jié)點和容器節(jié)點存儲的匯集和釋放,還同時提供了對象存儲、塊存儲和文件存儲接口,滿足部署和運行有狀態(tài)云原生應用的需求。實現(xiàn)原理是首先實現(xiàn)swift 存儲系統(tǒng)的自動部署和運維,然后實現(xiàn)與容器持久存儲接口兼容的對象存儲、塊存儲和文件存儲。
基于Docker 容器環(huán)境,研究云存儲在線應用系統(tǒng)架構的微服務化,解決項目的微服務應用,支撐PaaS 應用的快速開發(fā)應用,以及支持項目服務應用的創(chuàng)新發(fā)展。究基于容器環(huán)境的服務基礎架構如圖2 所示。
如圖2 所示:
(1)服務注冊中心微服務改造,解決項目的服務定位問題,以實現(xiàn)云端中間層服務發(fā)現(xiàn)和故障轉移。通過服務發(fā)現(xiàn)與注冊,實現(xiàn)只需要使用服務的標識符,便能訪問到服務。
(2)構建統(tǒng)一配置中心,為各應用的所有環(huán)境提供了一個中心化的外部配置。通過構建統(tǒng)一配置中心,支持應用服務可以通過部署管道來進行測試或者投入生產;平臺可以分別為這些環(huán)境創(chuàng)建配置,并且在需要遷移環(huán)境的時候獲取對應環(huán)境的配置來運行。
(3)服務網關是微服務架構中一個不可或缺的部分。通過服務網關統(tǒng)一向外系統(tǒng)提供REST API 的過程中,除了具備服務路由、均衡負載功能之外,它還具備了權限控制等功能;通過將權限控制這些較重的非業(yè)務邏輯內容遷移到服務路由層面,使得服務集群主體能夠具備更高的可復用性和可測試性。
云存儲在線應用系統(tǒng)以分布式存儲技術來構建存儲層,并在云存儲架構的基礎上,研發(fā)文件管理、工作空間、信息交流等服務體系。
云存儲在線應用服務內容設計如圖3 所示。
(1)結合容器技術的特點研發(fā)項目云存儲在線應用與開發(fā)的應用中心,支持合作伙伴在平臺的應用開發(fā)和快速部署;通過多應用服務接入,共同營造云存儲在線應用的服務生態(tài)圈。支持包括iPhone、Android、PC 和Web 等多平臺訪問,用戶可以隨時隨地享受本項目帶來的移動互聯(lián)信息服務,輕松實現(xiàn)移動辦公。
(2)基于容器環(huán)境的云存儲在線應用系統(tǒng)核心模塊設計,該系統(tǒng)采用分層概念設計,將應用和核心模塊分離,逐步打造云存儲的PaaS 平臺和針對各行業(yè)的垂直SaaS 服務。核心模塊研究的關鍵技術如下:系統(tǒng)采用模塊化設計,同時將接口以HTTP REST API 的方式開放,支持多種方式接入;對用戶數(shù)據和文件采用分布式存儲,保證用戶資料的安全,確保每個數(shù)據都有多個備份;提供日志管理功能,包括日志記錄,及報表分析和用戶行為數(shù)據挖掘;研究對象緩存技術,幫助用戶將常用的數(shù)據和對象裝載到內存數(shù)據庫中,保證數(shù)據的快速訪問;研究數(shù)據安全技術,通過訪問控制、備份策略、加密技術、認證等方式保證用戶數(shù)據的傳輸安全和存儲安全。
本系統(tǒng)基于云原生技術,研究云存儲在線應用系統(tǒng),解決了容器后端持久化存儲及開放API 的問題,滿足大規(guī)模云存儲在線應用,實現(xiàn)信息存儲、分發(fā)、共享等功能。