什麼是微服務架構?
微服務(MicroServices)架構是當前網際網路業界的一個技術熱點,業內各公司也都紛紛開展微服務化體系建設。微服務架構的本質,是用一些功能比較明確、業務比較精練的服務去解決更大、更實際的問題。該架構強調的一些準則:單一職責、協議輕量、程序隔離、資料分離、獨立部署、按需伸縮。
iUAP雲運維平臺v3.0全面支援基於K8s的微服務架構
什麼是Kubernetes?
Kubernetes是Google開源的容器叢集管理系統,其提供應用部署、維護、 擴充套件機制等功能,利用Kubernetes能方便地管理跨機器執行容器化的應用,其主要功能:1) 自動化容器的部署和複製,隨時擴充套件或收縮容器規模。2) 以叢集的方式執行、管理跨機器的容器。3) 將容器組織成組,並且提供容器間的負載均衡。4) 解決Docker跨機器容器之間的通訊問題。5) Kubernetes的自我修復機制使得容器叢集保持健康狀態。
微服務架構(MSA)跟SOA架構有何不同?
微服務架構是伴隨敏捷迭×××發而興起的,更加強調快速敏捷部署和伸縮,適用於功能拆分比較細的場景,粒度也更小、更獨立。協議上基於更加輕量化的REST API,供內部各子系統及微服務之間呼叫。適合業務相對獨立、簡單的網際網路場景。強調服務的獨立部署和易伸縮能力。下圖是詳細的對比:
iUAP雲運維平臺v3.0全面支援基於K8s的微服務架構
怎麼理解服務註冊和服務發現?
微服務架構下,有大量的微服務需要處理。由於微服務的快速和敏捷研發,他們的位置可能會動態變化。因此在執行時需要能夠發現服務所在的位置,服務發現可以解決這個問題。
服務註冊:註冊中心有微服務的例項和位置資訊,微服務在啟動時向註冊中心註冊自己的資訊,關閉時登出。其它使用者能夠通過註冊中心找到可用的微服務和相關資訊。
服務發現:為了能找到可用的服務和他們的位置資訊,需要服務發現機制。有兩種發現機制,客戶端發現和服務端發現。WEB應用中,比較常用的是服務端發現的方式:客戶端/API閘道器把請求傳送到已知位置資訊的元件(比如負載均衡器)。元件去訪問註冊中心,找到微服務的路徑資訊,並跳轉到相應的微服務。
iUAP雲運維平臺v3.0全面支援基於K8s的微服務架構
雲運維平臺如何基於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是如何進行服務註冊發現的,其詳細的架構如下圖所示:
iUAP雲運維平臺v3.0全面支援基於K8s的微服務架構
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叢集,其各元件和微服務架構所提出的一些準則的對應關係,如下圖所示:
iUAP雲運維平臺v3.0全面支援基於K8s的微服務架構
應用以Docker容器的形態,通過Namespace隔離的執行在定義好的Pod當中,各微服務之間的呼叫變得如此簡單,再也不用為微服務的實施和治理煩惱了。