歡迎光臨
每天分享高質量文章

容器雲在證券行業的探索與實踐

隨著證券行業的發展,支撐業務的IT系統也在逐漸壯大。為了快速響應業務需求,敏捷交付成為了IT系統建設新的要求。容器技術作為敏捷交付的最佳拍檔,已經深刻影響了持續整合和持續交付,也改變著IT系統的開發、交付和運維。
背景

 

金融市場瞬息萬變,高效的業務支撐能力離不開與時俱進的IT系統。隨著公司業務的發展,IT系統數量在不斷增多,同時每個系統的複雜度也在不斷提高。即便在微服務改造之後,IT系統的開發、交付和運維依舊面臨著以下難題:
開發:
  • 程式碼量不斷增加、協同開發難度加大

  • 多樣化的編譯和執行環境

交付:
  • 更快的交付頻率

  • 按時釋出、按需釋出

運維:
  • 微服務化後帶來的架構複雜度提高

  • 產品整體部署和運維難度增加

這再次印證了軟體工程的世界裡“沒有銀彈”。微服務化解決了IT系統緊耦合、強技術依賴、難維護的問題,但是卻同時帶來了新的問題。在我們看來,這是一個螺旋上升的過程。
隨著容器技術的發展,容器技術與微服務逐漸碰撞出火花,業界也普遍認為容器技術和微服務是“天生一對”。在2017年,容器化微服務成為了我們新的選擇,優化了開發、交付和運維方式和流程,並一直推動著公司敏捷和DevOps的發展。

 

華泰容器雲簡介

 

2017年,隨著容器和容器編排技術的日趨成熟,我們建設了符合實際應用場景的“容器雲平臺”。容器雲平臺採用時下最流行的容器技術Docker和已成行業標準的容器編排工具Kubernetes建設而成,透過構建、服務、流水線、監控、日誌等功能有效承載了微服務、CI/CD、DevOps。
微服務
現在越來越多的金融企業使用微服務架構,以應對快速變化的網際網路金融挑戰。透過微服務改造把應用拆分成很多細小的服務,每個服務專註於單一的功能,服務和服務之間有明確的邊際,使用輕量級的通訊協議進行溝通,實現某個相對單一的功能。微服務的到來降低了巨大單體式應用複雜度、每個服務的開發技術自有選擇、每個服務可獨立擴充套件、每個服務可獨立部署。但使用微服務架構不要低估細粒度分散式應用治理與運維的複雜度。而結合容器技術的微服務則可以給企業帶來更高的資源使用率,更加快捷的迭代變更,更加方便的快速擴容能力。
容器是微服務的最佳載體
透過容器將微服務的執行時標準化,每個容器承載一個服務,然後像搭積木一樣組合起來,讓彼此通訊,從而就能很輕鬆地模擬出複雜的微服務架構。

圖1 容器中的微服務
  1. 容器天然做到了應用之間相互隔離,在保證安全隔離的同時,可以有效提高資源使用率;

  2. 為微服務的快速擴容提供有效的支撐,容器啟動非常快速,秒級實現,透過映象可以快速啟動多個微服務;

  3. 對軟體和其依賴環境的標準化打包,保證了微服務多個副本之間的絕對一致性,使得我們可以方便運維管理更多的微服務;

  4. 容器佔用資源少、部署快,每個微服務應用可以被打包成一個容器映象,每個應用與容器間成一對一關係也使容器有更大優勢,為每個微服務單獨構建映象,透過映象可以獨立釋出一個微服務,不依賴於生產環境基礎結構,這使得從研發到測試、生產能提供一致環境。

     

利用Kubernetes支撐微服務
Kubernetes在支撐容器平臺和微服務的競爭中依然勝出。傳統的應用部署方式是透過外掛或指令碼來安裝應用。這樣做的缺點是應用的執行、配置、管理、所有生存週期將與當前作業系統系結,這樣做並不利於應用的升級更新/回滾等操作。Kubernetes是Google開源的一個容器編排引擎,它支援自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程式時,通常要部署該應用的多個實體以便對應用請求進行負載均衡。
在Kubernetes中,我們可以建立多個容器,每個容器裡面執行一個應用實體,然後透過內建的負載均衡策略,實現對這一組應用實體的管理、發現、訪問,而這些細節都不需要運維人員去進行複雜的手工配置和處理。
微服務運營管理
  1. 配置管理,相同的微服務,部署在不同的環境,如不同的生產中心、災備中心、測試迭代環境、並行測試環境等,需要有不同的配置,容器雲平臺透過Kubernetes特有的PV/PVC功能,結合配置中心的統一管理,方便實現配置管理,真正實現“一次打包,到處執行”。

  2. 自動擴縮容和灰度釋出,利用Kubernetes和容器,華泰容器雲平臺可以很好的的實現治理微服務需要的自動擴縮容和灰度釋出。根據實際的業務需求和策略,容器雲平臺透過Kubernetes自動“調整”其“彈性資源”的管理服務。透過彈性伸縮功能,業務團隊可設定定時、週期、自定義的監控策略,敏捷快速地增加或減少“彈性資源”,並完成實體配置,保證業務平穩健康執行。在滿足業務需求高峰增長時無縫地增加“彈性資源”,併在業務需求下降時自動減少“彈性資源”以節約成本。同樣結合負載均衡軟體,我們可以讓流量逐步指向新擴容出來的新版本的微服務,快捷的實現灰度釋出全過程。

  3. 健康檢查,當微服務數量不斷增加後,健康檢查和服務自動修複是一項重要工作,華泰容器雲平臺利用容器的特性,提供了容器健康監控和服務自動修複的功能,減少了微服務過程中運維的壓力。

 
CI/CD
持續整合
持續整合是一種軟體開發實踐,開發人員透過經常性地自動化整合他們的工作,從而儘早地發現IT系統整合錯誤。持續整合通常包括如下過程:統一的程式碼庫、自動觸發、自動構建、單元測試、自動化部署、自動化整合測試等等,這些工作透過Jenkins雖然也能完成,但是需要大量編碼工作,而且強依賴底層資源和環境,這使得開發和測試人員花費了大量精力在流程的對接上,而容器雲平臺的建成大大改善了這種情況。開發和測試人員在容器雲平臺透過圖形化的介面操作便可以完成持續整合的整套流程,將精力聚焦在軟體開發細節和測試用例上使用容器雲平臺不僅遮蔽了底層資源,大大簡化了執行時環境準備工作,結合容器的彈性,還大大提高了資源利用率。下圖展示了容器雲平臺的持續整合流程:

圖2 持續整合
持續交付
持續交付是持續整合的自然延續,它完成了產品從開發測試到生產的“質的蛻變”。利用容器雲平臺上的流水線,我們完成了從提交程式碼自動化觸發構建到最終自動更新生產環境某個微服務版本的整套交付流程。在開發測試環境構建出的應用映象透過流水線同步至預釋出環境,經過測試後再同步至生產環境部署,我們做到了在保證交付質量的前提下,加快交付速度,從而更快地反饋市場需求,賦能業務發展。下圖是持續交付流程圖:

圖3 持續交付
DevOps
DevOps主要用於開發、測試以及運維之間的協作管理,並且透過自動化流程,更加快捷、頻繁、易重覆且可靠的構建軟體、測試及釋出部署。持續整合和持續交付是實現DevOps的一部分,但不等於DevOps。DevOps應該還包括一套完整的持續部署以及持續運營的完整開發測試運維一體化的DevOps方法和工具。DevOps不是一定要用容器,但是有了容器,DevOps變得更加簡單。可以說容器雲平臺的建設既是DevOps實踐,也推動了華泰證券DevOps的落地:
  1. 藉助容器雲平臺提供敏捷開發能力,讓開髮端更加敏捷;

  2. 透過容器雲平臺,實現開發測試生產環境一致性,逐步建立標準化、一致性的開發、測試、運維環境,專註於業務應用開發,不分心於資源管理;

  3. 實現應用全生命週期管理,滿足應用開發、自動化部署、自動化運維等應用服務全生命週期管理需求;

  4. 基於容器雲平臺的能力,實現應用服務的彈性伸縮、灰度釋出等能力,滿足多種業務需求。

圖4 容器雲平臺上的DevOps

華泰容器雲的落地路徑

 

容器雲平臺的落地凝聚了很多特色功能,這些功能經過設計、驗證和實踐,有效支撐了容器雲平臺穩定、高效地執行,下麵簡單介紹4個落地路徑:網路樣式、彈性伸縮、有狀態服務、應用市場。
網路樣式
為了讓使用者應用平滑地遷移至容器,比如一些傳統應用或者監控應用需要直接使用Host的物理網路,也為了保障網路管理的一致性與網路效能的高效,我們選用了Macvlan網路樣式。Macvlan本身是Linxu Kernel的模組,本質上是一種網絡卡虛擬化技術。其原理是在宿主機物理網絡卡上虛擬出多個子網絡卡,並分配獨立的IP地址和MAC地址,把子網絡卡分配給容器實體來實現實體與物理網路的直通,並同時保持容器實體的隔離性。Host 收到資料包後,則根據不同的MAC地址把資料包從轉發給不同的子介面。在網路上看起來容器直接連線到物理網路,和物理機和虛機沒有區別。Macvlan共有4種樣式,我們使用的是高效能的Macvlan Bridge,如下圖所示:

圖5 Macvlan Bridge
彈性伸縮
彈性伸縮是容器雲的重要特性和業務場景。容器的封裝性使其橫向擴充套件非常方便,但是想做好彈性伸縮這還遠遠不夠。比如要做到基於CPU和記憶體負載的彈性伸縮,不僅要做好容器的監控,還要配合負載均衡、灰度釋出等功能,最重要的是彈性伸縮的時機,這裡面有些是技術問題,而有些需要根據不同業務做定製化處理。還有一點實踐經驗,善用Kubernetes的Liveness和Readiness Probes對增加應用程式的穩定性很有幫助。透過健康檢查保障微服務之間的啟動順序,當應用程式準備好的時候,它們才會開始服務通訊,這使得自動排程、滾動更新和彈性伸縮執行得十分順利。

圖6 彈性伸縮
有狀態服務
眾所周知,因為容器本身的磁碟空間不大,而且容器的可寫層資料在容器重啟後會丟失,所以容器沒辦法很好地承載有狀態服務,而是被廣泛應用於無狀態的服務。但是我們的容器雲平臺基於容器和容器編排技術,並結合分散式儲存技術,有效支撐了有狀態服務,比如容器化RDS。其核心思想是計算與儲存分離,將資料庫執行於容器中,而將其資料在外部分散式儲存中持久化。結合多種排程策略以及快照功能,可按需建立滿足不同業務場景的資料庫服務。

圖7 計算與儲存分離
中介軟體市場
隨著越來越多的應用系統相繼建設,對一些公共中介軟體的需求越來越強烈,例如Redis、Kafka等等。同時這些中介軟體的運維工作也越來越繁重,申請底層資源、安裝配置中介軟體、除錯等繁瑣、重覆性的工作佔據著中介軟體運維人員的大部分時間,容器化的中介軟體出現大大降低了中介軟體維護人員的工作量,無需關心底層資源和介面化的配置操作顯著提高了中介軟體的發放效率。後續中介軟體的自服務是我們的努力方向。

圖8 中介軟體市場

總結和展望

 

容器雲平臺在敏捷轉型之下應運而生,也很好地支撐了IT建設的敏捷轉型。開發、測試和運維人員透過容器雲平臺真正實現了高效協作,形成了DevOps的最佳實踐。我們打算在後續的容器雲平臺建設上更多地考慮雲原生的思路,推動以容器為中心的雲原生生態,賦能金融科技發展。

贊(0)

分享創造快樂