蚂蚁金服金融级容器引擎实践之路
小螞蟻說:
在金融級分布式架構(gòu)中使用容器,許多企業(yè)的開發(fā)者都面臨許多挑戰(zhàn)。在2018年ATEC螞蟻金服技術(shù)探索大會上,螞蟻金服高級技術(shù)專家盛延敏在演講中分析了容器與云原生技術(shù)的本質(zhì),為容器在分布式架構(gòu)上的使用帶來了實用高效的解決方案。
關(guān)于螞蟻金服科技開放其他的技術(shù)產(chǎn)品,你還可以參考閱讀:
《獨家 | 螞蟻金服TRaaS技術(shù)風(fēng)險防控平臺解密》;
《深度|螞蟻金服分布式金融核心套件:金融核心系統(tǒng)變革助推器》;
《2.0 解析系列 | 一文詳解新一代OceanBase云平臺》……?
關(guān)注“螞蟻金服科技”,了解螞蟻金服更多前沿暖科技!
容器與云原生技術(shù)
云原生技術(shù)由來已久,它包含五部分基礎(chǔ)技術(shù),包括容器(Containers)、服務(wù)網(wǎng)絡(luò)(Service Meshes)、聲明式API(Declarative APIs)、不可變基礎(chǔ)設(shè)施(Immutable Infrastructure)、微服務(wù)(Microservices),以及公共云、混合云、專有云三種能力。
容器(特別是docker)、微服務(wù)大家都比較熟悉,先來簡單解釋一下大家可能比較陌生的服務(wù)網(wǎng)絡(luò)、聲明式API和不可變基礎(chǔ)設(shè)施的作用:
“服務(wù)網(wǎng)絡(luò)”能夠解決諸如跨語言、跨技術(shù)棧等問題;而聲明式API則是目前CNCF等社區(qū)非常推崇的一種理念,比如k8s里面的對象采用了api、kind、version等方式,最終描述了一種期望達到的狀態(tài);至于不可變基礎(chǔ)設(shè)施?這個概念比較難理解,我們知道k8s里面的pod是一個豌豆夾,里面可以放很多容器,每當(dāng)聲明(declare)新spec的時候,系統(tǒng)就會將pod銷毀,產(chǎn)生新的pod對象,這個概念它比較像我們購買iphone,iphone是一個封閉的體系,用戶想換的時候就需要買一個新的,不可變基礎(chǔ)設(shè)施不意味著比較穩(wěn)定。
回顧一下云計算的發(fā)展(如上圖所示),開始的時候大家關(guān)注虛擬化,在虛擬機中安裝軟件和中間件,讓應(yīng)用跑起來。隨著技術(shù)的進步,大家開始思考能不能將基礎(chǔ)架構(gòu)屏蔽,于是創(chuàng)造出以app為中心的理念,使用大規(guī)模發(fā)布的能力、自動化的運維,將中間件和應(yīng)用代碼耦合在一起部署在一個平臺上,上移至PaaS層。
技術(shù)再進步,大家又想到了CaaS,通過docker的鏡像、云原生的統(tǒng)一抽象和標(biāo)準(zhǔn),讓應(yīng)用和基礎(chǔ)組件包含在一起,以鏡像的方式發(fā)布應(yīng)用,大家的視角轉(zhuǎn)移到容器、微服務(wù)體系的融合,“云原生”的時代就此來臨。
金融級分布式架構(gòu)使用容器的挑戰(zhàn)
那么在金融級分布式架構(gòu)下使用容器,我們會面臨什么樣的挑戰(zhàn)?主要有三方面:
第一,已有的基礎(chǔ)設(shè)施,包括資產(chǎn)管理、監(jiān)控體系、運維體系,如何能平滑過渡?
第二,微服務(wù)架構(gòu),包括服務(wù)發(fā)現(xiàn)與尋址、跨語言支持、服務(wù)治理如何落地?
第三,如何讓專有云、公共云及混合云具備彈性伸縮能力?
螞蟻金服的解決方案叫做“CAFE”(Cloud Application Fabric Engine),它是理念以及產(chǎn)品集合,包括“兩個標(biāo)準(zhǔn)”,即云 Provider標(biāo)準(zhǔn)、Open Service Broker API標(biāo)準(zhǔn);“三個平臺”,即“應(yīng)用與容器平臺”(主要關(guān)注容器和應(yīng)用生命周期的管理)、“監(jiān)控分析平臺”(主要關(guān)注logging、trace、metrics以及鏈路、事件等平臺)及“容災(zāi)應(yīng)災(zāi)平臺”(‘三地五中心’就是由它支持);“三個形態(tài)”包括專有云、公共云及混合云;其中構(gòu)建了“N個解決方案”,包括DevOps、容器以及分布式架構(gòu)的解決方案等。
上文提到的三個問題究竟該如何應(yīng)對呢?螞蟻金服提供了從傳統(tǒng)到云原生的橋梁,幫助用戶平滑地過渡基礎(chǔ)設(shè)施;SOFAMesh原生的支持,幫助用戶快速落地微服務(wù)2.0架構(gòu);混合云的架構(gòu),實現(xiàn)彈性能力。
三個應(yīng)對之道
1. 從傳統(tǒng)到云原生的橋梁
從傳統(tǒng)到云原生,大家有很多普遍存在的困惑:比如習(xí)慣了VM(虛擬機)體系該怎么辦?云原生適合我么?能否漸進上云原生?(有些任務(wù)用傳統(tǒng)方式做,有些用云原生,兩邊是不是能互聯(lián)互通?)
為了解決傳統(tǒng)運維體驗的問題,螞蟻金服提供一種方式,不將容器視為單體,而是輕量化的虛機,讓用戶可以登錄、關(guān)機、開機、重啟,這種方式與操作模式無關(guān),用戶可以通過鏡像化發(fā)布,也可以登錄到機器中重新做service的啟停。
熟悉容器技術(shù)的人都知道,如果容器本身的內(nèi)核不支持,整個容器資源都會顯示宿主機的資源,螞蟻有強大的團隊,可以修復(fù)這樣的內(nèi)核問題,另外可以支持單容器操作,讓發(fā)布前后容器IP、ID保持不變,將PV和PVC綁定,創(chuàng)造兼容傳統(tǒng)運維的用戶體驗。做到這一點,需要很多技術(shù)積累。
基于虛擬機的生命周期管理,我們先來復(fù)習(xí)一下原生pod的生命周期管理:一個pod的創(chuàng)建指令被接受了以后,會進入pending(暫停)的狀態(tài),這意味著這個容器、這個pod沒調(diào)度,或者還沒有生成,直到任務(wù)被create(生成)出來后才會進入running(運行)狀態(tài)。如果所有的容器退出了,流程就會進入succeed(成功),中間running和failed可能會反復(fù)。
然而,這個生命周期不能夠完全滿足企業(yè)級需求,因此我們通過升級和定制,定義了如下的CAFE Pod生命周期,通過它我們可以同時支持虛擬機發(fā)布和鏡像發(fā)布;分組、灰度和無損發(fā)布;版本管理,變更自愈(很多開發(fā)者社區(qū)的東西并能拿來即可用,比如我們打造的底盤夯實的能力,這一能力能夠在pod出現(xiàn)問題時及時熔斷兜底);原地升級和重建升級;通過分布式架構(gòu)體系實現(xiàn)同城雙活、異地多活;通過技術(shù)風(fēng)險體系實現(xiàn)etcd在線備份,宕機遷移,高可靠,可運維,可監(jiān)控,可交付等。這一架構(gòu)通過Upgrading支持虛擬機通過鏡像原地替換的方式發(fā)布,本地的存儲都可以保留下來,資源還可以放大,比如2G變4G。
我們還設(shè)計了全新的負載Cafe Application,在主機故障或者停機時自動在新機器上拉起容器提供服務(wù);在升級后(非upgrade容器方式),新pod和原pod的Ip不變;支持按分組配置升級部分容器,并且長時間可以保持該狀態(tài);支持原地升級(inplace)和重建升級(replace);提供類似statefulset的podname,每個容器的名字都是唯一的;每個容器都有單獨的pv,pvc,類似statefulset;在升級前可以加入一些控制,比如摘除流量,注銷注冊中心等;并支持回滾到之前版本。
此外,云原生方式還要求底層具有更強大的日志能力,我們要把所有在系統(tǒng)里面產(chǎn)生的pod的日志進行收集、存儲、投遞。如下是整個日志搜集能力的架構(gòu)圖,這一架構(gòu)復(fù)用了螞蟻中間件團隊積累的強大的技術(shù)實力,包含了兩大核心中間件。
第一是有流式投遞能力的AntQ。還有就是我們基于Elastic search做了深度改造的ZSearch,提供整個日志的存儲和檢索的能力。每一臺機器上會有l(wèi)ogAgent,它會和我們的LogService通信,接受dockerD來的一些event(事件),然后會和docker graph交互,拿到docker實例的文件句柄,源源不斷地把這些文件流輸送給AntQ,AntQ拿到以后,我們可以通過幾種路徑來完成整個日志的輸送,對于最實時的任務(wù)可以直接通過AntQ來投遞到實時的計算引擎;對于準(zhǔn)實時的日志查詢或者鏈路監(jiān)控的需求,我們建立index(索引),讓上層的鏈路、監(jiān)控能拿到這些數(shù)據(jù),做一些鏈路分析和日志查詢。對于非實時的需求,我們可以通過投遞到hdfs完成離線數(shù)據(jù)報表的分析和制作。
2. SOFAMesh原生支持
前面一部分講到如何從傳統(tǒng)的應(yīng)用遷移到所謂的云原生容器的方式,對任何一個公司來說如何使用容器技術(shù)落地微服務(wù)架構(gòu),并且隨著產(chǎn)品的不斷迭代、業(yè)務(wù)需求越來越多,微服務(wù)體系是否可以支持上,支持好,這么大的技術(shù)成本對于中小公司來說是難以為繼的。
有沒有更好的辦法呢?答案就是SOFAMesh,即SOFAStack的中間件,它可以提供全新的微服務(wù)2.0的能力。通過業(yè)務(wù)聚焦,支持多語言、多技術(shù)棧,通過CAFE平臺可以讓業(yè)務(wù)迅速獲得這種能力。
上圖是我們在SOFAMesh上的部署架構(gòu),其控制層面叫SOFAMesh Pilot,數(shù)據(jù)層面叫做MOSN模塊,說白了它就是一個智能網(wǎng)關(guān),所有的信息都通過APP發(fā)給MOSN模塊,做網(wǎng)絡(luò)傳輸;MOSN模塊同時不斷地把metrics, logging等投遞到到日志,監(jiān)控和鏈路分析基礎(chǔ)設(shè)施,以便用戶全方位地掌控微服務(wù)架構(gòu)的狀況。
這套體系加上螞蟻金服沉浸多年的中間件的能力,以及數(shù)據(jù)中心,在金融場景中得到了大規(guī)模驗證。
使用CAFE去打開SOFAMesh有什么好處?最大的好處就是開箱即用。而且它提升了技術(shù)競爭力,整合PaaS能力,統(tǒng)一應(yīng)用管控。舉個簡單例子,如果有一天你的老板說,可不可以對iOS的移動流量來一個5%的線上灰度,現(xiàn)在的微服務(wù)架構(gòu)體系里面是可以做到的,但是侵入性非常大,而SOFAMesh框架可以定規(guī)則,由Pilot下發(fā),上面的MOSN模塊很容易實現(xiàn)。由此可見,SOFAMesh爆發(fā)的能量是非常巨大的。SOFAMesh和CAFE是實現(xiàn)微服務(wù)架構(gòu)的絕佳拍檔。
3. 混合云架構(gòu)支持
最后說一下彈性伸縮混合云。有些公司想上專有云,琢磨著能不能在公共云里面做一部分開發(fā)測試,然后再上專有云,而專有云本身資源有限,在資源有限的情況下能不能自由遷移,彈性伸縮,節(jié)省成本,這都是很多廠商看重的。螞蟻金服近些年在這方面做了很多努力。
螞蟻金服支持混合云架構(gòu),能夠把應(yīng)用的數(shù)據(jù)、鏡像等在多朵云之間同步,在多個云上迅速拉起應(yīng)用,包括任務(wù)調(diào)度等,在專有云、公共云之間自由分配工作負載,達到彈性伸縮的能力。
上圖是我們基于CAFE容器引擎驗證的全棧產(chǎn)品輸出能力,我們的全棧產(chǎn)品的品牌叫做Antstack,包括了金融企業(yè)需要的所有關(guān)鍵組件,大家熟知的OceanBase容器化也在這個平臺里面。Antstack底層通過資源調(diào)度提供計算存儲網(wǎng)絡(luò),再上層提供產(chǎn)品組件,開發(fā)平臺等等,這些產(chǎn)品可以滿足不同金融場景,包括銀行保險場景的解決方案。
最后三句話總結(jié)一下,CAFE為傳統(tǒng)運維平滑遷移到云原生提供了很好的橋梁,為基于SOFAStack、SOFAMesh的微服務(wù)落地提供了絕佳的大規(guī)模運維的平臺,為整個企業(yè)選擇公有云、專有云、混合云架構(gòu)提供了更好靈活性和敏捷性,螞蟻金服還將繼續(xù)將運維部署做穩(wěn)做精,就像精心制作一杯醇正的咖啡(Cafe同音),為大家?guī)砀玫捏w驗。
?
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的蚂蚁金服金融级容器引擎实践之路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flutter在2019年会有怎样的表现
- 下一篇: 寻找 K8s 1.14 Release