阿里巴巴雲原生架構實踐及熱議技術解析

在剛剛結束的KubeCon上海站,可以明顯感受到國內外各大廠商對雲原生的探索已經進入不同發展階段並有所側重,本文重點探討雲原生領域的熱門技術趨勢並分享阿里巴巴雲原生架構實踐。

2013 年,Docker項目發佈,當時這不過是LXC的使用者,創建和使用應用容器的邏輯跟Warden等沒有本質不同,但“容器鏡像”的出現真正解決了困擾PaaS用戶已久的一致性問題,Docker項目通過容器鏡像直接將應用運行所需的完整環境,即整個操作系統的文件系統打包,這也帶領着容器技術走向成熟。可惜的是,Docker公司並沒有贏得接下來的容器編排大戰。

2017 年末,Google 在過去十年編織全世界最先進容器化基礎設施的經驗,最終幫助 Kubernetes項目取得關鍵領導地位,並將 CNCF 這個以“雲原生”爲關鍵詞的組織和生態推向巔峯。

根據CNCF的定義(V1.0),雲原生技術有利於各組織在公有云、私有云和混合雲等新型動態環境中,構建和運行可彈性擴展的應用。雲原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式API。本文采訪了阿里巴巴高級技術專家張磊和資深技術專家李響,共同探討雲原生領域熱門技術背後的爭議及最佳實踐。

雲原生熱議技術

如果從廣義上理解雲原生,李響表示,這實際上是一套方法論,這套理念的目標是最佳利用雲本身的交付能力,比如彈性、基礎設施優勢等,以容器、微服務、服務網格等技術爲基礎構建起來的雲原生應用可以很好得滿足這一目標,因此這也被稱爲通常意義上的最佳實踐。在這之中,Kubernetes又成爲當時整個社區推動雲原生實踐的最佳翹點,因爲其讓用戶在管理應用時能最大程度發揮容器和雲的價值。

如上所述,雲原生涉及的領域衆多。根據CNCF公佈的雲原生全景圖譜,每個領域又包含衆多細分選項和開源項目,一篇文章很難說清楚。因此,本文重點探討雲原生領域的熱議技術和值得重點關注的方向。

Service Mesh

2016 年 1 月 15 日,離開 Twitter 的基礎設施工程師 William Morgan 和 Oliver Gould,在 GitHub 上發佈了 Linkerd 0.0.7 版本,他們同時組建了一個創業公司 Buoyant,業界第一個 Service Mesh 項目誕生,但在當時,以 Spring Cloud 爲代表的傳統開發框架佔據着微服務市場的主流地位。直到 2017 年底,非侵入式的 Service Mesh 技術才從萌芽走向成熟。

對於這一技術的未來發展,李響建議迴歸技術本質,Service Mesh 的本質是爲了將原來應用層的服務治理能力下沉到基礎設施,讓開發者免去關心這些繁瑣的問題,由基礎設施進行統一管控,但這項技術發展至今更多還處於探索階段,在靈活性、規模性和性能層面還面臨很多挑戰。舉例來說,原來由開發人員掌握的能力下沉到基礎設施,解放開發人員的同時也讓其喪失了部分靈活性。如果想要更好地實踐 Service Mesh,一定要找到開發人員和基礎設施之間的平衡點,並努力解決其產生的一些性能損耗,Service Mesh 本身的工具鏈和生態也需要不斷完善。

在這些工具中,Istio 是目前 Service Mesh 社區最引人注目的開源項目,並在今年3月份發佈了期待已久的 Istio 1.1 版本,對流量管理、安全、策略和遙測以及配置管理進行了更新和調整。然而,在過去一年,Istio 基本都在專注自家生態,既沒有捐給 CNCF,也沒有推進一些標準型或者接口型的生態技術,微軟牽頭在本屆 KubeCon EU 站上發佈的Service Mesh Interface(SMI),幾乎所有Service Mesh玩家都參與了,唯獨谷歌或者說Istio缺席了,這不僅讓人對其未來走向感到擔憂。

採訪中,李響表示,每個項目都存在一條適合自己的技術和用戶演進曲線,對於現階段的 Istio而言,相比於開放化或者加入基金會,能夠根據用戶需求集中式快速迭代,擴大用戶羣體可能是更重要的事情。回顧 Kubernetes 的發展,起初也不是一個完全由社區驅動的項目,後期才逐漸加入CNCF 並且變得更開放。這只是各大項目生命週期的一個過程,每個階段的時間長短可能各有不同。但是,從另一個方面講,Istio目前在國內的接受度還是比較高的,不少企業已經將其放入生產環境大規模實踐,其現狀可能是對其技術演進比較合適的選擇。

對此,張磊補充道,從技術層面來看,Istio本身並不屬於偏生態型的項目,它的目的在於解決服務治理存在的問題,而不是連接更多項目和開發者,定位上的差異讓其技術演進路線存在不同。雖然國內已經有企業開始實踐,但更多還是偏向控制面,國際上對數據平面的關注同樣很高,比如CNCF的Envoy項目,本身在國內並沒有得到很好的落地,這也與國內企業的技術棧和關注點有關,比如阿里早期更關注中間件,這就屬於控制平面的事情,而國外很多開發者的背景是基礎架構,更習慣從底向上看待整個事情。雖然角度有所不同,但數據平面是國內企業和開發者值得關注的方向。

Serverless

Serverless 是一種“無服務器架構”模式,它無需關心程序運行環境、資源及數量,只需要將精力聚焦到業務邏輯上的技術。目前很多公司已經實現 DevOps 化,正在向 Serverless 邁進。今年初,曾經以獨特視角定義雲計算的伯克利又以新的視角發佈了一篇文獻:將雲中的編程變得簡單:伯克利視角下的 Serverless 計算。其認爲:

Serverless 所提供的接口,簡化了雲計算的編程,其代表了程序員生產力的又一次變革,一如編程語言從彙編時代演變爲高級語言時代。

不難看出,伯克利對此非常看好,而也有觀點認爲Serverless 只是新型的SOA架構。對此,李響在採訪中表示,Serverless 的本質在於一方面提高開發效率,免去對機器管理、環境配置等運維域的繁瑣工作,另一方面提高資源效率,通過按需使用、按量計費降低一次性投入成本和使用成本。Serverless 需要定義基礎設施和開發人員之間的界限,其本身的定義也是動態變換的。在虛擬機時代,運營商將物理機器服務化對外提供虛擬機的API,包括現在提及的“容器即服務(CaaS)”的思想,開發者需要關心的是一個容器的API,這本身也是一種無服務器的思想,但是隨着資源對利用率要求更高,又提出新的函數即服務(FaaS)的理念,這種是看上去是更徹底的無服務器架構,開發者聚焦在業務函數代碼本身,對運行環境完全無感知,前端開發工程師能很輕鬆構建起完整的系統。隨着技術的逐漸成熟,界限的水位線將逐漸升高,最終的結果是開發人員的負擔越來越低,但這個最佳平衡點在哪目前還沒辦法下定論。

在衆多Serverless項目中,Knative 是近期關注熱度較高的話題,這是谷歌在2018的Google Cloud Next大會上發佈的一款基於Kubernetes的Serverless框架。Knative很重要的目標是制定雲原生、跨平臺的 Serverless 編排標準。通過整合容器構建 (或者函數)、工作負載管理 (和動態擴縮) 以及事件模型這三者來實現Serverless標準。

然而,發展至今,Knative也逐漸面臨與Istio相同的問題,微軟發佈的開源KEDA與Knative多有重合,但Knative本身與Kubernetes的集成度並不是很高,KEDA 在“事件驅動的水平擴展”這一細分領域,跟 Kubernetes 項目本身有着更好的集成度,更多強調可擴展性和接口設計,顯然也有推動這一領域技術標準化的含義。張磊表示,從不同的角度解決開源工具存在的不足,這是社區和企業目前喜聞樂見的事情,社區中存在很多不同的開源項目從不同的角度解決問題,這本身也是對現有項目缺點的補充。至於FaaS是否就是未來 Serverless的最佳實踐模型,現在有挺多實踐落地的例子,但是還無法輕易下結論,FaaS 對開發範式有一定的要求,需要對現有業務進行改造,節約計算成本和研發的投入需要找個平衡點,短期內 Serverless 在面向開發者的層面可能還是會持續“百花齊放”的現狀。

值得關注的技術

除此之外,雲原生領域還有很多其他項目值得關注,比如監控領域,李響透露,Prometheus 就是值得關注的項目之一。最近,OpenTracing 和OpenCensus 也在進行合併成爲 OpenTelemetry。Containterd項目後續與Docker的關係,整個Kubernetes下面的運行時是否會切換到更標準、開放的技術,包括與Containterd存在一些競爭關係的CRI-O,剛剛加入CNCF成爲孵化項目。無論如何,運行時部分將有新的故事發生。

至於應用交付領域,Helm V3已經發布。張磊認爲,該領域未來會有較大發展。因爲,Helm起初的定位是Package  Manager(包管理),這本身是一個比應用更小的維度,未來可能抽象到應用層面,管理由多個包組成的應用。最後,CNCF成立了Special Interest Group(SIG),也在討論如何在雲原生上定義應用,並把雲原生應用交付到Kubernetes標準化集羣。未來,標準化也將是雲原生領域的重要方向。

阿里巴巴雲原生實踐

在雲原生領域,開發者的訴求和使用方法永遠是豐富的、複雜的、多樣的。在這種背景下,短時間內很難有技術能夠大一統地解決開發者面臨的所有問題,阿里巴巴內部對雲原生的探索也一直在進行中。

2011年,阿里巴巴開始向容器等雲原生技術進行演進,最初的目標是爲了增強資源本身的利用率,隨後又開始探索調度、存儲等方向,逐步提高資源的可靠性和穩定性。在這一基礎上,阿里巴巴又開始想辦法提高業務穩定性和開發者效率,引入諸如Kubernetes、CI/CD等技術,推動雲原生在阿里巴巴穩健、優雅的落地。李響表示,在整個平臺切換到Kubernetes之後,阿里巴巴開始嘗試將PaaS平臺做得更加自動化,以實現應用自愈;提高監控和可運維性;讓Kubernetes與PaaS平臺實現最佳交互;與社區融合,將社區的新技術引入阿里巴巴內部進行實踐以幫助社區落地,並將內部優秀的技術成果貢獻給社區,讓整個阿里巴巴雲原生技術棧更加開放。

如果總結整個過程,張磊認爲可以分爲兩大維度:一是從外向內引入社區技術,這讓阿里巴巴的基礎設施完成了一次自我升級,並變得更加開放標準;二是從內向外的輸出,對社區提出有價值的代碼,推動整個雲原生社區向更大規模的方向演進。

基於上述理念驅動,阿里巴巴近日再次開源了兩大雲原生領域項目:國內首個開放雲原生應用中心Cloud Native App Hub和雲原生應用自動化引擎OpenKruise。

Cloud Native App Hub

開放雲原生應用中心,是雲原生上託管和分發應用的集散地,同時也是國內開發者使用雲原生應用的重要基礎倉庫。在 Kubernetes 生態中,“應用”是一組 YAML 格式的描述文件,而云原生應用中心,則爲搜索、使用和分享這些應用描述文件提供了一個完全開源與開放的交互平臺。

在當前的 Kubernetes 應用生態當中,Helm 是目前最被廣泛使用的應用定義標準之一。所以在本次雲原生應用中心的發佈當中,對 Helm 格式應用的託管、搜索和分發能力成爲了中心首次上線的能力。

爲了能夠讓中國的開發者更好的使用 Helm Hub 的能力,阿里雲開發者中心與 Helm 社區達成系列技術合作,在開放雲原生應用中心提供國內首個Helm Hub 北美官方站的同步鏡像倉庫與 Hub 站點。與此同時,Helm Hub 官方也在其核心 Charts 倉庫中推薦了“開放雲原生應用中心”作爲中國開發者使用 Helm Charts 的首選。

在開放雲原生應用中心當中,所有默認的 Helm Charts(Helm 格式的應用),都定時同步自 Helm Hub 北美官方站並託管在 Github 上。在這個過程中, 雲原生應用中心會自動對同步過來的所有 Charts 進行“本地化”操作,包括將 gcr.ioqury.io 等訪問不暢的鏡像 URL 替換成國內鏡像源;將託管在 Google Cloud 存儲中的應用製品URL替換爲國內鏡像地址,並且不間斷的通過後臺 CI 系統在阿里雲 Kubernetes 服務中驗證這些 Charts。

與此同時,“開放雲原生應用中心” 6 個月內的所有 Roadmap都會直接在 Github 上開源,並接受所有開發者反饋,在開發者訴求的驅動下進行迭代和演進。

儘管 Helm 目前是社區主要使用的雲原生應用管理工具,但開放雲原生應用中心並不是一個完全的 Helm Hub “克隆”。事實上,Helm只是雲原生應用中心所支持的應用描述格式與管理能力的其中一種。

在開放雲原生應用中心很快就會發布的後續版本中,應用中心將會率先提供基於 Kustomize 的應用描述文件修改能力: K-R(Kube-Resource)服務。

K-R服務將使得用戶可以直接通過 Overlay 的方式修改所有的應用描述文件的所有字段,而不會像 Helm 默認那樣僅能通過模板替換或者 DSL 的方式修改應用描述文件,進而造成描述文件的“不可複用”化與碎片化。

訪問地址:https://developer.aliyun.com/hub

OpenKruise

Kruise 是 cruise的諧音,‘k’ for Kubernetes。字面意義爲巡航,豪華遊艇,寓意Kubernetes上應用的自動巡航,滿載阿里巴巴多年應用部署管理經驗。
 
Kruise 的目標是automate everything on Kubernetes。Kruise 項目源自於阿里巴巴經濟體應用過去多年的大規模應用部署、發佈與管理的最佳實踐,源於容器平臺團隊對集團應用規模化運維,規模化建站的能力。

Kruise的核心是自動化,將從不同維度解決Kubernetes之上應用的自動化問題,包括部署,升級,彈性擴縮容,Qos調節,健康檢查,遷移修復等。此次,Kruise開源的內容主要在應用部署,升級方面,即一套增強版controller組件用於應用的部署和級和運維。後續,Kruise會依次開源智能化的彈性擴縮容組件,以及應用Qos自調節能力的組件等。
 
Kruise 第一期開源主要包含Advanced StatefulSet,擴展了原生StatefulSet,加入了原地升級和允許最大不可用實例配置兩個新特性;SidecarSet,大規模場景下 的Sidecar 管理利器等。較爲重要的是,OpenKruise 是一個 Umbrella 項目,正在計劃發佈更多Controller覆蓋更多場景和功能,比如豐富的發佈策略,金絲雀發佈,藍綠髮布,分批發布等。

開源地址:https://github.com/openkruise/kruise

結束語

雲原生是IT基礎技術以及應用的新趨勢。Gartner報告指出,到2022年有75%的全球化企業將在生產中使用容器化應用。歷經9年技術沉澱,阿里雲已擁有國內最豐富的雲原生產品家族,覆蓋八大類別20餘款產品。截至2019年6月,阿里共開源近700個項目,收穫近40萬star,聚攏全球3.3萬開發者,其中Star數位列全球企業前四,國內第一。

未來,李響表示,阿里巴巴將繼續從兩個維度貢獻開源:一是阿里雲生態層面,幫助阿里雲上用戶和企業更容易得構建整個雲原生技術棧;二是幫助更廣泛的開發者培養雲原生土壤,並持續與國際社區進行標準化合作。在第二個層面,張磊補充道,阿里巴巴也將通過與國際社區合作舉辦線上公開課等方式幫助國內開發者更好地實踐,阿里巴巴有責任也有義務讓雲原生技術在國內更好落地。

相關文章:

《KubeCon 盤點:雲原生領域最新開源項目和大廠實踐》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章