如何 之間 本質 建設 相對 數據 持久性 準則 comm

什麽是微服務架構?
微服務(MicroServices)架構是當前互聯網業界的一個技術熱點,業內各公司也都紛紛開展微服務化體系建設。微服務架構的本質,是用一些功能比較明確、業務比較精練的服務去解決更大、更實際的問題。該架構強調的一些準則:單一職責、協議輕量、進程隔離、數據分離、獨立部署、按需伸縮。
技術分享圖片
什麽是Kubernetes?
Kubernetes是Google開源的容器集群管理系統,其提供應用部署、維護、 擴展機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的應用,其主要功能:1) 自動化容器的部署和復制,隨時擴展或收縮容器規模。2) 以集群的方式運行、管理跨機器的容器。3) 將容器組織成組,並且提供容器間的負載均衡。4) 解決Docker跨機器容器之間的通訊問題。5) Kubernetes的自我修復機制使得容器集群保持健康狀態。
微服務架構(MSA)跟SOA架構有何不同?
微服務架構是伴隨敏捷叠×××發而興起的,更加強調快速敏捷部署和伸縮,適用於功能拆分比較細的場景,粒度也更小、更獨立。協議上基於更加輕量化的REST API,供內部各子系統及微服務之間調用。適合業務相對獨立、簡單的互聯網場景。強調服務的獨立部署和易伸縮能力。下圖是詳細的對比:
技術分享圖片
怎麽理解服務註冊和服務發現?
微服務架構下,有大量的微服務需要處理。由於微服務的快速和敏捷研發,他們的位置可能會動態變化。因此在運行時需要能夠發現服務所在的位置,服務發現可以解決這個問題。
服務註冊:註冊中心有微服務的實例和位置信息,微服務在啟動時向註冊中心註冊自己的信息,關閉時註銷。其它使用者能夠通過註冊中心找到可用的微服務和相關信息。
服務發現:為了能找到可用的服務和他們的位置信息,需要服務發現機制。有兩種發現機制,客戶端發現和服務端發現。WEB應用中,比較常用的是服務端發現的方式:客戶端/API網關把請求發送到已知位置信息的組件(比如負載均衡器)。組件去訪問註冊中心,找到微服務的路徑信息,並跳轉到相應的微服務。
技術分享圖片
雲運維平臺如何基於Kubernetes實施微服務?
基於平臺的微服務部署變得不同於傳統模式:能夠獨立於其他微服務發布或者取消發布; 微服務可以水平擴展(某一個服務比其他的請求量大);能夠實現快速的構建和發布;各微服務之間的功能不相互影響。使用基於Kubernetes的方式部署微服務,用戶需要的只是定義服務的狀態,而不是部署過程。
先來看一下Kubenetes整體框架,如下圖所示:主要包括kubecfg、Master API Server、Kubelet、Minion以及Proxy。
Master定義了Kubernetes 集群Master/API Server的主要聲明,包括Pod Registry、Controller Registry、Service Registry、Endpoint Registry、Minion Registry、Binding Registry、REST Storage以及Client, 是client(Kubecfg)調用Kubernetes API,管理Kubernetes主要構件Pods、Services、Minions、容器的入口。 Minion負責跟蹤Kubernetes 集群中有多少臺主機。Pod負責跟蹤集群中有多少Pod在運行,及跟Minion的映射關系。
下面我們一起看下,基於Kubernetes是如何進行服務註冊發現的,其詳細的架構如下圖所示:
技術分享圖片
Kubelet是Kubernetes集群中每個Minion和Master API Server的連接點,Kubelet運行在每個Minion上,是Master API Server和Minion之間的橋梁,接收Master API Server分配給它的commands和work,與持久性鍵值存儲etcd、file、server和http進行交互,讀取配置信息。Kubelet的主要工作是管理Pod和容器的生命周期,其包括Docker Client、Root Directory、Pod Workers、Etcd Client、Cadvisor Client以及Health Checker組件。
部署完畢後的Kubernetes集群,其各組件和微服務架構所提出的一些準則的對應關系,如下圖所示:
技術分享圖片
應用以Docker容器的形態,通過Namespace隔離的運行在定義好的Pod當中,各微服務之間的調用變得如此簡單,再也不用為微服務的實施和治理煩惱了。

iUAP雲運維平臺v3.0全面支持基於K8s的微服務架構