中國人壽張青南:中國人壽如何基於容器構建PaaS平臺

口述/作者:
張青南 中國人壽研發中心高級架構師

編輯:
Rancher Labs

中國人壽研發中心高級架構師 張青南

從2017年起,中國人壽正式開始利用容器技術搭建PaaS平臺“稻客雲”,結合持續集成/持續交付技術,實現了研發全流程自動化及對應用容器的全面管理,至2019年,“稻客雲”已支持中國人壽15個關鍵系統的生產運行,管理應用容器4800多個。容器技術的應用促進了中國人壽整個研發流程的優化和可管控,軟件的迭代週期大大縮短,並且以容器部署的方式承載了應用,實現彈性伸縮,應用快速構建部署。本文將介紹中國人壽基於容器構建PaaS平臺的實踐。

2017年初,中國人壽容器雲建設開始啓動,6月完成了研發測試雲和生產雲的搭建。搭建完成後,開始大面積推廣研發測試雲,生產雲依然處在試運行階段。2017年年底,我們在研發環境上個遷移了54個系統,幾乎所有Java類系統都在雲上進行開發和測試。

2018年6月,生產雲上線了第一個真正意義上的關鍵業務系統——大健康平臺,一個完全基於雲原生開發的系統。其後,我們陸續在生產雲上線了其他的關鍵業務系統。2019年初,部分中國人壽的分公司開始使用中國人壽PaaS平臺。

截至目前,中國人壽有174臺服務器,絕大部分是中高端的刀片機,託管了600多個微服務,運行了4000多個容器,有15個關鍵業務系統在生產雲上運行。中國人壽新一代核心業務系統中的保全平臺已經完全上雲,綜合查詢、批作業等業務模塊也在7月份上線到生產雲。另外,中國人壽麪向客戶的壽險APP和麪向營銷員的E店系統的部分微服務也運行在雲上。同時,中國人壽的統一用戶系統也運行在雲上。

過去兩年多的時間裏,中國人壽PaaS雲一直穩定運行,主要是因爲Rancher比較穩定,且我們在部署和運維上做了很多穩定性相關的保障。

本文的內容分爲三部分,一是中國人壽爲什麼要建設PaaS平臺,二是我們是怎麼建設PaaS平臺,最後是我們如何利用PaaS平臺。

爲何建設PaaS平臺?

中國人壽建設PaaS平臺的目標很簡單,就是一句話“爲了更好地使用資源”。大家都應該知道,字越少,事兒越大。一句話的目標聽來寬泛,我們需要分解它,以便於更好地理解。

首先,什麼是資源?我們覺得以下三類內容是我們需要考慮的:一是“環境”,程序需要運行起來,就需要使用CPU、內存、磁盤操作系統,這些程序運行起來的需要的最基本的資源就是環境;光有環境你的程序可能還是無法運行,大部分系統的運行還需要依賴中間件,比如web中間件、數據庫、緩存服務等,這些是你需要的“技術依賴”;有了這些,你的程序可以運行起來了,但不一定能處理業務。比如我們開發一個出單服務,這可能需要依賴保單服務、支付服務,這些是你的“業務依賴”。

上述三個就是我們需要解決的資源問題,一是環境資源,二是技術依賴,三是業務依賴。

理解了什麼是資源,我們再去看什麼是“更好地使用”。我們認爲它包括兩個方面的內容,一是對人來說,能夠更便利地使用資源,最好能達到像使用水電一樣,想用的時候就打開,想用多少就用多少,用完了就關上。二是對應用來說,能更有效地利用資源,以達到節約資源和降低成本的目的。過去需要花10份的資源才能做成的事情,現在用5份資源就能完成。

用一句話總結中國人壽的PaaS平臺,就是:基於“容器技術”和“自動化技術”爲“人”和“應用”提供服務,解決“更好地使用資源”問題的“雲平臺”。

首先,這句話裏包含了兩大關鍵技術:“容器技術”和“自動化技術”。

我們先來說說以Docker爲代表的容器技術。爲什麼中國人壽要用Docker容器技術搭建PaaS平臺,而非使用傳統的虛擬化技術呢?

在這個項目啓動之前,中國人壽已經大量地使用基於VMware的虛擬化技術了。那麼,在搭建PaaS平臺的時候,爲什麼我們不用VMware搭PaaS,而是用容器來進行搭建呢?主要有兩個原因。一是容器的“輕”,這個“輕”體現在各個方面。舉個例子,容器是基於進程的資源管理,所有運行的容器共享一個宿主機上的資源,它是搶佔式的。虛擬機像是切蛋糕,你把資源分配給它,無論它是否使用,它始終都會佔用這個資源,其他人無法使用。容器要比虛機模式節省非常多的資源,我們在後面會用一組數據說明這個問題。

第二個原因也非常重要:容器是以應用爲中心的,容器一旦啓用,啓動的是一個應用;而虛機是以環境爲中心的 ,當你啓動虛機的時候,它爲你提供的是一個操作系統。二者之間區別很大。中國人壽PaaS平臺的建設以應用爲中心。誠然PaaS譯爲Platform as a Service,但我一直將它當作是APP as a Service去考慮這一問題。

中國人壽使用Rancher進行容器調度,目前用的是Rancher 1.6版本。2017年我們開始搭建中國人壽PaaS雲平臺的時候,Rancher還是1.0的版本。

我們選擇Rancher主要有三方面的原因:

第一,Rancher足夠簡單,這個非常重要,Rancher的概念模型沿用的是Swarm的概念,上面是應用棧,底下是一組Service即微服務,這個概念與中國人壽“以應用爲中心”的概念非常吻合,拿來即用,我們很喜歡這個概念。

第二,Rancher功能足夠,不復雜,但足夠。作爲一個金融企業的IT部門,我們不需要那些花裏胡哨的、沒用的功能,Rancher產品本身使用簡單,但提供的功能又能滿足我們的需求,這樣很好。

第三個原因也非常關鍵,就是穩定,我們從Rancher 1.0版本一直使用到現在的1.6版本。在Rancher1.5之後,Rancher基本上沒有過多功能上的變化,一直在完善功能和應用性,後面的幾個版本都非常穩定,我們從1.4版本開始上生產雲,現在用的是1.6的版本。

說完了容器技術,接下來講第二個關鍵技術,以Jenkins爲中心的自動化技術。

中國人壽的自動化技術主要用於持續集成和持續交付,我們重點談一下持續集成。

我們認爲,容器技術使持續集成技術格外強大。在容器技術之前,持續集成指的是,當代碼發生變化,觸發Jenkins上的一個Job,將程序編譯打包後,發佈到一個固定環境的固定中間件上,讓它跑起來,你所能做的就是能讓代碼的變動觸發程序的變化。而有了容器技術之後,你就能做到當環境變化後,通過觸發持續集成搭建新的環境;當中間件依賴變化後,通過觸發持續集成構建新的中間件;當業務應用架構變化後,例如從一個應用變成了十個應用,還是可以通過觸發持續集成拉起一套全新的應用體系。這點非常關鍵,因爲我們剛纔說了,我們想解決的問題是環境依賴、技術依賴和業務依賴,現在通過容器技術,通過docker-compose文件結合持續集成,我們基本可以做到自動獲取任何資源了。這是第一個關鍵點。

第二個關鍵點是持續集成使容器技術在中國人壽這樣的企業廣泛推廣,它大幅降低了技術人員的使用門檻。中國人壽有各種產品、不同的團隊,並不是所有的開發人員都有意願去學習和掌握什麼是PaaS、什麼是Docker、什麼是鏡像、怎樣做部署。但我們又希望所有人都能把容器用起來,那該怎麼做呢?在公司內部推廣的時候,每一個需要對接進來的系統,我們都會讓PaaS團隊爲這個系統實現持續集成。持續集成將代碼編譯、構建鏡像、鏡像更新、應用商店等等全部自動化。如此一來,對研發項目組、對開發人員而言,他的工作沒有發生任何大變化,只需更新代碼即可,PaaS的使用均由持續集成自動化執行。

我們的服務對象包括兩類,一類是“人”,一類是“應用”。我們希望爲“人”即項目經理、開發人員、運維人員提供研發運營模式上的革新,對“應用”提供微服務架構、無服務器架構等架構模式上的革新。

中國人壽PaaS平臺旨在解決“是否更好地使用資源”的問題。我們如何判斷是否更好地使用資源呢?我們可以將它量化爲三項,即:是不是省時了、是不是省事了、是不是省錢了。

中國人壽有一組數據,它並非整個平臺的使用成果,而是中國人壽的一個分公司在平臺遷移前後的數據成果,我們將過去部署在虛機上的服務器和部署在雲上進行了前後對比。

上圖是平臺的資源使用情況和效率提升情況。資源之所以節省,是因爲容器基於爭搶資源的模式,能極大避免虛機時代資源佔用浪費的問題。效率的提升,則是由於持續集成極大地提升了研發及資源獲取的效率。在中國人壽,我們申請設備需要走流程進行審批,這個過程會花費大量的時間,現在可以通過持續集成實現“自管理”,開發人員在需要資源時,通過觸發持續集成自動獲取資源。

如何建設PaaS平臺?

上圖是我們在2017年立項時畫的,這張簡單的圖指導了中國人壽兩年左右的PaaS平臺建設工作。

我們認爲,中國人壽需要有一款自己的PaaS產品,我們要基於這個產品搭建兩朵雲,一朵是開發測試雲,一朵是生產雲。兩朵雲有不一樣的定位。開發測試雲解決的是資源利用率、管理成本和研發效率等問題,生產雲主要解決微服務託管、快速部署、交付一致性、彈性伸縮等問題。

兩朵雲對應用的要求也不一樣。對於開發測試雲而言,所有你能搬上開發測試雲的應用,我都能幫你做容器化和自動化,你享受開發測試環境帶來的種種優點即可。但對於生產雲,我們有更高的要求,生產雲的應用必須是雲原生的應用,必須做好微服務化改造,技術人員自身還必須知道如何利用雲上的優點。所以兩朵雲對應用的要求是不一樣的。

我們在開發測試雲上做了持續集成,通過持續交付打通兩朵雲,兩種雲結合爲DevOps夯實了基礎。

上圖是我們對產品的定位,主要關注四個部分:第一部分是通過Rancher進行容器管理;第二部分通過Harbor進行鏡像管理;第三部分是通過Git進行應用商店管理;最後一部分是是基於Jenkins搭建CI/CD,開發運維一體化。

這四部分明確之後,我們通過中國人壽的稻客雲門戶集中管理底層雲生態,再通過稻客雲門戶對接用戶管理,統一權限、統一用戶,進行界面上的集成,讓用戶在一個界面上完成所有事情,以及實現監控、日誌等功能。

除此之外,稻客雲門戶還可以實現兩個比較有意思的功能,一是多租戶,一是快速部署。Rancher 1.6版本里沒有基於用戶層面的多租戶隔離,它基於環境進行隔離,所以如果一個環境上很多用戶,上層運行的應用能互相看到,和我們理解的多租戶隔離有所區別,所以中國人壽自行開發了多租戶隔離功能。

快速部署是一個將發佈流程極簡化的功能,它屏蔽了持續集成以及PaaS、Docker的過程。我們先前有個情況,分公司的同事希望運行自己的應用,但又不想關注PaaS、Docker、容器包括持續集成等技術。爲了解決這個問題,我們開發了一個界面,讓分公司選好應用程序,點擊上傳,再點擊啓動,我們在容器上運行應用程序,再將容器IP返回去,就完成一次快速部署。

中國人壽在北京和上海各有一個數據中心,在上海和北京各部署了一套生產雲,開發測試雲只部署在北京。每朵雲的管控節點均爲獨立部署,每個管控節點託管很多個不同的環境。當中有一個關鍵點,即環境的劃分。一個環境裏託管的主機越多,共享的應用就越多,從而規模效益越好,資源利用率也越高。但這樣會使隔離性降低,當系統出現問題時,運維難度將呈幾何級上升。

因此,在開發測試環境中,我們追求儘量擴大規模效益,在開發測試環境劃分了5個大環境,所有機器部署在五個大環境當中,大家混合使用,資源利用率很高。但在生產環境中,我們非常謹慎,一個關鍵系統獨佔一個環境。正如我先前所說的:兩朵雲的定位不同,想解決的問題也是不同的。

如何利用PaaS平臺?

前文曾經提到,中國人壽PaaS平臺的服務對象一類是“人”,一類是“應用”。“人”指的是項目經理、研發人員、運營人員,“應用”指的是微服務框架和無服務架構的支持。

對於項目經理而言,我們希望爲他提供的變革是自服務。過去,項目經理的主要職責是找各種能夠提供資源的對象,獲取開發所需的資源。現在,我們希望對他進行變革,利用PaaS平臺,讓他通過平臺、應用商店、持續集成實現自助服務,提升項目經理獲取資源的效率。

對於開發人員而言,我們希望達到自動化。剛纔前面幾位嘉賓在分享的時候,提到了開發人員專注於業務邏輯開發。我們認爲開發人員要做的最基本的事情是開發代碼、提交代碼、測試、查看,開發人員只需要做這幾件事情,剩下的活動比如編譯、構建、部署、測試等完全通過持續集成、自動化腳本來實現。

我們通過持續交付,爲運維人員提供軟件交付上的變革。我們在開發環境專門找了一臺開發交付機部署Jenkins,這臺機器打通了跳板區的鏡像倉庫,爲每一個在雲上提交的項目實現交付任務。交付任務完成後,我們將Jenkins上的用戶權限提交給應用的應用經理及應用團隊。當應用團隊需要交付時,先將代碼提交到交付機器上,再在Jenkins上執行交付任務,交付的Jenkins會抓取代碼,打包編譯、構建鏡像,將發佈鏡像推到跳板區的鏡像倉庫,再由生產的運維同事在應用商店裏選取應用,點擊部署,一鍵部署後將整個應用從Rancher上拽起來。

文初提到中國人壽PaaS雲平臺上線的第一個業務應用——大健康平臺,擁有45個微服務,運行200多個應用容器。因爲大健康平臺是第一個上線的業務應用,我們對它進行了測試,從開始交付到運維人員現場部署一共花了8分鐘。假如我們手工按傳統的方式去部署,200多個應用預計要花2周的時間。

中國人壽PaaS平臺的微服務主要有三個場景。第一個場景是應用完全微服務化,全部應用均跑在容器上。我們爲這個應用拽取兩個應用棧,讓它能實現藍綠髮布與灰度部署,這兩個棧是一樣的,棧裏面的微服務通過服務名進行通信,這一功能由Rancher實現。對外提供服務則是在Rancher界面上配置一個內部代理,將內部代理固定到主機,在PaaS環境外配置一個外部代理,指向兩個棧的內部代理。

第二個場景就是部分應用容器化,一個應用在進行微服務改造後,一半跑在傳統環境上,另外一半跑在雲上。這種情況建議引入兩個關鍵組件,應用網關和服務發展中心。

裏面有非常關鍵的一點,我們使用的是Rancher 1.6提供的扁平網絡模式。在這種模式下,每個容器均拿到一個真實的IP,在它們的IP及PaaS環境外部,公司其他設施IP互通。這樣設置之後,假設應用拆分出三個微服務,均部署在雲上,三個微服務都註冊到服務註冊發現中心,微服務和過去的傳統應用之間的通信直接通過IP,通過服務註冊發現中心即可直接互通。雲外面的應用需要訪問微服務或者是傳統應用,通過上面的應用網關即可訪問。

最後一種模式非常簡單,它可能不是微服務,就只是一個普通應用,需求是要在雲上進行擴容。例如,我有一個業務幾月幾日開始,將產生大量訪問,我需要擴容,怎麼辦?這是最簡單的一個場景,我們把應用容器化之後,作爲服務在PaaS進行部署,上層部署一個內部代理,將外部的負載指向兩邊即可。

編者按:
本文是根據中國人壽張青南在Rancher於2019年6月20日在北京舉辦的第三屆企業容器創新大會(Enterprise Container Innovation Conference,簡稱ECIC)上的演講整理而成。本屆ECIC規模宏大,全天共設置了17場主題演講,吸引了近千名容器技術愛好者參加,超過10000名觀衆在線觀看。您可在Rancher公衆號中閱讀更多大會演講實錄的文章。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章