天天看點

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

2月19日-2月26日,螞蟻金服開展了“共戰‘疫情’,技術破局”數字課堂線上直播。邀請資深專家從“雲原生”、“研發效能”、“資料庫”三方面分享螞蟻金服的實踐經驗并線上答疑,解析PaaS在金融場景的落地建設實踐,解析支付寶移動端彈性動态架構,分享OceanBase 2.2版本的特性和實踐。我們将系列演講整理并釋出在 “螞蟻金服科技” 微信公衆号上,歡迎關注。

螞蟻金服SOFAStack産品專家俞仁傑,在螞蟻金服數字課堂直播間分享了雲原生應用PaaS平台的建設實踐,以下為演講整理全文:

大家好,歡迎來到螞蟻金服數字課堂直播間。今年2月,我們SOFAStack金融分布式架構産品已經在阿裡雲上完成了商業化釋出,為了讓更多朋友了解到我們的産品的能力、定位以及背後的設計思路,後續我們會有一系列的直播分享。我們今天想分享給大家的話題叫《雲原生應用PaaS平台的建設實踐》,主要會圍繞PaaS産品能力在一些需要穩妥創新的金融場景下的落地思路,并且能夠更好地與雲原生架構做好連結。

金融場景雲原生落地面臨挑戰

雲原生是業務快速變化背景下的必然技術趨勢

回顧IT的發展史,雲計算分類為IaaS PaaS 和 SaaS已經有十幾年了。而事實上,整個雲計算行業的發展,我們能夠明顯看到企業在落地雲計算戰略的時候經曆的三個階段,Cloud-Based, Cloud-Ready, Cloud-Native。這三個階段其實是因為業務的變化越來越靈活,要求企業關注重心上移,把更多的精力和人才投入到業務邏輯的建設上,而把下層自已并不擅長并且越來越複雜的基礎設施、中間件逐漸交給雲計算廠商去實作,專業的人做專業的事。

這本質是社會分工的進一步細化,也符合人類社會發展的規律。在雲原生時代,業界所提出的容器技術,Service mesh技術,Serverless技術都是希望讓業務研發與基礎技術更加的解耦,讓業務創新和基礎技術創新都更容易的發生。

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

容器技術帶來的是一種應用傳遞模式的變革

雲原生就是業務快速變化背景下的必然技術趨勢。而這個趨勢背後的實質載體,就是我們所說的雲原生、Kubernetes以及以Docker為代表的容器技術,這些所帶來的,本質是一種應用傳遞模式的變革。而為了真正能夠使業界、社群所倡導的新興應用傳遞模式落地到實際的企業環境,我們需要一個以應用為中心的平台來進行承載,貫穿應用運維的各項生命周期。

圍繞“雲原生”這個關鍵詞,其實在社群和業界已經有了非常多的交流和資料,圍繞Docker/K8S的最佳實踐、DevOps CICD、容器網絡存儲設計、日志監控對接優化等等等等,而我們今天的分享,主要想表達的是我們圍繞在K8S之上塑造一個PaaS平台的産品價值主張。Kubernetes是一個非常好的編排和排程架構,它核心的貢獻是讓應用的編排和資源的排程更加的标準化,同時提供了一個高度可擴充的架構,友善上層進行各種控制器和排程器的定制。但是,它并不是一個PaaS。PaaS底層可以基于Kubernetes去實作,但是在上層要補足非常多的能力才能真正把Kubernetes用于生産環境,特别是金融行業的生産環境。

金融場景需要“穩妥創新”

生産環境落地雲原生需要着重考慮哪些挑戰?

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

我們之前做過一些調研和客戶訪談。就現在2020年來說,絕大多數金融機構都展現出了對Kubernetes、容器等技術的極大興趣,有不少機構也已經在一些非關鍵的業務、或開發測試環境搭建了開源或商業版的叢集。驅動力很簡單,金融機構非常希望這一整套新的傳遞模式幫助到業務飛速疊代。然而對比落差非常明顯的是,真正敢于在核心生産環境落地雲原生架構的,又少之又少。因為金融業務創新的前提,是要保障穩妥。

我們團隊在服務螞蟻内部業務、外部金融機構的過程中,總結了以上這幾個方面,事實上這六大方面也是我們内部SRE不斷挑戰的幾點。我們在今天以及未來的分享中,會逐漸總結深化應對這些挑戰的産品思路。

K8S體系下的應用變更與釋出管控

我們今天分享的一個核心内容,就是我們如何在産品層面做應用變更的風險保障的。并圍繞此話題向大家介紹變更“三闆斧”的背景、K8S原生部署能力、我們産品圍繞變更需求做的擴充并向大家介紹我們在開源方面的規劃。

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

需求背景:變更“三闆斧”

所謂“三闆斧”就是可灰階、可監控、可應急。這是螞蟻内部運維的一條紅線準則,所有的變更,都必須要遵從這個規則,即使再細小的變更,再嚴密的測試,也不能忽略這條規則。為了滿足這個需求,我們在PaaS産品層設計了各種各樣的精細化釋出政策,比如分組釋出、beta釋出,灰階釋出,藍綠釋出等。這些釋出政策跟我們在做傳統運維時用的手段是非常相似的,但很多使用容器的使用者認為在k8s裡實作會非常的困難。

有些時候,由于對業務連續性的極高要求,也很難接受原生 K8S 模型标準化模式,比如原生 deployment 做灰階或者金絲雀釋出時,預設情況下在Pod變更和流量治理層面的管控還稍顯不足,無法完全做到無損釋出或按需過程管控。是以,我們在PaaS産品層面做了定制,在Kubernetes層面做了自定義資源的擴充,目的是能夠在雲原生的場景下,依然對整個釋出過程實作精細化管控,使得大規模叢集釋出、灰階、復原時更加優雅,符合技術風險三闆斧原則。 

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

Kubernetes原生釋出能力

我們先來回顧一下K8S的原生Deployment對象,及其背後的ReplicaSet,其實已經是在最近好幾個大版本中已經逐漸的穩定了。 簡單的來說,最常見的K8S釋出場景,我們會通過Deployment的對象,聲明出我希望的釋出模式以及Pod Spec定義。在運作時,會有ReplicaSet對象來管理Pod數量的預期,預設情況下會提供滾動釋出或重建釋出能力。 

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

這幅圖的下半部分,是圍繞Deployment作滾動釋出時的示意圖,這裡不再做過多的展開,它的本質根據使用者根據我們的運維需求設定好一定的步長,建立新的Pod,銷毀舊的Pod,是以能做到整個應用版本的變更和釋出過程中,都能有對應的容器對外提供服務。 對大部分場景來說,它是夠用的,而且整個過程也是非常好的了解,事實上在K8S體系,大家除了Pod/Node,看的最多的就是Deployment了。

CafeDeployment:感覺底層拓撲和領域模型

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

回顧完Deployment,我們可以再給大家看一下我們根據實際需求作的CRD擴充,CAFEDeployment。CAFE是我們SOFAStack PaaS産品線的名稱,本文的最後會作一些介紹。

CafeDeployment有一個很重要的能力,就是能夠感覺到底層拓撲,這個拓撲是什麼意思呢?能夠知道我想把我的Pod釋出到哪裡,哪邊的Node,不隻是基于親和性的規則作綁定,而是真正能把高可用、容災、以及部署政策等場景息息相關的資訊,帶到整個圍繞釋出的領域模型中。對此,我們提出了一個叫部署單元的領域模型,他是一個邏輯概念,在yaml中簡單的叫做Cell。在實際使用中,Cell的背後,可以是不同的AZ不同的實體機房,不同的機架,一切都是圍繞着不同級别的高可用拓撲。

CafeDeployment:精細化分組釋出擴容

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

感覺到了底層拓撲,我們再看一下CafeD的典型釋出過程。這也是後面會通過産品控制台和指令行來示範的内容。這幅圖所展現的過程,是一個精細化的分組釋出,目的是能夠讓容器執行個體層面的變更,做到足夠的可控和灰階。每一個階段都能暫停、驗證、繼續或復原。

以圖上這個例子進行說明,我們的目标是釋出或變更10個Pod,且需要讓這10個Pod能夠均勻分布在兩個可用區,確定在應用層面是高可用的。同時,在釋出的過程,我們是需要引入分組釋出的概念,即每個機房都要先僅僅釋出一個執行個體,暫停驗證之後,再進行下一組的釋出。于是第0組,就變成兩邊各1個執行個體,第1組各兩個,第2組則是剩下的2個。在實際的生産環境中,圍繞容器大規模變更會配合業務監控及更多元度的觀察,確定每一步都是符合預期、驗證通過的。這樣在應用執行個體層面的精細化管控,為運維提供了能夠及時刹車復原的機會,是線上應用釋出的一個重要的保險繩。

CafeDeployment:優雅摘流無損釋出

講完整個精細化的釋出,我們再講一個精細化的摘流。無損釋出需要確定南北和東西向的網絡流量都能被優雅摘除,確定在容器停機、重新開機、縮容的時候能夠對線上業務無感。

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

這張圖展示了一個Pod作變更釋出時的控制流程規範。時序圖中包括了Pod以及其相關聯的各元件控制器,着重是和網絡相關的如Service Controller、LoadBalancer Controller作配合,進行切流、流量回複檢查等操作以實作無損釋出。。

在傳統經典運維場景基于指令式的運維習慣下,我們可以通過依次執行指令每個元件進行原子操作,確定入口流量、應用間流量都能完全摘除後,再執行實際的變更操作。而在雲原生K8S場景下,這些複雜的操作都留給了平台,運維人員隻需作簡單的聲明即可。我們在部署時把應用所關聯的流量元件(不限于Service loadbalancer/ RPC/ DNS...) 都透傳到CafeDeployment,添加對應的“finalizer”,并通過ReadinessGate來做Pod是否可以承載流量的辨別。 

以原地更新控制器InPlaceSet控制下的Pod為例,在做指定Pod更新時,會設定ReadinessGate=false,相關聯的元件感覺到變化後,逐個登出對應的IP,觸發實際摘流動作。在等待相關Finalizer都被摘除之後,進行更新操作。待新版本部署成功後,設定ReadinessGate=true,在依次觸發各關聯元件的實際流量挂在動作。待檢測到finalizer和實際CafeDeployment中聲明的流量類型全部一緻後,目前Pod才算釋出完成。

開源版本介紹:OpenKruise - UnitedDeployment

我們再回到PPT的一個講解,其實剛剛說的CafeDeployment,它在我們整個CAFED的一個商業化的産品,事實上在整個商業闆的同時,我們也在做一些社群的開源,而在這個裡面我想介紹一下OpenKruise項目,OpenKruise源于整個阿裡巴巴經濟體的大規模雲原生運維實踐,我們把許多基于K8S體系下的自動化運維運維操作通過K8S标準擴充的方式開源出來,對原生Workload無法滿足的能力作了強有力的補充,解決應用的自動化,包括,部署,更新,彈性擴縮容,Qos調節,健康檢查,遷移修複等場景問題。

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

目前OpenKruise項目提供了一套Controller元件,其中的UnitedDeployment 可以了解為CafeDeployment的開源版本。除了基本的副本保持和釋出能力,他還包含了CafeDeployment的主要功能之一,多部署單元的Pod釋出能力。 同時,由于UnitedDeployment是基于多種類型的workload(目前支援社群的StatefulSet和OpenKruise AdvancedStatefulSet)實作對pod的管理,是以它還能保留相應Workload的特性。 

UnitedDeployment 的核心貢獻者吳珂(昊天) (Github:wu8685) 來自于SOFAStack CAFE 團隊,主導了整個CafeDeployment的設計與開發。目前我們正在努力把更多能力在經過大規模驗證之後,通過标準化的方式整合進開源版本中,逐漸減少兩個版本的差異,使之趨于統一。

展望與規劃

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

講到這裡,因為時間關系,圍繞一些細節的技術實作就先分享到這裡了。回顧一下前面關于CafeDeployment關于整個釋出政策的内容介紹,我們産品設計的一個關鍵價值主張就是,能夠為應用和業務在擁抱新興技術架構的時候,提供一個穩妥演進的能力。無論是虛拟機為代表的經典運維體系,還是規模化容器部署的雲原生架構,都需要精細化的技術風險管控。同時,在宏觀上,又能往最先進的架構上演進。

實踐參考:某網際網路銀行容器應用傳遞演進路線

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

以某個網際網路銀行的容器化演進路線為例。在成立之初,就确定了以雲計算基礎設施之上建構微服務分布式體系。但從傳遞模式上看,一開始采用的還是基于經典虛拟機的PaaS管控模式,從2014年到2017年,業務都是通過Buildpack把應用包釋出到虛拟機上。這種運維模式雖然持續了三年,但是我們在這個過程中幫助完成了同城雙活、兩地三中心、到異地多活單元化的架構更新。

在2018年,随着Kubernetes的逐漸成熟,我們在底層基于實體機和k8s建構了底盤,同時,用容器模拟VM,完成了整個基礎設施的容器化。但于此同時,業務并不感覺,我們通過實際在底層K8S之上的Pod,以“富容器”的方式為上層應用提供服務。而從2019年到2020年,随着業務的發展,對于運維效率、擴充性、可遷移性、精細化管控的要求更是驅使着基礎設施往更加雲原生的運維體系演進,并逐漸落地Service Mesh、Serverless、單元化聯邦叢集管控等能力。

雲原生單元化異地多活彈性架構

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

我們正在通過産品化、商業化的方式,把這些年來積累的能力開放出來,希望能夠支援到更多金融機構也能夠在網際網路金融業務場景下快速複制雲原生的架構能力并為業務創造價值。

大家可能在很多管道了解到螞蟻的單元化架構、異地多活的彈性和容災能力。這裡我給到大家一張圖,是我們目前在建設,且馬上在幾個月内在一家大型銀行作解決方案落地的架構抽象。在PaaS層面,我們在K8S上建設一層聯邦能力,我們希望每一個機房都有獨立的K8S群,因為一個K8S叢集直接進行跨機房、跨地域部署是不可行的,無法滿足容災需求。進而通過多雲聯邦的管控能力,這同樣需要我們PaaS層産品針對Kubernetes做一些擴充,定義邏輯單元,定義聯邦層資源等等,最終達成多機房多地域多叢集的單元化架構。結合之前分享中我們提到的,CafeDeployment、ReleasePipeline,還有一些Fedearation層的聯邦對象,我們做了大量擴充,最終目的是在這些複雜的場景中為業務提供統一的釋出管控和容災應急能力。

SOFAStack CAFE 雲應用引擎

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

說到這裡,終于可以解釋下前面提了很多的CAFE是什麼意思了。CAFE, Cloud Application Fabric Engine 雲應用引擎,是螞蟻金服SOFAStack 雲原生應用PaaS平台的名稱,不僅具備Kubernetes标準化的雲原生能力,更在上層把經過生産檢驗的應用管理、釋出部署、運維編排、監控分析、容災應急等金融級運維管控能力開放了出來。同時,與SOFAStack 中間件、服務網格ServiceMesh、阿裡雲容器服務ACK 做了深度內建。

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

CAFE提供的關鍵差異化能力,是為應用生命周期管理提供具有技術風險防控保障(包括變更管控,容災應急能力),并随之提供可演進的單元化混合雲能力。是金融場景下落地分布式架構,雲原生架構,混合雲架構的關鍵底盤。

SOFAStack 金融分布式架構

含ppt下載下傳丨雲原生應用PaaS平台的建設實踐金融場景雲原生落地面臨挑戰K8S體系下的應用變更與釋出管控展望與規劃

最後一頁,其實才是今天真正的主題。今天所介紹的CAFE,是 SOFAStack金融分布式架構産品中的一部分。目前SOFAStack已經在阿裡雲上商業化釋出了,大家可以來申請試用,并與我們作進一步的交流。大家可以通過搜尋引擎、本文提供的産品連結、阿裡雲官網了解更多。

  PPT連結:

https://files.alicdn.com/tpsservice/a921197711869c4db7d9060b831df999.pdf