前言
微服務(wù)架構(gòu)的出現(xiàn),拆分了龐大的單體應(yīng)用,讓業(yè)務(wù)之間的開發(fā)與協(xié)作變得更加靈活。當(dāng)面臨業(yè)務(wù)流量增加的場景時,往往需要對一些應(yīng)用組件進行擴容。K8S在應(yīng)用層面提供了HPA,圍繞HPA開源社區(qū)延伸出了KEDA這樣的彈性組件,為微服務(wù)應(yīng)用以業(yè)務(wù)指標(biāo)執(zhí)行彈性策略提供了實現(xiàn)的可能性。但HPA正常工作的一個大前提是需要保證集群資源充足,為此用戶必須提前對集群擴容或時常保持集群資源冗余。
對于集群資源彈性這一命題,K8S社區(qū)給出了Cluster Autoscaler(CA)和Virtual Kubelet(VK)兩種解決方案。本文圍繞著微服務(wù)應(yīng)用的形態(tài)與特點,剖析了CA與VK各自適用的場景,并總結(jié)了微服務(wù)架構(gòu)下應(yīng)用該如何選擇集群資源彈性。
微服務(wù)應(yīng)用形態(tài)與特點
在微服務(wù)應(yīng)用架構(gòu),微服務(wù)架構(gòu)將一個龐大的應(yīng)用系統(tǒng)拆分成了一個個離散的應(yīng)用組件,這些組件通過RPC串在一起,對外提供完整的服務(wù)。每個組件是離散的,大部分組件可以通過水平擴縮從而調(diào)整服務(wù)容量。非核心鏈路上的組件,是允許延遲擴容或者不擴容,甚至是縮容讓出資源。
微服務(wù)架構(gòu)下在彈性場景存在五大特征點:
- 水平伸縮可以調(diào)整系統(tǒng)容量:在外部資源充足的情況下,微服務(wù)應(yīng)用組件水平擴容可以提升業(yè)務(wù)系統(tǒng)的容量。
- 應(yīng)用間存在依賴關(guān)系:單個微服務(wù)應(yīng)用并不能提供完整的服務(wù),擴容單個微服務(wù)組件,對系統(tǒng)容量的提升非常有限,往往需要和依賴的服務(wù)一起擴容才能有效提升系統(tǒng)容量。
- 應(yīng)用本身是無狀態(tài)的:若微服務(wù)應(yīng)用本身有狀態(tài),對于水平擴容是不利的,例如對磁盤有強依賴,在擴容場景下需要注意調(diào)度親和性以打散Pod,避免同類型應(yīng)用在同一節(jié)點對磁盤IO搶占,同時縮容時還需要考慮對于狀態(tài)數(shù)據(jù)的處理。因此需要盡量改造成無狀態(tài)應(yīng)用。
- 啟動速度快且服務(wù)上下線流量無損:服務(wù)上下線流量無損對于自動擴縮容場景至關(guān)重要,尤其是在大流量高并發(fā)場景下擴容,冷啟動的新Pod很容易被大流量擊潰,并且在健康探針的作用下,擴容出的新Pod不斷被K8s重啟,最終實現(xiàn)的是無效擴容。
- 流量具有周期性:絕大多數(shù)微服務(wù)架構(gòu)應(yīng)用面向的是在線服務(wù),因此可以用二八定律來描述它,即20%的時間處理了80%的流量。對于業(yè)務(wù)流量而言,最顯著的特征是存在周期性的變化,且往往這個變化是快速的,所以微服務(wù)應(yīng)用容量擴縮的響應(yīng)速度對于業(yè)務(wù)系統(tǒng)的穩(wěn)定起重要作用。
在微服務(wù)應(yīng)用架構(gòu)中配置應(yīng)用彈性時,我們所需要考慮的是選擇合適的指標(biāo)來衡量系統(tǒng)容量。在配置集群資源彈性時,我們所需要考慮的是擴容出的計算資源是否能夠滿足應(yīng)用所需。
K8S 集群資源彈性技術(shù)方案
如前言中所提及,K8S社區(qū)給出了兩份“標(biāo)準答案”的框架,具體的資源彈性實現(xiàn)還依賴云廠商的技術(shù)形態(tài)與產(chǎn)品能力。
虛擬節(jié)點:VK
Virtual Kubelet是根據(jù)Kubelet定義提出的一個“虛擬節(jié)點”的概念,允許云廠商將云服務(wù)包裝成一個“虛擬節(jié)點”,加入到Kubernetes集群中。虛擬節(jié)點的背后往往是云廠商的大資源池,因此理論上我們可以認為虛擬節(jié)點的資源是無限的,當(dāng)然實際情況還要以云廠商的規(guī)模和產(chǎn)品能力來做判斷。
節(jié)點伸縮:CA
Cluster Autoscaler是K8S社區(qū)給出的集群節(jié)點伸縮方案。CA監(jiān)聽集群中所有Pod事件,當(dāng)有Pod因為資源不足而無法調(diào)度時,CA會根據(jù)伸縮組信息進行模擬擴容并調(diào)度計算,最后按照預(yù)設(shè)的節(jié)點擴張策略進行真實節(jié)點擴容。同時CA監(jiān)聽集群整體資源利用率,當(dāng)利用率低于預(yù)設(shè)的縮容閾值時,CA進行模擬縮容調(diào)度計算,排除各種影響因素后,CA對可縮容節(jié)點執(zhí)行打污點、排水、刪除這一系列操作。
各方案特點比對
以CA技術(shù)形態(tài)為主的真實節(jié)點伸縮與以VK技術(shù)形態(tài)為主的虛擬節(jié)點,這兩種主流技術(shù)手段有著各自特點,其中最主要的區(qū)別如下:
簡而言之,CA伸縮真實節(jié)點以提供完整K8S能力,但響應(yīng)速度較慢;VK由云廠商資源池驅(qū)動,提供了秒級、無限資源的彈性能力,但不存在真實節(jié)點,從而失去了部分K8S特性。
云廠商解決方案
在VK和CA這兩種主要資源彈性技術(shù)方向上,各個云廠商也紛紛推出了對應(yīng)產(chǎn)品以提供相應(yīng)的解決方案。
Serverless方向主要是Serverless Instance與Serverless Cluster。Serverless Instance產(chǎn)品有ECI、Fargate、ACI這類,以快速、無限資源為顯著特點。Serverless Cluster產(chǎn)品有阿里云的ASK、谷歌的GKE Autopilot,由云廠商維護所有集群資源,對用戶而言開箱即用免運維。
節(jié)點伸縮方向AWS還推出了開源組件Karpenter,它繞過了CA中伸縮組的概念,從而讓擴縮容時對于資源的選擇更加靈活。
資源彈性策略選擇與考量因素
對于資源彈性問題,我們首要考慮的是能力。即新的計算資源是否能夠滿足業(yè)務(wù)使用需求。以VK技術(shù)形態(tài)為主的彈性方案,受限于架構(gòu)設(shè)計、安全、性能等因素,天然地缺失了節(jié)點特性、容器特權(quán)等能力。對于有這部分訴求的業(yè)務(wù)應(yīng)用應(yīng)盡可能地進行改造,以移除相關(guān)依賴。
其次我們考慮的是成本與效率。對于企業(yè)應(yīng)用而言,成本預(yù)算是不可避免的話題,定價規(guī)則以及計費模式不同,最終帶來的資源成本不同,勢必會影響我們對于某項技術(shù)的偏好。在當(dāng)前的Serverless場景下,計算資源大體上采用的還是按量計費模式,對于一些長時運行的應(yīng)用上,采用預(yù)付費模式的計算資源是否能達到更節(jié)省成本,還需要我們進一步去調(diào)研與嘗試。成本這一層面不僅包含資源成本,還包含運維成本、團隊技術(shù)學(xué)習(xí)成本以及依賴具體云廠商所隱含的遷移成本等等,這些成本在當(dāng)下可能對企業(yè)的收益影響有限,但從企業(yè)長遠發(fā)展角度來看,這一部分不可忽視。同時對于技術(shù)團隊而言,選擇相應(yīng)技術(shù)方案在節(jié)約運維成本和降低團隊學(xué)習(xí)成本的同時,需要理性看待這部分成本節(jié)省與團隊成長所帶來的收益之間的關(guān)系。
效率是影響業(yè)務(wù)收益成本的重要因素之一,從流量來襲,到HPA根據(jù)指標(biāo)做出響應(yīng),再到資源彈性做出動作,最后到應(yīng)用啟動服務(wù)上線。這之中每一個環(huán)節(jié)都存在時間成本,通常情況下這個時間成本越小越好,但也存在一些業(yè)務(wù)對于時間成本不敏感。對于擴容的每個環(huán)節(jié),都延伸出了相應(yīng)的技術(shù)解決方案。如HPA被動式響應(yīng),阿里云推出了AHPA帶指標(biāo)預(yù)測的提前擴容能力。如JAVA應(yīng)用啟動慢,GraalVM、Alibaba Dragonwell都在冷啟動上做出了一些努力。對于明確業(yè)務(wù)周期的應(yīng)用,設(shè)置好定時彈性提前擴容,這些問題自然引刃而解。
最后還有一些場景問題需要考慮,對當(dāng)前應(yīng)用架構(gòu)進行升級、遷移、重建時,我們需要把高彈性因素納入考慮范圍,進行合適的技術(shù)選型。
綜上所述,我們總結(jié)了一張資源彈性選擇策略圖,列舉了通用場景下對集群彈性選型時需要考慮的因素點。
總結(jié)
在微服務(wù)架構(gòu)中,我們需要從業(yè)務(wù)視角梳理與劃分應(yīng)用組件。對于核心鏈路組件,要盡可能的保證這些組件的健壯性,并調(diào)整成一個高可用、高彈性的架構(gòu),從而讓核心業(yè)務(wù)長久運行。對于外圍鏈路組件,需要權(quán)衡成本與高可用、高彈性帶來的效益。
在K8S資源彈性問題上,現(xiàn)有技術(shù)手段中,我們需要考量兼容性、效率與成本,從而選擇合適于自身業(yè)務(wù)的集群彈性策略。
阿里云的微服務(wù)應(yīng)用托管平臺 EDAS 在資源彈性場景下,不僅針對性的對于獨享資源型業(yè)務(wù)虛擬機 ECS 集群,池化資源型業(yè)務(wù) K8S 集群,以及全托管免運維的阿里云 Serverless 集群均做了很好的支持;同時基于結(jié)合阿里云容器服務(wù)和 ECI ,同時提供了針對池化資源 + Serverless Instance 的形態(tài)場景支撐,讓我們微服務(wù)的業(yè)務(wù)在可以充分利用云技術(shù)所帶來的技術(shù)紅利。
原文鏈接文章來源:http://www.zghlxwxcb.cn/news/detail-781432.html
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。文章來源地址http://www.zghlxwxcb.cn/news/detail-781432.html
到了這里,關(guān)于微服務(wù)應(yīng)用視角解讀如何選擇K8S的彈性策略的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!