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

【編者的話】隨着證券行業的發展,支撐業務的IT系統也在逐漸壯大。爲了快速響應業務需求,敏捷交付成爲了IT系統建設新的要求。容器技術做爲敏捷交付的最佳拍檔,已經深入影響了持續集成和持續交付,也改變着IT系統的開發、交付和運維。

背景

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

開發:
  • 代碼量不斷增長、協同開發難度加大
  • 多樣化的編譯和運行環境

交付:
  • 更快的交付頻率
  • 按時發佈、按需發佈

運維:
  • 微服務化後帶來的架構複雜度提升
  • 產品總體部署和運維難度增長

這再次印證了軟件工程的世界裏「沒有銀彈」。微服務化解決了IT系統緊耦合、強技術依賴、難維護的問題,可是卻同時帶來了新的問題。在咱們看來,這是一個螺旋上升的過程。

隨着容器技術的發展,容器技術與微服務逐漸碰撞出火花,業界也廣泛認爲容器技術和微服務是「天生一對」。在2017年,容器化微服務成爲了咱們新的選擇,優化了開發、交付和運維方式和流程,並一直推進着公司敏捷和DevOps的發展。

華泰容器雲簡介

2017年,隨着容器和容器編排技術的日趨成熟,咱們建設了符合實際應用場景的「容器雲平臺」。容器雲平臺採用時下最流行的容器技術Docker和已成行業標準的容器編排工具Kubernetes建設而成,經過構建、服務、流水線、監控、日誌等功能有效承載了微服務、CI/CD、 DevOps

微服務

如今愈來愈多的金融企業使用微服務架構,以應對快速變化的互聯網金融挑戰。經過微服務改造把應用拆分紅不少細小的服務,每一個服務專一於單一的功能,服務和服務之間有明確的邊際,使用輕量級的通信協議進行溝通,實現某個相對單一的功能。微服務的到來下降了巨大單體式應用複雜度、每一個服務的開發技術自有選擇、每一個服務可獨立擴展、每一個服務可獨立部署。但使用微服務架構不要低估細粒度分佈式應用治理與運維的複雜度。而結合容器技術的微服務則能夠給企業帶來更高的資源使用率,更加快捷的迭代變動,更加方便的快速擴容能力。

容器是微服務的最佳載體

經過容器將微服務的運行時標準化,每一個容器承載一個服務,而後像搭積木同樣組合起來,讓彼此通訊,從而就能很輕鬆地模擬出複雜的微服務架構。
1.jpg

圖1 容器中的微服務
  1. 容器自然作到了應用之間相互隔離,在保證安全隔離的同時,能夠有效提升資源使用率;
  2. 爲微服務的快速擴容提供有效的支撐,容器啓動很是快速,秒級實現,經過鏡像能夠快速啓動多個微服務;
  3. 對軟件和其依賴環境的標準化打包,保證了微服務多個副本之間的絕對一致性,使得咱們能夠方便運維管理更多的微服務;
  4. 容器佔用資源少、部署快,每一個微服務應用能夠被打包成一個容器鏡像,每一個應用與容器間成一對一關係也使容器有更大優點,爲每一個微服務單獨構建鏡像,經過鏡像能夠獨立發佈一個微服務,不依賴於生產環境基礎結構,這使得從研發到測試、生產能提供一致環境。

利用Kubernetes支撐微服務

Kubernetes在支撐容器平臺和微服務的競爭中依然勝出。傳統的應用部署方式是經過插件或腳原本安裝應用。這樣作的缺點是應用的運行、配置、管理、全部生存週期將與當前操做系統綁定,這樣作並不利於應用的升級更新/回滾等操做。 Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,一般要部署該應用的多個實例以便對應用請求進行負載均衡。

在Kubernetes中,咱們能夠建立多個容器,每一個容器裏面運行一個應用實例,而後經過內置的負載均衡策略,實現對這一組應用實例的管理、發現、訪問,而這些細節都不須要運維人員去進行復雜的手工配置和處理。

微服務運營管理
  1. 配置管理,相同的微服務,部署在不一樣的環境,如不一樣的生產中心、災備中心、測試迭代環境、並行測試環境等,須要有不一樣的配置,容器雲平臺經過Kubernetes特有的PV/PVC功能,結合配置中心的統一管理,方便實現配置管理,真正實現「一次打包,處處運行」。
  2. 自動擴縮容和灰度發佈,利用Kubernetes和容器,華泰容器雲平臺能夠很好的的實現治理微服務須要的自動擴縮容和灰度發佈。根據實際的業務需求和策略,容器雲平臺經過Kubernetes自動「調整」其「彈性資源」的管理服務。經過彈性伸縮功能,業務團隊可設置定時、週期、自定義的監控策略,敏捷快速地增長或減小「彈性資源」,並完成實例配置,保證業務平穩健康運行。在知足業務需求高峯增加時無縫地增長「彈性資源」,並在業務需求降低時自動減小「彈性資源」以節約成本。一樣結合負載均衡軟件,咱們可讓流量逐步指向新擴容出來的新版本的微服務,快捷的實現灰度發佈全過程。
  3. 健康檢查,當微服務數量不斷增長後,健康檢查和服務自動修復是一項重要工做,華泰容器雲平臺利用容器的特性,提供了容器健康監控和服務自動修復的功能,減小了微服務過程當中運維的壓力。

CI/CD

持續集成

持續集成是一種軟件開發實踐,開發人員經過常常性地自動化集成他們的工做,從而儘早地發現IT系統集成錯誤。持續集成一般包括以下過程:統一的代碼庫、自動觸發、自動構建、單元測試、自動化部署、自動化集成測試等等,這些工做經過Jenkins雖然也能完成,可是須要大量編碼工做,並且強依賴底層資源和環境,這使得開發和測試人員花費了大量精力在流程的對接上,而容器雲平臺的建成大大改善了這種狀況。開發和測試人員在容器雲平臺經過圖形化的界面操做即可以完成持續集成的整套流程,將精力聚焦在軟件開發細節和測試用例上使用容器雲平臺不只屏蔽了底層資源,大大簡化了運行時環境準備工做,結合容器的彈性,還大大提升了資源利用率。下圖展現了容器雲平臺的持續集成流程:
2.jpg

圖2 持續集成

持續交付

持續交付是持續集成的天然延續,它完成了產品從開發測試到生產的「質的蛻變」。利用容器雲平臺上的流水線,咱們完成了從提交代碼自動化觸發構建到最終自動更新生產環境某個微服務版本的整套交付流程。在開發測試環境構建出的應用鏡像經過流水線同步至預發佈環境,通過測試後再同步至生產環境部署,咱們作到了在保證交付質量的前提下,加快交付速度,從而更快地反饋市場需求,賦能業務發展。下圖是持續交付流程圖:
3.png

圖3 持續交付

DevOps

DevOps主要用於開發、測試以及運維之間的協做管理,而且經過自動化流程,更加快捷、頻繁、易重複且可靠的構建軟件、測試及發佈部署。持續集成和持續交付是實現DevOps的一部分,但不等於DevOps。DevOps應該還包括一套完整的持續部署以及持續運營的完整開發測試運維一體化的 DevOps方法和工具。DevOps不是必定要用容器,可是有了容器,DevOps變得更加簡單。能夠說容器雲平臺的建設既是DevOps實踐,也推進了華泰證券DevOps的落地:
  1. 藉助容器雲平臺提供敏捷開發能力,讓開發端更加敏捷;
  2. 經過容器雲平臺,實現開發測試生產環境一致性,逐步創建標準化、一致性的開發、測試、運維環境,專一於業務應用開發,不分心於資源管理;
  3. 實現應用全生命週期管理,知足應用開發、自動化部署、自動化運維等應用服務全生命週期管理需求;
  4. 基於容器雲平臺的能力,實現應用服務的彈性伸縮、灰度發佈等能力,知足多種業務需求。

4.jpg

圖4 容器雲平臺上的DevOps

華泰容器雲的落地路徑

容器雲平臺的落地凝聚了不少特點功能,這些功能通過設計、驗證和實踐,有效支撐了容器雲平臺穩定、高效地運行,下面簡單介紹4個落地路徑:網絡模式、彈性伸縮、有狀態服務、應用市場。

網絡模式

爲了讓用戶應用平滑地遷移至容器,好比一些傳統應用或者監控應用須要直接使用Host的物理網絡,也爲了保障網絡管理的一致性與網絡性能的高效,咱們選用了Macvlan網絡模式。Macvlan自己是Linxu Kernel的模塊,本質上是一種網卡虛擬化技術。其原理是在宿主機物理網卡上虛擬出多個子網卡,並分配獨立的IP地址和MAC地址,把子網卡分配給容器實例來實現實例與物理網絡的直通,並同時保持容器實例的隔離性。Host 收到數據包後,則根據不一樣的MAC地址把數據包從轉發給不一樣的子接口。在網絡上看起來容器直接鏈接到物理網絡,和物理機和虛機沒有區別。Macvlan共有4種模式,咱們使用的是高性能的Macvlan Bridge,以下圖所示:
5.jpg

圖5 Macvlan Bridge

彈性伸縮

彈性伸縮是容器雲的重要特性和業務場景。容器的封裝性使其橫向擴展很是方便,可是想作好彈性伸縮這還遠遠不夠。好比要作到基於CPU和內存負載的彈性伸縮,不只要作好容器的監控,還要配合負載均衡、灰度發佈等功能,最重要的是彈性伸縮的時機,這裏面有些是技術問題,而有些須要根據不一樣業務作定製化處理。還有一點實踐經驗,善用Kubernetes的Liveness和Readiness Probes對增長應用程序的穩定性頗有幫助。經過健康檢查保障微服務之間的啓動順序,當應用程序準備好的時候,它們纔會開始服務通訊,這使得自動調度、滾動更新和彈性伸縮運行得十分順利。
6.jpg

圖6 彈性伸縮

有狀態服務

衆所周知,由於容器自己的磁盤空間不大,並且容器的可寫層數據在容器重啓後會丟失,因此容器沒辦法很好地承載有狀態服務,而是被普遍應用於無狀態的服務。可是咱們的容器雲平臺基於容器和容器編排技術,並結合分佈式存儲技術,有效支撐了有狀態服務,好比容器化RDS。其核心思想是計算與存儲分離,將數據庫運行於容器中,而將其數據在外部分佈式存儲中持久化。結合多種調度策略以及快照功能,可按需建立知足不一樣業務場景的數據庫服務。
7.jpg

圖7 計算與存儲分離

中間件市場

隨着愈來愈多的應用系統相繼建設,對一些公共中間件的需求愈來愈強烈,例如Redis、Kafka等等。同時這些中間件的運維工做也愈來愈繁重,申請底層資源、安裝配置中間件、調試等繁瑣、重複性的工做佔據着中間件運維人員的大部分時間,容器化的中間件出現大大下降了中間件維護人員的工做量,無需關心底層資源和界面化的配置操做顯著提升了中間件的發放效率。後續中間件的自服務是咱們的努力方向。
8.jpg

圖8 中間件市場

總結和展望

容器雲平臺在敏捷轉型之下應運而生,也很好地支撐了IT建設的敏捷轉型。開發、測試和運維人員經過容器雲平臺真正實現了高效協做,造成了 DevOps的最佳實踐。咱們打算在後續的容器雲平臺建設上更多地考慮雲原生的思路,推進以容器爲中心的雲原生生態,賦能金融科技發展。
相關文章
相關標籤/搜索