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

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

編輯: Rancher Labsdocker

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

從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公衆號中閱讀更多大會演講實錄的文章。

相關文章
相關標籤/搜索