微服務項目架構(gòu)解讀
① 什么是微服務?
微服務是指開發(fā)一個單個小型的但有業(yè)務功能的服務,每個服務都有自己的處理和輕量通訊機制,可以部署在單個或多個服務器上。
微服務也指一種種松耦合的、有一定的有界上下文的面向服務架構(gòu)。也就是說,如果每個服務都要同時修改,那么它們就不是微服務,因為它們緊耦合在一起;如果你需要掌握一個服務太多的上下文場景使用條件,那么它就是一個有上下文邊界的服務,這個定義來自DDD領域驅(qū)動設計。
它的主要特點是組件化、松耦合、自治、去中心化,體現(xiàn)在以下幾個方面:
一組小的服務
服務粒度要小,而每個服務是針對一個單一職責的業(yè)務能力的封裝,專注做好一件事情。
獨立部署運行和擴展
每個服務能夠獨立被部署并運行在一個進程內(nèi)。這種運行和部署方式能夠賦予系統(tǒng)靈活的代碼組織方式和發(fā)布節(jié)奏,使得快速交付和應對變化成為可能。
獨立開發(fā)和演化
技術選型靈活,不受遺留系統(tǒng)技術約束。合適的業(yè)務問題選擇合適的技術可以獨立演化。服務與服務之間采取與語言無關的API進行集成。相對單體架構(gòu),微服務架構(gòu)是更面向業(yè)務創(chuàng)新的一種架構(gòu)模式。
獨立團隊和自治
團隊對服務的整個生命周期負責,工作在獨立的上下文中,自己決策自己治理,而不需要統(tǒng)一的指揮中心。團隊和團隊之間通過松散的社區(qū)部落進行銜接。
我們可以看到整個微服務的思想就如我們現(xiàn)在面對信息爆炸、知識爆炸是一樣的:通過解耦我們所做的事情,分而治之以減少不必要的損耗,使得整個復雜的系統(tǒng)和組織能夠快速的應對變化。
② 微服務的優(yōu)點
每個微服務都很小,這樣能聚焦一個指定的業(yè)務功能或業(yè)務需求。
微服務能夠被小團隊單獨開發(fā),這個小團隊是2到5人的開發(fā)人員組成。
微服務是松耦合的,是有功能意義的服務,無論是在開發(fā)階段或部署階段都是獨立的。
微服務能使用不同的語言開發(fā)。
微服務允許容易且靈活的方式集成自動部署,通過持續(xù)集成工具,如Jenkins, bamboo 。
一個團隊的新成員能夠更快投入生產(chǎn)。
微服務易于被一個開發(fā)人員理解,修改和維護,這樣小團隊能夠更關注自己的工作成果。無需通過合作才能體現(xiàn)價值。
微服務允許你利用融合最新技術。
微服務只是業(yè)務邏輯的代碼,不會和HTML,CSS 或其他界面組件混合。
微服務能夠即時被要求擴展。
微服務能部署中低端配置的服務器上。
易于和第三方集成。
每個微服務都有自己的存儲能力,可以有自己的數(shù)據(jù)庫。也可以有統(tǒng)一數(shù)據(jù)庫
k8s集群架構(gòu)解讀
① 什么是kubernetes
Kubernetes(k8s)是Google開源的容器集群管理系統(tǒng)(谷歌內(nèi)部:Borg)。在Docker技術的基礎上,為容器化的應用提供部署運行、資源調(diào)度、服務發(fā)現(xiàn)和動態(tài)伸縮等一系列完整功能,提高了大規(guī)模容器集群管理的便捷性。Kubernetes優(yōu)勢:
容器編排
輕量級
開源
彈性伸縮
負載均衡? ?
② Kubernetes架構(gòu)和組件
?主從分布式架構(gòu),Master/Node
-
服務分組,小集群,多集群
-
服務分組,大集群,單集群
Kubernetes Master / Node : 如果大家對諸如hadoop這樣的分布式集群有所了解,就會發(fā)現(xiàn)k8s的設計理念和其他分布式架構(gòu)的非常類似的:Master節(jié)點負責接收用戶的指令、分配任務以及記錄各個node的情況;而node節(jié)點負責接收Master的指令,啟動相應的Pod(k8s的最小執(zhí)行單元,是一個Container的集合)
安裝k8s時會指定Master和Node節(jié)點,部署好之后,我們通過k8s的api與Master節(jié)點進行交互。Master節(jié)點收到了我們的指令(比如新啟動一個Pod),會調(diào)度Node節(jié)點去完成它們。當然,其中底層的調(diào)度策略、具體的實現(xiàn)細節(jié)對于我們使用者來說都是隱蔽的,不需要我們?nèi)チ私狻?/p>
master工作流程圖
Kubecfg將特定的請求,比如創(chuàng)建Pod,發(fā)送給Kubernetes Client。
Kubernetes Client將請求發(fā)送給API server。
API Server根據(jù)請求的類型,比如創(chuàng)建Pod時storage類型是pods,然后依此選擇何種REST Storage API對請求作出處理。
REST Storage API對的請求作相應的處理。
將處理的結(jié)果存入高可用鍵值存儲系統(tǒng)Etcd中。
在API Server響應Kubecfg的請求后,Scheduler會根據(jù)Kubernetes Client獲取集群中運行Pod及Minion/Node信息。
依據(jù)從Kubernetes Client獲取的信息,Scheduler將未分發(fā)的Pod分發(fā)到可用的Minion/Node節(jié)點上。
Kubernetes Node運行節(jié)點,運行管理業(yè)務容器,包含如下組件:
1.Kubelet負責管控容器,Kubelet會從Kubernetes API Server接收Pod的創(chuàng)建請求,啟動和停止容器,監(jiān)控容器運行狀態(tài)并匯報給Kubernetes API Server。
2.Kubernetes Proxy負責為Pod創(chuàng)建代理服務,Kubernetes Proxy會從Kubernetes API Server獲取所有的Service信息,并根據(jù)Service的信息創(chuàng)建代理服務,實現(xiàn)Service到Pod的請求路由和轉(zhuǎn)發(fā),從而實現(xiàn)Kubernetes層級的虛擬轉(zhuǎn)發(fā)網(wǎng)絡。
3.DockerNode上需要運行容器服務。
Kubelet[節(jié)點上的Pod管家]
負責Node節(jié)點上pod的創(chuàng)建、修改、監(jiān)控、刪除等全生命周期的管理 定時上報本Node的狀態(tài)信息給API Server。
kubelet是Master API Server和Minion/Node之間的橋梁,接收Master API Server分配給它的commands和work,通過kube-apiserver間接與Etcd集群交互,讀取配置信息。
具體的工作如下:
設置容器的環(huán)境變量、給容器綁定Volume、給容器綁定Port、根據(jù)指定的Pod運行一個單一容器、給指定的Pod創(chuàng)建network 容器。
同步Pod的狀態(tài)、同步Pod的狀態(tài)、從cAdvisor獲取container info、 pod info、 root info、 machine info。
在容器中運行命令、殺死容器、刪除Pod的所有容器。
③ k8s常用命令
創(chuàng)建資源:
kubectl create -f yaml文件
查看資源:
kubectl get <resource_type>
# 比如獲取K8s集群下pod的信息
kubectl get pod
# 更加詳細的信息
kubectl get pod -o wide
#獲取pod更詳盡的狀態(tài)信息
kubectl describe pod pod名稱
#查看所有的nodes
kubectl get nodes
#查看所有的namespace
kubectl get pod --all-namespaces
替換資源:
kubectl?replace?-f?yaml文件
刪除資源:
kubectl?replace?-f?yaml文件
查看日志:
kubectl logs pod名稱
#如果想動態(tài)查看日志加-f
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰(zhàn)倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!文章來源:http://www.zghlxwxcb.cn/news/detail-752486.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-752486.html
到了這里,關于深入微服務架構(gòu) | 微服務與k8s架構(gòu)解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!