華為云應(yīng)用服務(wù)網(wǎng)格(Application Service Mesh,簡(jiǎn)稱ASM)于2018年8月對(duì)外公測(cè),2019年7月正式商用。是一種高性能、高可靠性和易用性的全托管的服務(wù)網(wǎng)格,支持虛擬機(jī)、容器等多種基礎(chǔ)設(shè)施,支持跨區(qū)域多云多集群服務(wù)的統(tǒng)一治理。以基礎(chǔ)設(shè)施的方式為用戶提供服務(wù)流量管理、服務(wù)運(yùn)行監(jiān)控、服務(wù)訪問(wèn)安全以及服務(wù)發(fā)布能力。
ASM控制面和數(shù)據(jù)面均和開(kāi)源Istio完全兼容,無(wú)縫對(duì)接華為云的企業(yè)級(jí)Kubernetes集群服務(wù)云容器引擎(Cloud Container Engine,簡(jiǎn)稱CCE),可為客戶提供開(kāi)箱即用的上手體驗(yàn)。包括并不限于:
·內(nèi)置金絲雀、藍(lán)綠等多種灰度發(fā)布流程,提供一站式自動(dòng)化的發(fā)布管理;
·提供非侵入式的微服務(wù)治理解決方案,支持完整的生命周期管理和流量治理,包括跨集群的負(fù)載均衡、熔斷、限流等多種治理能力;
·提供端到端的透明安全,支持跨集群的服務(wù)訪問(wèn)認(rèn)證和授權(quán);
·同時(shí)基于無(wú)侵入的監(jiān)控?cái)?shù)據(jù)采集,提供實(shí)時(shí)流量拓?fù)?、調(diào)用鏈等服務(wù)性能監(jiān)控和運(yùn)行診斷,構(gòu)建全景的服務(wù)運(yùn)行視圖;
·基于流量數(shù)據(jù)進(jìn)行彈性擴(kuò)縮容,保障服務(wù)訪問(wèn)延時(shí)滿足SLA目標(biāo);
·另外除了對(duì)常用的HTTP、gRPC等通用協(xié)議的服務(wù)治理外,擴(kuò)展了對(duì)Dubbo協(xié)議的治理支持,并提供了對(duì)Springcloud、Dubbo等傳統(tǒng)微服務(wù)框架的結(jié)合方案。
核心特性介紹
1、豐富的灰度發(fā)布流程
基于網(wǎng)格提供的細(xì)粒度的分流規(guī)則,在ASM中實(shí)現(xiàn)了多種典型的灰度發(fā)布流程,提供一個(gè)灰度發(fā)布的向?qū)?,方便用戶便捷的進(jìn)行灰度發(fā)布實(shí)踐。在一個(gè)服務(wù)版本正常工作,正常處理流量的同時(shí),用戶可以創(chuàng)建一個(gè)新的灰度版本。當(dāng)灰度版本啟動(dòng)成功后,引導(dǎo)用戶配置灰度規(guī)則來(lái)分割流量。
灰度規(guī)則可以是基于權(quán)重的按比例切分流量,也可以根據(jù)服務(wù)訪問(wèn)的內(nèi)容來(lái)將特定內(nèi)容的請(qǐng)求發(fā)往灰度版本,對(duì)于常用的HTTP協(xié)議,如請(qǐng)求中的OS、瀏覽器、Cookie和Header信息等。在配置了灰度規(guī)則后,可以實(shí)時(shí)的觀察到多個(gè)線上版本的運(yùn)行和訪問(wèn)信息,從而在向?qū)е幸绘I式完成版本選擇,將所有流量都切換到最終選定的版本上。
用戶也可以將以上灰度發(fā)布流程進(jìn)行自動(dòng)化配置,從而實(shí)現(xiàn)無(wú)人值守的灰度發(fā)布。即只要灰度版本運(yùn)行成功就會(huì)自動(dòng)觸發(fā)預(yù)制的灰度策略給灰度版本分配流量,在流量運(yùn)行特定的時(shí)間后,根據(jù)預(yù)制規(guī)則自動(dòng)的切換流量完成灰度發(fā)布。
除了服務(wù)粒度的灰度發(fā)布外,用戶也可以對(duì)多個(gè)服務(wù)組成的應(yīng)用,在入口服務(wù)處配置灰度規(guī)則,對(duì)一組服務(wù)使用同樣的分流策略,進(jìn)行灰度發(fā)布。
2、多集群流量管理
ASM作為一個(gè)控制面全托管的服務(wù),進(jìn)一步減輕了用戶對(duì)網(wǎng)格服務(wù)自身的運(yùn)維成本,同時(shí)作為獨(dú)立的控制面可以支持對(duì)多云多集群的網(wǎng)格數(shù)據(jù)面、容器、虛擬機(jī)等多種基礎(chǔ)設(shè)施的服務(wù)進(jìn)行統(tǒng)一管理。
對(duì)最終用戶來(lái)說(shuō)多個(gè)Kubernetes集群上的服務(wù)可以使用服務(wù)名進(jìn)行全局的服務(wù)發(fā)現(xiàn)和負(fù)載均衡??梢詰?yīng)用多種不同的負(fù)載均衡策略,可以進(jìn)行會(huì)話保持連接管理。而且,這些配置的負(fù)載均衡策略可以在跨服務(wù)的實(shí)例間分發(fā)流量。這種方式較之常見(jiàn)的基于外部DNS+負(fù)載均衡的在使用方式無(wú)疑要優(yōu)雅和簡(jiǎn)單很多,而管理粒度和功能上也要要強(qiáng)大很多。
對(duì)服務(wù)配置的連接池管理、熔斷功能也可以在多集群上生效。無(wú)論服務(wù)請(qǐng)求來(lái)自本集群還是其他集群,在同一個(gè)目標(biāo)服務(wù)上都可以應(yīng)用統(tǒng)一的熔斷規(guī)則。從而對(duì)目標(biāo)服務(wù)進(jìn)行保護(hù),提高總體的服務(wù)質(zhì)量。
在隔離目標(biāo)服務(wù)的故障實(shí)例時(shí),可以對(duì)該服務(wù)跨集群的多個(gè)實(shí)例進(jìn)行統(tǒng)一處理,如服務(wù)A有5個(gè)實(shí)例:3個(gè)實(shí)例在集群1;2個(gè)實(shí)例在集群2。當(dāng)配置了熔斷策略,最大隔離比例配置為40%,則當(dāng)集群1和集群2中的實(shí)例均出現(xiàn)連續(xù)訪問(wèn)不正常,觸發(fā)熔斷閾值條件時(shí),集群1和集群2各會(huì)被隔離一個(gè)實(shí)例。
限流功能落在多集群場(chǎng)景中應(yīng)用也會(huì)非常廣泛。通過(guò)限流功能可以限制無(wú)論調(diào)用來(lái)自哪個(gè)集群的哪個(gè)服務(wù),根據(jù)限流策略,在單位時(shí)間內(nèi)對(duì)于目標(biāo)服務(wù)的訪問(wèn)不能超過(guò)配置的閾值,從而對(duì)服務(wù)進(jìn)行全局的流控。
網(wǎng)格的流量管理功能在多集群場(chǎng)景下的應(yīng)用會(huì)使得傳統(tǒng)很多的難題變的簡(jiǎn)單。如流量鏡像能力在多集群的場(chǎng)景下可以方便的將特定條件的HTTP流量鏡像到另外一個(gè)集群的服務(wù)中。
如流量在發(fā)往生產(chǎn)集群中的同時(shí),往另外一個(gè)測(cè)試集群鏡像一份。這個(gè)過(guò)程完全不會(huì)對(duì)生產(chǎn)集群的服務(wù)產(chǎn)生影響,網(wǎng)格的數(shù)據(jù)面代理只需關(guān)注原來(lái)轉(zhuǎn)發(fā)的流量就可以,不用等待鏡像目標(biāo)地址的返回。根據(jù)具體場(chǎng)景也可以是集群間對(duì)請(qǐng)求的重定向、重寫等處理。
在多云多集群場(chǎng)景下,另外一種更常用的客戶場(chǎng)景是網(wǎng)格提供的靈活的分流能力。比如前面介紹的灰度發(fā)布功能,用戶可以選擇將灰度版本和生產(chǎn)版本部署在不同的集群,漸進(jìn)的切分流量。這樣不只是把開(kāi)發(fā)和生產(chǎn)環(huán)境的流量打通,更重要的是通過(guò)流水線配合可以將開(kāi)發(fā)和生產(chǎn)的流程打通。
3、多集群端到端透明安全
ASM是以一種安全基礎(chǔ)設(shè)施方式的方式向用戶提供透明的安全能力。讓不涉及安全問(wèn)題的代碼安全運(yùn)行,讓不太懂安全的人可以開(kāi)發(fā)和運(yùn)維安全的服務(wù),不用修改業(yè)務(wù)代碼就能提供服務(wù)訪問(wèn)安全。網(wǎng)格提供了一個(gè)透明的分布式安全層,并提供了底層安全的通信通道,管理服務(wù)通信的認(rèn)證、授權(quán)和加密,提供Pod到Pod、服務(wù)到服務(wù)的通信安全。開(kāi)發(fā)人員在這個(gè)安全基礎(chǔ)設(shè)施層上只需專注于應(yīng)用程序級(jí)別的安全性。
在多集群場(chǎng)景下ASM提供了全局的服務(wù)訪問(wèn)安全。多個(gè)集群的網(wǎng)格共享一套根證書,對(duì)給數(shù)據(jù)面的服務(wù)實(shí)例分發(fā)密鑰和證書對(duì),并定期替換密鑰證書,根據(jù)需要撤銷密鑰證書。在服務(wù)間訪問(wèn)時(shí),網(wǎng)格的數(shù)據(jù)面代理就會(huì)代理本地服務(wù)和對(duì)端進(jìn)行雙向認(rèn)證、通道加密。這里的雙向認(rèn)證的服務(wù)雙方可以來(lái)自兩個(gè)不同的集群,從而做到跨集群的透明的端到端雙向認(rèn)證。
在認(rèn)證的基礎(chǔ)上,就可以進(jìn)行服務(wù)間的訪問(wèn)授權(quán)管理,可以控制某個(gè)服務(wù),或者服務(wù)的一個(gè)特定接口進(jìn)行授權(quán)管理。如只開(kāi)放給特定的一個(gè)Namespace下的服務(wù),或者開(kāi)放給某個(gè)特定的一個(gè)服務(wù)。源服務(wù)和目標(biāo)服務(wù)可以在不同的集群,甚至源服務(wù)的不同實(shí)例在不同的集群,目標(biāo)服務(wù)的不同實(shí)例在不同的集群。
4、全局立體監(jiān)控
在我們?nèi)粘?shí)際工作中,比上面各種治理功能更常用的是各種服務(wù)運(yùn)行監(jiān)控。特別是在復(fù)雜應(yīng)用的場(chǎng)景下,服務(wù)間的訪問(wèn)拓?fù)?,調(diào)用鏈,監(jiān)控等都是我們對(duì)服務(wù)整體運(yùn)行狀況進(jìn)行管理,服務(wù)訪問(wèn)異常時(shí)進(jìn)行定位定界的必要手段。服務(wù)網(wǎng)格技術(shù)的一項(xiàng)重要能力就是以應(yīng)用非侵入的方式提供這些監(jiān)控?cái)?shù)據(jù)的采集,用戶只需關(guān)注自己的業(yè)務(wù)開(kāi)發(fā),無(wú)需額外關(guān)注監(jiān)控?cái)?shù)據(jù)的生成。
ASM基于網(wǎng)格生成服務(wù)訪問(wèn)數(shù)據(jù),集成各種不同的APM服務(wù),提供跨集群智能的服務(wù)運(yùn)行管理。包括跨集群的服務(wù)調(diào)用鏈、服務(wù)訪問(wèn)拓?fù)浜头?wù)運(yùn)行狀態(tài)健康。通過(guò)跨集群的全局視圖來(lái)關(guān)聯(lián)服務(wù)間的訪問(wèn)狀況。
在拓?fù)鋱D上通過(guò)服務(wù)的訪問(wèn)數(shù)據(jù),可以直觀的觀察到服務(wù)的健康狀況,服務(wù)間的依賴情況。并且可以對(duì)關(guān)心的服務(wù)進(jìn)行下鉆,從服務(wù)級(jí)別下鉆到服務(wù)版本級(jí)別,還可以進(jìn)一步下鉆到服務(wù)實(shí)例級(jí)別。如下圖通過(guò)這種實(shí)例級(jí)別的拓?fù)淇梢杂^察到配置了熔斷規(guī)則后,網(wǎng)格如何隔離故障實(shí)例,使其逐漸接收不到流量。并且可以在故障實(shí)例正常時(shí),如何進(jìn)行實(shí)例的故障恢復(fù),自動(dòng)的給恢復(fù)的實(shí)例重新分配流量。
故障實(shí)例隔離
故障實(shí)例恢復(fù)
在ASM中,我們把上面介紹到的復(fù)雜均衡、熔斷限流流量管理、服務(wù)訪問(wèn)安全、服務(wù)訪問(wèn)拓?fù)?、監(jiān)控調(diào)用鏈等能力除了多個(gè)容器集群外,擴(kuò)展到VM等其他基礎(chǔ)設(shè)施。用戶可以無(wú)差別的對(duì)VM間的訪問(wèn)、容器到VM間的訪問(wèn)進(jìn)行以上的流量管理、安全訪問(wèn)和服務(wù)訪問(wèn)監(jiān)控,從而便捷對(duì)容器和虛機(jī)的統(tǒng)一、細(xì)粒度、全方位管理。
5、智能彈性擴(kuò)縮容
基于前面介紹的網(wǎng)格上產(chǎn)生的服務(wù)訪問(wèn)數(shù)據(jù),可以對(duì)網(wǎng)格的服務(wù)實(shí)例進(jìn)行更及時(shí)智能的彈性擴(kuò)縮容。傳統(tǒng)的HPA負(fù)責(zé)Pod水平伸縮通過(guò)定期的掃實(shí)例的資源情況,如CPU和內(nèi)存,比較和設(shè)定的目標(biāo)的比值,來(lái)水平調(diào)整應(yīng)用的實(shí)例數(shù)。
例如當(dāng)前的指標(biāo)值是200m,目標(biāo)值是100m,那么按照公式計(jì)算期望的實(shí)例數(shù)就會(huì)翻倍。在實(shí)際過(guò)程中,可能會(huì)遇到實(shí)例數(shù)值反復(fù)伸縮,導(dǎo)致集群震蕩?;谥笜?biāo)的伸縮存在一定的時(shí)延,經(jīng)常會(huì)導(dǎo)致應(yīng)用CPU飚高,相應(yīng)時(shí)間變慢。
為了解決以上問(wèn)題,保證最終用戶的體驗(yàn),在ASM中設(shè)計(jì)開(kāi)發(fā)了另外一種基于網(wǎng)格服務(wù)訪問(wèn)數(shù)據(jù)的擴(kuò)縮容。在網(wǎng)格的應(yīng)用場(chǎng)景中,用戶最關(guān)注的指標(biāo)還是延時(shí),擴(kuò)縮容的目標(biāo)是即怎么去做擴(kuò)縮容保證客戶訪問(wèn)的延時(shí)在一個(gè)目標(biāo)的區(qū)間內(nèi)。
我們使用時(shí)間序列根據(jù)前幾個(gè)周期的流量預(yù)測(cè)下個(gè)周期的流量,并根據(jù)當(dāng)前的實(shí)例數(shù),選定下個(gè)周期可能的實(shí)例數(shù)范圍,將范圍內(nèi)的實(shí)例數(shù)和多個(gè)當(dāng)前資源指標(biāo)、訪問(wèn)指標(biāo)作為神經(jīng)網(wǎng)絡(luò)的輸入,對(duì)下個(gè)階段的形影時(shí)間進(jìn)行預(yù)測(cè)。從滿足相應(yīng)時(shí)間SLA目標(biāo)的實(shí)例中根據(jù)成本選擇最佳的目標(biāo)實(shí)例數(shù),執(zhí)行擴(kuò)縮容。
這種自動(dòng)擴(kuò)縮容方式調(diào)用資源擴(kuò)容/縮容的命令,在下個(gè)周期到來(lái)的時(shí)候資源數(shù)目恰好已經(jīng)改變成下個(gè)周期需要的最合理的資源數(shù)目,提高了擴(kuò)縮容的及時(shí)性。另外省去了傳統(tǒng)閾值法對(duì)閾值的設(shè)定進(jìn)行調(diào)整嘗試的步驟,可以直接在使用時(shí)自動(dòng)的將實(shí)例數(shù)目調(diào)整到一個(gè)合理的值。
遺留微服務(wù)SDK框架結(jié)合方案
對(duì)于大量當(dāng)前使用傳統(tǒng)SDK的開(kāi)發(fā)的服務(wù),當(dāng)要使用服務(wù)網(wǎng)格能力時(shí),ASM提供了一套遷移業(yè)務(wù)無(wú)侵入的遷移方案。在服務(wù)調(diào)用方將Outbound的流量引流到網(wǎng)格的數(shù)據(jù)面上來(lái)。即短路原有SDK里的服務(wù)發(fā)現(xiàn)和負(fù)載均衡,直接通過(guò)Kubernetes的服務(wù)名訪問(wèn),使用Kubernetes的服務(wù)發(fā)現(xiàn),SDK里的治理邏輯也可逐步的被網(wǎng)格替換。這樣服務(wù)的運(yùn)行治理能力都下沉到由k8s和服務(wù)網(wǎng)格提供基礎(chǔ)設(shè)施上。
通過(guò)這種方式:控制面使用ASM統(tǒng)一的控制面做服務(wù)發(fā)現(xiàn)和治理規(guī)則管理,不需要獨(dú)立的注冊(cè)中心和配置中心;數(shù)據(jù)面的服務(wù)發(fā)現(xiàn)、負(fù)載均衡、和各種治理都在ASM數(shù)據(jù)面Envoy上執(zhí)行,SDK作為開(kāi)發(fā)框架,回歸到開(kāi)發(fā)框架的本來(lái)職能,作為一個(gè)純凈輕量的應(yīng)用開(kāi)發(fā)框架供用戶開(kāi)發(fā)代碼。
在方案中,數(shù)據(jù)面可以是容器,也可以是VM。服務(wù)可以是各種語(yǔ)言,本身開(kāi)發(fā)框架也沒(méi)有限制。統(tǒng)一通過(guò)網(wǎng)格的控制面下發(fā)流量規(guī)則,對(duì)所有形態(tài)的數(shù)據(jù)面進(jìn)行一致的管理。
未來(lái)規(guī)劃
應(yīng)用服務(wù)網(wǎng)格ASM作為連接上層應(yīng)用和下層基礎(chǔ)設(shè)施的重要環(huán)節(jié),將在4個(gè)方向上不斷增強(qiáng)能力:向上與業(yè)務(wù)融合,以非侵入的方式提供更細(xì)致的應(yīng)用層能力;向下與基礎(chǔ)設(shè)施融合,使能面向應(yīng)用的基礎(chǔ)設(shè)施;并不斷增強(qiáng)網(wǎng)格的治理、發(fā)布和彈性的業(yè)務(wù)能力;并加強(qiáng)網(wǎng)格自身的能力優(yōu)化,包括性能、資源利用和運(yùn)維能力。同時(shí)結(jié)合ASM大量的實(shí)際落地場(chǎng)景中的客戶需求,進(jìn)一步催熟Istio社區(qū)的大特性演進(jìn)和發(fā)展,推進(jìn)服務(wù)網(wǎng)格技術(shù)在業(yè)界的推廣和使用。