陳菲琪 黃進(jìn) 王景斌
摘要:在數(shù)字時(shí)代蓬勃發(fā)展下,亟須一種更加快速、敏捷的基礎(chǔ)設(shè)施解決方案,以支撐頂層的數(shù)字經(jīng)濟(jì)。Kubernetes是一種開源管理云平臺(tái)中多個(gè)主機(jī)上的容器化應(yīng)用,是分布式集群管理系統(tǒng)和私有云、公有云的事實(shí)標(biāo)準(zhǔn)。江蘇蘇寧銀行按照務(wù)實(shí)、高效、架構(gòu)先行等原則,以Kubernetes為容器編排器,構(gòu)建新一代的容器云平臺(tái),首先探索并解決資源使用效率問題,其次利用Kubernetes的容器編排、彈性伸縮、容器漂移和故障自愈能力,簡化應(yīng)用部署方式、周期及難度。未來將利用容器快速彈性伸縮能力及云原生技術(shù)自動(dòng)化能力,不斷提升運(yùn)維效率和保障能力。
關(guān)鍵詞:云原生;容器;編排;彈性伸縮
中圖法分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A
Research on construction of financial-grade cloud-native container cloud
-Taking Jiangsu Suning Bank as an example
CHEN Feiqi,HUANGJin,WANGJingbin
(Jiangsu Suning Bank Co.,Ltd,Nanjing 210019,China)
Abstract:With the vigorous development of the digital age,a faster and more agile infrastructure solution is urgently needed to support the top-level digital economy.Kubernetes is an open source management cloud platform for containerized applications on multiple hosts.It is the de facto standard for distributed cluster management systems and private and public clouds.Jiangsu Suning Bank follows the principles of pragmatism,efficiency,and architecture first,and uses Kubernetes as the container orchestrator to build a new generation of container cloud platform.First,it explores and solves the problem of resource utilization efficiency, and then uses Kubernetes' container orchestration, elastic scaling, container drift. The fault self-healing capability simplifies the application deployment method,cycle and difficulty.In the future,the rapid elastic scaling capabilities of containers and the automation capabilities of cloud-native technologies will be used to continuously improve operation and maintenance efficiency and guarantee capabilities.
Key words: cloud primitiveness, containers, arrangement, elastic expansion
1 引言
在銀行業(yè)科技金融的創(chuàng)新過程中,計(jì)算的根基以及應(yīng)用開發(fā)與運(yùn)營的方式都發(fā)生了翻天覆地的變化,需要操作系統(tǒng)、平臺(tái)軟件、容器和云原生等方面做出適配性改造,以適應(yīng)快速、敏捷、迭代開發(fā)的文化和流程等。特別是隨著數(shù)據(jù)要素成為一種新的生產(chǎn)資料,對(duì)現(xiàn)有的金融基礎(chǔ)設(shè)施提出了更高的要求,需要一種更加靈活便捷的基礎(chǔ)設(shè)施解決方案,以為頂層的數(shù)字銀行建設(shè)打好基礎(chǔ)[1]。數(shù)字化基建作為數(shù)字銀行建設(shè)基礎(chǔ),云平臺(tái)是數(shù)字化基建的關(guān)鍵,需夯實(shí)底層云架構(gòu)后才能更高效和更穩(wěn)定地進(jìn)行數(shù)字銀行轉(zhuǎn)型。通過數(shù)字化,連通客戶社交生態(tài)、連接內(nèi)部經(jīng)營要素;構(gòu)建數(shù)字化智能,打造數(shù)字化轉(zhuǎn)型的新引擎,管理數(shù)據(jù)資產(chǎn);培育數(shù)字化轉(zhuǎn)型的新源泉,打造數(shù)字為先的企業(yè)文化,培養(yǎng)復(fù)合型、知識(shí)型和創(chuàng)新型數(shù)字化人才,打造專業(yè)的數(shù)據(jù)分析師人才隊(duì)伍;夯實(shí)數(shù)字化基建,打造數(shù)字化轉(zhuǎn)型的新底座,構(gòu)建適應(yīng)業(yè)務(wù)發(fā)展的共享能力平臺(tái),采用敏捷迭代的微服務(wù)架構(gòu)。
容器解決了應(yīng)用發(fā)布的標(biāo)準(zhǔn)問題,是用于輕松部署和隔離應(yīng)用的關(guān)鍵技術(shù)之一。通過命名空間提供輕便、有效的應(yīng)用隔離,并將其運(yùn)行所需的所有組件打包在一起,有效避免了依賴底層宿主機(jī)操作系統(tǒng)關(guān)鍵組件的應(yīng)用程序之間可能的沖突。使用容器技術(shù)可以實(shí)現(xiàn)“一次構(gòu)建,到處運(yùn)行”效果;可以確保版本在不同環(huán)境中實(shí)現(xiàn)一致性,從而方便了應(yīng)用的移植,消除了各種難以修復(fù)的沖突。容器中運(yùn)行的所有服務(wù),隔離運(yùn)行在物理服務(wù)器(或者虛擬機(jī))上的共用操作系統(tǒng)中。實(shí)踐表明,容器消耗極少的系統(tǒng)資源(如內(nèi)存),基本上不會(huì)對(duì)應(yīng)用性能產(chǎn)生影響。
Kubernetes 是一種開源的管理云平臺(tái)中多個(gè)主機(jī)上的容器化應(yīng)用,是一個(gè)分布式操作系統(tǒng),是當(dāng)前分布式集群管理系統(tǒng)的事實(shí)標(biāo)準(zhǔn)。憑借優(yōu)秀的開放性、可擴(kuò)展性以及活躍開發(fā)者社區(qū),其在容器編排之戰(zhàn)中脫穎而出,目前已經(jīng)被廣泛用于各行各業(yè)的容器自動(dòng)部署、擴(kuò)展和管理。Kubernetes 屏蔽了 IaaS 層基礎(chǔ)架構(gòu)的差異并憑借優(yōu)良的可移植性,幫助應(yīng)用一致地運(yùn)行在包括數(shù)據(jù)中心、云、邊緣計(jì)算等在內(nèi)的不同環(huán)境。通過 Kubernetes 結(jié)合自身業(yè)務(wù)特征來設(shè)計(jì)自身云架構(gòu),從而更好支持多云、混合云,可以免去用戶被廠商綁定的顧慮。隨著容器技術(shù)逐步標(biāo)準(zhǔn)化,進(jìn)一步促進(jìn)了容器生態(tài)的分工和協(xié)同。江蘇蘇寧銀行在容器應(yīng)用與管理探索實(shí)踐過程中,積累一定經(jīng)驗(yàn)后,新一代的容器云平臺(tái)將 Kubernetes 作為容器編排器。
2 背景
江蘇蘇寧銀行進(jìn)行容器化改造前,針對(duì)業(yè)務(wù)系統(tǒng)架構(gòu)進(jìn)行了充分的梳理,將其分為如下兩類:一類是基于遠(yuǎn)程服務(wù)調(diào)用框架的 Web 應(yīng)用。前端界面表現(xiàn)層使用 HTML,Angular JS,Vue 等前端技術(shù),后端編程采用 Java 技術(shù)棧,業(yè)務(wù)邏輯控制層采用 Spring MVC 或 Spring boot 等開發(fā)框架,數(shù)據(jù)存儲(chǔ)層采用分布式數(shù)據(jù)庫中間件。后端使用 MAVEN 編譯打包,發(fā)布使用基于 Jenkins 自研的 CD 平臺(tái)。此類應(yīng)用特點(diǎn)是前后端分離、跨平臺(tái)、易遷移;另一類是非 Java Web 應(yīng)用的技術(shù)架構(gòu),包括 LAMP,Python 等技術(shù)棧。前端界面表現(xiàn)層采用 HTML,CSS,PHP,Ajax 等技術(shù),業(yè)務(wù)邏輯層使用 PHP MVC 開發(fā)框架—Symfony,數(shù)據(jù)存儲(chǔ)層采用 MySQL MGR 集群技術(shù)。此類應(yīng)用架構(gòu)簡單、穩(wěn)定、部署方便靈活。
隨著業(yè)務(wù)發(fā)展,應(yīng)用系統(tǒng)不斷增多?;谶h(yuǎn)程服務(wù)調(diào)用框架的 Web 應(yīng)用之間的關(guān)系、調(diào)用鏈路越來越復(fù)雜;非 Java Web 的技術(shù)架構(gòu)變得越來越臃腫,運(yùn)行維護(hù)面臨眾多痛點(diǎn):一是環(huán)境部署復(fù)雜。在搭建基礎(chǔ)環(huán)境的過程中,需要部署編譯很多 lib 庫、編譯器、組件包,并且各個(gè)組件的依賴關(guān)系非常復(fù)雜,特別是銀行業(yè)因?yàn)榘踩确矫嬉?,生產(chǎn)環(huán)境與互聯(lián)網(wǎng)物理隔離,安全策略嚴(yán)格,各種基礎(chǔ)庫及依賴包的安裝費(fèi)時(shí)費(fèi)力,部署完成一套系統(tǒng)環(huán)境甚至需要一周時(shí)間之久;二是環(huán)境污染嚴(yán)重,難以二次使用。測(cè)試環(huán)境部署完成,經(jīng)過多次測(cè)試后,各類參數(shù)和配置文件經(jīng)過多人調(diào)整,需要恢復(fù)到初始狀態(tài)部署應(yīng)用測(cè)試時(shí),耗時(shí)費(fèi)力,需要多人參與,有時(shí)需要重新創(chuàng)建虛機(jī),以實(shí)現(xiàn)純凈環(huán)境;三是系統(tǒng)遷移困難。由原先部署在Vmware虛擬機(jī)的業(yè)務(wù)系統(tǒng)遷移到“ OpenStack+Kvm”的云平臺(tái),應(yīng)用遷移煩瑣且容易遺漏配置文件。從底層虛擬化文件層遷移,鏡像格式不同,缺少合適的跨平臺(tái)打包工具,非常復(fù)雜也容易出錯(cuò);四是缺乏快速響應(yīng)能力。整體系統(tǒng)研發(fā)、投產(chǎn)過程中開發(fā)測(cè)試的并行開展度不高,業(yè)務(wù)需求需要快速上線。業(yè)務(wù)系統(tǒng)的線下環(huán)境和線上環(huán)境的配置參數(shù)不統(tǒng)一,導(dǎo)致實(shí)際投產(chǎn)過程的復(fù)雜性提高、報(bào)錯(cuò)率提升;五是彈性擴(kuò)展能力差。系統(tǒng)擁有部分高并發(fā)業(yè)務(wù)場景,業(yè)務(wù)應(yīng)用需要快速彈性伸縮來滿足峰時(shí)需求。單體式應(yīng)用系統(tǒng)的復(fù)雜性過高,系統(tǒng)拓展性不足,系統(tǒng)維護(hù)性難度加大。
3 建設(shè)原則
結(jié)合江蘇蘇寧銀行實(shí)際情況,并經(jīng)過長期技術(shù)預(yù)研和多次技術(shù)論證,遵循如下原則構(gòu)建新一代云原生架構(gòu)的基礎(chǔ)平臺(tái):一是務(wù)實(shí)。以解決實(shí)際問題為出發(fā)點(diǎn),不追求“高大上”。將環(huán)境部署過程中碰到的問題一一列出,逐個(gè)討論,不清晰、不明確的需求先擱置;二是穩(wěn)中求進(jìn)。不過度追求極致自動(dòng)化,優(yōu)先保證生產(chǎn)穩(wěn)定安全。選擇有一定先進(jìn)性、技術(shù)活力、能代表未來發(fā)展方向的技術(shù);三是提升效率。減少人工重復(fù)性操作,選擇的技術(shù)和建設(shè)的平臺(tái)與業(yè)務(wù)系統(tǒng)的發(fā)展不是正比關(guān)系,而是業(yè)務(wù)系統(tǒng)的高速發(fā)展,只會(huì)使得系統(tǒng)運(yùn)維工作略有增加;四是符合整體規(guī)劃建設(shè)。將 IT 建設(shè)的整體規(guī)劃作為依據(jù),從方案上考慮容器云建設(shè)的合理性和必要性,使得建設(shè)的平臺(tái)具有先進(jìn)性和可持續(xù)性。
4 建設(shè)階段
在如上原則指導(dǎo)下,將容器云平臺(tái)建設(shè)分為兩個(gè)階段。
第一階段:探索并解決資源使用效率問題。將容器作為微服務(wù)架構(gòu)的運(yùn)行體,Rancher 作為容器編排調(diào)度技術(shù),建設(shè)江蘇蘇寧銀行的容器云平臺(tái)[2]。建設(shè)完成后,推動(dòng)應(yīng)用上云。應(yīng)用上云分為三步—首先,完成容器化改造,通過容器自帶的鏡像構(gòu)建能力將各個(gè)業(yè)務(wù)組件打包,推入自建的鏡像倉庫,以實(shí)現(xiàn)標(biāo)準(zhǔn)化交付。其次,容器環(huán)境構(gòu)建,將改造后的各個(gè)業(yè)務(wù)組件分別獨(dú)立地運(yùn)行在容器中,保證各組件能在容器中正常運(yùn)行,同時(shí)實(shí)現(xiàn)開發(fā)、測(cè)試、生產(chǎn)環(huán)境的代碼和配置的完全一致性管理。最后,通過 Rancher 實(shí)現(xiàn)對(duì)容器的編排。利用容器的標(biāo)準(zhǔn)化交付和隔離特性,實(shí)現(xiàn)了從開發(fā)環(huán)境到生產(chǎn)環(huán)境的快速移植和發(fā)布;利用容器快速啟動(dòng)的優(yōu)勢(shì),實(shí)現(xiàn)業(yè)務(wù)應(yīng)用系統(tǒng)在高峰期的快速彈性擴(kuò)展,從而滿足高并發(fā)的應(yīng)用場景。在應(yīng)用上云的同時(shí),把傳統(tǒng)單體式應(yīng)用、基于 RPC 調(diào)用的應(yīng)用系統(tǒng),使用 Spring Cloud 框架進(jìn)行改造,向著微服務(wù)化架構(gòu)方向演進(jìn)。
第二階段:彈性、敏捷、助力 DevOps 和 AIOps[3]。從傳統(tǒng)構(gòu)建、部署方式向容器化轉(zhuǎn)變完成后,以較低的投入實(shí)現(xiàn)了資源使用效率提升的目標(biāo)。同時(shí),在容器化方面積累了經(jīng)驗(yàn),有了充分的技術(shù)沉淀,具備一定的容器化平臺(tái)建設(shè)和規(guī)劃能力。結(jié)合江蘇蘇寧銀行實(shí)際情況,采用 Kubernetes 代替 Rancher 作為容器編排器,構(gòu)建新一代容器云平臺(tái)。充分利用 Kubernetes 的容器編排、彈性伸縮、容器漂移和故障自愈能力,簡化應(yīng)用部署方式、縮短周期及降低難度。另外,利用 Kubernetes 的容器編排能力與 DevOps 結(jié)合,進(jìn)一步提升研發(fā)運(yùn)維一體化能力,并為后續(xù) AIOps 建設(shè)打下基礎(chǔ)。
5 結(jié)論
江蘇蘇寧銀行采用容器和 Kubernetes 編排調(diào)度技術(shù)自主研發(fā)的容器云平臺(tái),在全行運(yùn)行容器實(shí)例近萬個(gè)、承載全行多套環(huán)境(DEV/SIT1/SIT2)的各類應(yīng)用中間件。根據(jù)不同環(huán)境資源使用需求,自助式創(chuàng)建服務(wù),資源利用率提升4倍以上,服務(wù)器、機(jī)柜成本下降60%;利用容器的快速啟動(dòng)及自動(dòng)部署能力,中間件及各開發(fā)組件部署效率提高90%以上;全面助力業(yè)務(wù)系統(tǒng)微服務(wù)化,實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)從開發(fā)到部署的敏捷、快速迭代開發(fā)。在掌握容器云平臺(tái)建設(shè)的關(guān)鍵技術(shù),并積累一定經(jīng)驗(yàn)后,基于 Kubernetes 編排技術(shù)構(gòu)建的新一代容器云平臺(tái)已經(jīng)在生產(chǎn)環(huán)境上線,承載部分應(yīng)用系統(tǒng)。
江蘇蘇寧銀行歷時(shí)8個(gè)月獨(dú)立開發(fā)完成基于 Docker 和 Rancher 技術(shù)的容器云平臺(tái),以及新一代基于 Docker 和 Kubernetes 的容器云平臺(tái),達(dá)到高并發(fā)業(yè)務(wù)快速彈性伸縮、業(yè)務(wù)開發(fā)測(cè)試快速上線的理想效果。以云原生 DevOps 為理念,打造以服務(wù)為中心的管理模式,屏蔽基礎(chǔ)運(yùn)維架構(gòu),覆蓋從代碼到生產(chǎn)的全生命周期。容器云平臺(tái)架構(gòu)圖如圖1所示。
江蘇蘇寧銀行容器云平臺(tái)實(shí)現(xiàn)基礎(chǔ)設(shè)施云端化、開發(fā)流程敏捷化和應(yīng)用架構(gòu)現(xiàn)代化:一是基礎(chǔ)設(shè)施云端化。穩(wěn)定快速的物理環(huán)境保障,跨越 VMware、私有云的管理,簡化多集群的資源隔離和管理,靈活集群托管,全面加速和優(yōu)化云的管理。具備服務(wù)清理和管控能力,可管理容器服務(wù)的全生命周期,實(shí)現(xiàn)服務(wù)授權(quán)、服務(wù)訪問流量轉(zhuǎn)化、服務(wù)編排、容器調(diào)度、服務(wù)發(fā)現(xiàn)、零宕機(jī)等目標(biāo);二是開發(fā)流程敏捷化。以云原生 DevOps 為理念,持續(xù)性地將高質(zhì)量、具有價(jià)值的應(yīng)用快速推向市場。通過應(yīng)用和服務(wù)編排,一鍵式地部署相互關(guān)聯(lián)的服務(wù),簡化服務(wù)部署流程,快速部署復(fù)雜的服務(wù)[4];三是應(yīng)用架構(gòu)現(xiàn)代化。深度支持SpringCloud微服務(wù)框架,平滑遷移基于 Spring Cloud 的微服務(wù)應(yīng)用,構(gòu)建微服務(wù)架構(gòu)和管理平臺(tái)。以低成本、重安全的方式管理微服務(wù)的開發(fā)和運(yùn)維,使部署、管理和服務(wù)功能交付變得更加簡單。
6 未來規(guī)劃
第一階段,通過自研的金融級(jí)容器云平臺(tái)在測(cè)試環(huán)境長期運(yùn)行,以提升資源使用效率,為完全自主掌控核心技術(shù)積累經(jīng)驗(yàn);第二階段,利用容器快速彈性伸縮能力及云原生技術(shù)自動(dòng)化能力,提升運(yùn)維效率和保障能力。同時(shí),系統(tǒng)微服務(wù)化改造范圍不斷擴(kuò)大,為容器云的可持續(xù)性演進(jìn)打下堅(jiān)實(shí)基礎(chǔ),為江蘇蘇寧銀行全面實(shí)現(xiàn)云原生技術(shù)架構(gòu)下的 DevOps 乃至 AIOps 奠定堅(jiān)實(shí)基礎(chǔ)[5]。
隨著云原生技術(shù)的發(fā)展和應(yīng)用,江蘇蘇寧銀行將持續(xù)投入研發(fā)基于云原生基礎(chǔ)架構(gòu)的容器云平臺(tái),實(shí)現(xiàn)容器化封裝常用的大數(shù)據(jù)套件和中間件組件、人工智能平臺(tái),滿足業(yè)務(wù)系統(tǒng)全面云原生下金融場景特定需求。
參考文獻(xiàn):
[1]羅勇.云銀行的內(nèi)在邏輯與核心技術(shù)[ J].中國金融,2020(21):49?51.
[2]樹岸,彭鑫,趙文耘.基于容器技術(shù)的云計(jì)算資源自適應(yīng)管理方法[J].計(jì)算機(jī)科學(xué),2017,44(7):120?127.
[3]劉思堯,夏緒衛(wèi),華榮錦.基于 Docker 容器的云平臺(tái)集群伸縮算法研究[J].科技通報(bào),2018,34(7):150?153.
[4]楊鵬,馬志程,彭博,等.集成 Docker 容器的 OpenStack 云平臺(tái)性能研究[J].計(jì)算機(jī)工程,2017,43(8):26?31.
[5]齊磊,張海峰,張?zhí)祢?,?基于容器技術(shù)的 PaaS 云平臺(tái)方案[J].電信科學(xué),2017,33(4):177?182.
作者簡介:
陳菲琪(1985—),碩士,高級(jí)工程師,研究方向:金融科技、云計(jì)算、數(shù)字銀行。
王景斌(1969—),博士,高級(jí)會(huì)計(jì)師,研究方向:會(huì)計(jì)、風(fēng)險(xiǎn)管理、金融科技(通信作者)。