本發(fā)明提供了一種面向云原生的微服務(wù)自動(dòng)擴(kuò)縮容和自動(dòng)熔斷方法及系統(tǒng),設(shè)置云原生系統(tǒng)中集群內(nèi)部的網(wǎng)關(guān)規(guī)則,接管集群的入口流量;針對(duì)每一個(gè)微服務(wù),將所有的服務(wù)副本集合抽象成一個(gè)獨(dú)立的邏輯概念,其中每一個(gè)邏輯概念對(duì)應(yīng)一個(gè)子網(wǎng)關(guān)服務(wù);流量在進(jìn)入每一個(gè)邏輯概念前,均先通過子網(wǎng)關(guān)服務(wù)進(jìn)行L7層面的流量轉(zhuǎn)發(fā);子網(wǎng)關(guān)服務(wù)根據(jù)當(dāng)前集群的網(wǎng)絡(luò)狀態(tài)和流量狀態(tài),將當(dāng)前服務(wù)請(qǐng)求發(fā)送至對(duì)應(yīng)接口、丟棄后續(xù)服務(wù)請(qǐng)求和/或?qū)Ξ?dāng)前服務(wù)請(qǐng)求進(jìn)行擴(kuò)縮容處理,并結(jié)合對(duì)當(dāng)前服務(wù)請(qǐng)求的擴(kuò)縮容處理結(jié)果和所轉(zhuǎn)發(fā)的L7層面流量,實(shí)現(xiàn)L7層面的自動(dòng)熔斷。本發(fā)明實(shí)現(xiàn)微服務(wù)自動(dòng)擴(kuò)容/縮容以及基于L7層面的自動(dòng)熔斷,保證了服務(wù)的高可用。
技術(shù)領(lǐng)域
本發(fā)明涉及云計(jì)算及其云原生技術(shù)領(lǐng)域,具體地,涉及一種面向云原生的微服務(wù)自動(dòng)擴(kuò)縮容和自動(dòng)熔斷方法及系統(tǒng),在Kubernetes場景下基于網(wǎng)絡(luò)情況的微服務(wù),保證了服務(wù)的高可用。
背景技術(shù)
Kubernetes是一個(gè)可移植的、可擴(kuò)展的開源平臺(tái),用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動(dòng)化。Kubernetes擁有一個(gè)龐大且快速增長的生態(tài)系統(tǒng)。Kubernetes的服務(wù)、支持和工具廣泛可用。作為一種可自動(dòng)實(shí)施Linux容器操作的開源平臺(tái),它可以幫助用戶省去應(yīng)用容器化過程的許多手動(dòng)部署和擴(kuò)展操作。也就是說,用戶可以將運(yùn)行Linux容器的多組主機(jī)聚集在一起,由Kubernetes幫助用戶輕松高效地管理這些集群。而且,這些集群可跨公共云、私有云或混合云部署主機(jī)。因此,對(duì)于要求快速擴(kuò)展的云原生應(yīng)用而言(例如借助Apache Kafka進(jìn)行的實(shí)時(shí)數(shù)據(jù)流處理),Kubernetes是理想的托管平臺(tái)。
Kubernetes這類云平臺(tái)令使用它們的公司受益匪淺。但不可否認(rèn)的是,上云會(huì)給DevOps團(tuán)隊(duì)帶來壓力。為了可移植性,開發(fā)人員必須使用微服務(wù)來構(gòu)建應(yīng)用,同時(shí)運(yùn)維人員也正在管理著極端龐大的混合云和多云的部署環(huán)境。運(yùn)維人員需要有一種方法更好的連接和保護(hù)服務(wù)。因此,提出了服務(wù)網(wǎng)格的術(shù)語。
服務(wù)網(wǎng)格作為一種邏輯概念,用來描述組成這些應(yīng)用程序的微服務(wù)網(wǎng)絡(luò)以及它們之間的交互。
以業(yè)界目前最為主流的服務(wù)網(wǎng)格Istio為例,Istio以統(tǒng)一的方式提供了許多跨服務(wù)網(wǎng)絡(luò),比如流量管理,安全和可觀察性。Istio提供了流量的自動(dòng)負(fù)載均衡,提供了豐富的路由規(guī)則、重試、故障轉(zhuǎn)移和故障注入等細(xì)粒度控制,簡化了部署的復(fù)雜性,并減輕開發(fā)團(tuán)隊(duì)壓力。
盡管如此,以Istio為代表的服務(wù)網(wǎng)格仍然存在以下共通問題亟待解決:
首先,盡管各個(gè)服務(wù)網(wǎng)格系統(tǒng)都提供了服務(wù)熔斷的功能,但是這些熔斷器都只作用于L4,這意味著當(dāng)流量超過服務(wù)能支撐的程度時(shí),熔斷器會(huì)直接將整個(gè)服務(wù)熔斷,使整個(gè)服務(wù)不可達(dá)。對(duì)于集群而言,這的確有效保護(hù)了服務(wù),但是對(duì)于用戶而言,這種不可達(dá)意味著整個(gè)服務(wù)的宕機(jī),實(shí)際情況來說,往往是因?yàn)榉?wù)的某幾個(gè)接口的井噴式增長導(dǎo)致了整個(gè)服務(wù)的不可用。這意味著集群更需要的其實(shí)是可以允許某些接口的服務(wù)降級(jí),但是保證整體服務(wù)的可用性。遺憾的是,目前的服務(wù)網(wǎng)格并不提供這樣的功能,服務(wù)降級(jí)和熔斷一般由開發(fā)人員進(jìn)行開發(fā)和配置,這和開發(fā)人員專注于業(yè)務(wù)邏輯開發(fā)的初衷相違背,開發(fā)人員不應(yīng)當(dāng)去負(fù)責(zé)服務(wù)所在集群可能會(huì)面臨的狀況。
服務(wù)網(wǎng)格遵循配置即服務(wù)的原則通過配置文件的方式來對(duì)集群內(nèi)部的服務(wù)網(wǎng)絡(luò)定義和維護(hù),服務(wù)網(wǎng)格確實(shí)降低了部署的復(fù)雜性,但同樣的增加了運(yùn)維人員的心智負(fù)擔(dān)。運(yùn)維人員需要定義服務(wù)網(wǎng)格中的一切行為。一個(gè)理想的系統(tǒng)應(yīng)當(dāng)是使用用戶盡可能少的進(jìn)行配置,一切交給系統(tǒng)自動(dòng)管理和維護(hù)。
服務(wù)網(wǎng)格目前沒辦法控制服務(wù)的自動(dòng)擴(kuò)容/縮容。從資源粒度的角度來說,服務(wù)網(wǎng)格不應(yīng)當(dāng)去處理服務(wù)的自動(dòng)擴(kuò)縮容,但是一個(gè)服務(wù)的CPU或內(nèi)存突然出現(xiàn)指數(shù)式增長往往是因?yàn)榇罅空?qǐng)求的同時(shí)訪問,服務(wù)沒辦法同時(shí)處理如此高的并發(fā),導(dǎo)致大量請(qǐng)求被掛起。從這個(gè)角度來說,通過了解服務(wù)的并發(fā)情況可以側(cè)面描述當(dāng)前服務(wù)承受的壓力,利用這一點(diǎn)來完成服務(wù)的擴(kuò)縮容。但是目前還沒有相關(guān)技術(shù)的說明或報(bào)道,也尚未收集到國內(nèi)外類似技術(shù)的資料。
發(fā)明內(nèi)容