DockOne微信分享(八十九):恆生金融交易系統的Docker化實踐

貓飯先生發表於2017-10-12
本文講的是DockOne微信分享( 八十九):恆生金融交易系統的Docker化實踐【編者的話】Docker可以顯著改善企業軟體研發流程、提升企業DevOps效率。藉助Docker,企業可以對現有IT系統進行一次梳理,解決IT軟體系統部署、升級難的頑疾,重新釋放企業生產力,降低企業成本。本次分享介紹了恆生電子運用Docker技術,加上自研配套工具,實現金融交易系統配置、部署、運維自動化的心得,包括:
  1. Docker的優勢以及我們為什麼要使用Docker;
  2. 恆生Docker運用現狀;
  3. 恆生金融交易系統的Docker化實踐過程;
  4. 恆生Docker未來規劃。


Docker的優勢

隨著Docker技術的日趨成熟和完善,越來越多的企業開始考慮使用Docker。Docker在開發、測試、運維部署方面已經展現了其巨大的優勢,具有很強的生命力。能夠極大的解決過去DevOps的弊病,提高效率,節約成本。

1.png


(一)開發測試方面:

在開發測試我們都遇到過這些問題:開發、測試環境不一致,測試出的bug,在開發環境不能重現,需要花費很大的精力在應用環境的維護部署上。應用系統對執行平臺有著特定的要求,很難達到在不同的平臺間進行安全移植。對於應用的版本控制也比較混亂,不能夠方便地對應用進行升級維護。

Docker在持續整合、可移植性和版本控制方面有著天然的優勢,很容易解決這些弊端。

  1. 持續整合
    Docker很容易解決環境的一致性問題,對開發、測試和運維人員有著極大的吸引力。由於安裝包版本不同和依賴關係,在開發、測試和釋出的整個過程中,很容易造成環境的差異。Docker可以通過確保從開發到產品釋出整個過程環境的一致性來解決這個問題。

    使用Docker可以確保開發者不需要配置完全相同的環境,可以在自己的系統上建立虛擬機器從而執行Docker容器。Docker可以讓我們構建、測試和釋出映象,這個映象可以跨多個伺服器進行部署。

  2. 可移植性
    Docker容器能執行在主流公有云提供主機作業系統的平臺上,目前Windows也支援了容器的部署。舉例來說,執行在阿里雲上的Docker容器能夠很容易地移植到其他幾個平臺上,比如說華為雲,並且達到類似的一致性和功能性,那這將允許你從基礎設施層中抽象出來。
  3. 版本控制
    Docker允許我們提交變更到Docker映象中並通過不同的版本來管理它們。設想如果你因為完成了一個元件的升級而導致你整個環境都損壞了,Docker可以讓你輕鬆地回滾到這個映象的前一個版本。這整個過程可以在幾分鐘內完成,如果和虛擬機器的備份或者映象建立流程對比,那Docker算相當快的,它可以讓你快速地進行復制和實現冗餘。此外,啟動Docker就和執行一個程式一樣快。


(二)運維部署方面:

2.png


在對應用進行部署時,一臺主機,一般不會在上面執行過多的應用,有時一臺主機只執行了一個程式。究其原因,無非是擔心使用者資料洩露以及程式之間的相互干擾等。

Docker很好的解決了這個問題,首先docker的隔離性隔離了應用和使用者資料,使應用更加安全,使用者更加放心;而資源限制避免了一個應用過多消耗資源,從而影響其他應用。

我們為什麼要使用Docker

恆生是中國領先的金融軟體和網路服務供應商,金融IT領域龍頭企業,為客戶探索領域內的新方案是我們的責任。

Docker作為一項新技術,在短短的時間內受到各個企業的青睞,有著其得天獨厚的優勢。恆生是一家技術型金融IT企業,技術創新一直是我們所推崇的,將Docker新技術應用在金融領域,為金融行業提供可靠的Docker解決方案,是我們的責任。

3.png


傳統的方案,在軟體開發和測試、運維的過程中存在諸多問題和不便。比如持續整合困難,開發、測試、運維環境不一致,版本管理問題,硬體資源不足等。Docker將應用的依賴整合進映象中,很容易的解決了開發、運維環境不一致的問題。容器相互之間的、容器與主機之間的隔離性,讓一臺主機可以執行多個容器,並互不影響,這就很好的解決了硬體資源不足的問題。每一個版本會生成一個映象,對於版本的維護、升級以及版本回退都極其方便快捷。Docker的一鍵部署,極大的節約了運維人員的時間成本和精力。

Docker的天然優勢,能夠極大提高DevOps效率。

恆生Docker運用現狀

2015年成立團隊專門做Docker相關的研發,到目前為止基礎平臺和關鍵應用系統已經Docker化,各個部門都在推進各自產品的Docker化。大部分的測試環境,目前都採用Docker進行部署。

(一) 持續整合

4.png


繼續整合採用的Jenkins,目前Jenkins伺服器已經使用Docker進行部署;整合編譯環境由於系統版本低,不能很方便的遷移到Docker環境,所以部分用於整合編譯的worker節點還是傳統的虛擬機器。

在Jenkins任務完成後,會製作映象推送到映象中心。當然這些可以通過容器管理工具,在介面上進行操作,或者配置成定時任務。

(二)映象中心

5.png


目前,Docker方面的研發主要包括映象中心、容器部署管理、PaaS平臺等。

映象中心在開源專案Harbor的基礎上,增加了CAS整合和專案的組織架構管理以及高可用等。

增加CAS整合,主要是因為在映象中心部署在內部域內,為了和現有使用者體系打通。

為了方便Linux機器登陸映象中心,並且不會洩露使用者域密碼,使用者會在映象中心內部設定一個用於Docker登陸的密碼。

Docker映象增加專案組織資訊,方便統計各部門產品Docker使用情況。

部署了2套Harbor來做高可用,使用同一個資料庫,避免資料同步,但是需要解決映象複製的問題。

使用Harbor映象複製的方式將映象同步到生產環境和測試環境映象中心,避免中心映象中心壓力過大。

(三)容器管理

6.jpg


管理方面主要包括機器資源管理、應用管理、容器管理等。

機器資源管理中,使用者可以建立多個叢集,每個叢集管理多臺機器,以隔離不同的環境。

應用管理中,使用者先建立應用,然後在應用下新增服務,服務可以是單個節點,可以是一個叢集。然後在介面上修改服務配置,修改好配置後,再選擇要部署到哪個機器叢集,進行應用部署。管理工具會將配置檔案上傳到配置中心,然後啟動應用容器,容器啟動後,先到配置中心取相應的配置,然後啟動應用。

Docker管理供使用者檢視Docker容器、網路、映象等。

另外為了相容低版本作業系統和Windows系統,應用部署也支援使用者上傳zip包的方式。

PaaS方面,主要是為使用者提供更方便的服務,使用者可以一鍵申請MySQL、SLB等常用服務。

恆生金融交易系統的Docker化

(一)挑戰

7.png


恆生金融交易系統的部署面臨諸多挑戰:

金融交易系統最重要的是穩定性和效能。系統穩定性和併發性要求高,系統延遲要儘量低。為了滿足上面要求,軟體的可運維性沒有受到重視,存在著以下問題:

  1. 系統複雜,部署困難
    金融交易系統包含的節點數成百上千,對於運維人員來說,部署交易系統面臨諸多挑戰。

    首先是要求更多的物理機,避免節點混合部署相互影響。其次,每個物理機的環境要求較高,運維人員需花費不必要的精力浪費在主機基礎環境的搭建。

  2. 配置複雜
    交易系統的每個節點基本上都有多個配置檔案,這些配置也就成百上千,如何管理這些配置檔案,如何更新配置檔案,都成為了一個難題。
  3. 擴充套件性
    當交易量大時,需要對交易系統進行動態擴充套件。


(二)實現

8.png


  1. 網路
    網路方面,為了儘量不影響交易系統的效能,以及支援系統用到的複雜協議如組播等,直接使用了host網路模式。
  2. 儲存
    儲存方案上,使用host主機儲存,避免使用網路儲存帶來的開銷和延遲。檔案系統採用OverlayFS儲存方案,OverlayFS是一個聯合檔案系統,並且已併入Linux核心。在映象的製作,容器的操作都相對較快,而且問題比較少。
  3. 配置管理
    配置管理方面,使用單獨的配置中心儲存配置,單獨管理,避免配置和應用耦合。然後和管理工具整合,提供Web編輯介面。
  4. 服務註冊發現
    服務註冊和發現,使用改造的Confd和Registrator來實現,根據容器標籤來進行註冊和發現,避免埠匯出太多。
  5. 彈性擴充套件
    彈性擴充套件方面利用Compose的Scale,來擴充套件容器,通過服務註冊和發現工具,使新節點加入到現有叢集中。


解決了上述的問題後,現在使用者可以通過容器管理工具,在Web介面上,一鍵部署交易系統,給測試和運維帶來了極大的便利性。而系統的效能也沒有多少的損耗。

恆生Docker未來規劃

未來我們將加大Docker的推進力度,繼續優化交易系統的Docker部署流程,尋找更優化的方案,同時將更多的服務整合到PaaS平臺,給使用者更好的體驗。

Q&A

Q:請問下,你們現在這個系統容器規模多大?OverlayFS有遇到什麼坑嗎?

A:現在系統容器是100多個。由於映象數少,對檔案inode佔用少,所以OverlayFS基本滿足需求。但是需要主機核心高一點,在3.18以上。

Q:請教一下。我們們這個容器管理平臺是用什麼語言開發的?直接呼叫Docker Remote API嗎,用的是最新的1.24麼?

A:Java語言開發,直接呼叫的Docker Remote API,版本是1.24.

Q:MySQL服務也Docker化了嗎,怎麼保證儲存安全?

A:MySQL這塊是我們實現了RDS,底層用MySQL的複製方案。

Q:交易系統應該涉及很多執行元件。在決定哪些元件容器化時有哪些考慮?

A:一般效能要求很高,延遲要求在微秒級的元件,比如高頻交易等,基本不考慮Docker化。

Q:核心架構是Swarm+Docker+Confd+Registrator,如何實現動態擴充套件?

A:元件還包括了Etcd,利用Etcd+Confd+Registrator來做服務註冊和發現及配置管理,利用Docker Compose的Scale做服務的擴充套件。

Q:請問你們用的編排系統都是Docker 1.12的Swarm嗎,如何實現容器都是誇主機冗餘部署?

A:1.12也在試用,現在主要是老模式的Swarm,利用容器的互斥性,相同叢集的2個容器例項,不要部署到同一臺主機上。

Q:請教下業務元件的映象有多大?如何實現跨平臺遷移,不如從華為雲部署到阿里雲之類?

A:映象大小在幾百M,利用映象中心的遠端複製功能,同步到生產環境的映象中心,比如阿里雲和華為雲上。

Q:映象安全如何保證?

A:目前基礎映象都是由我們自己製作,會檢查安裝的軟體和版本。後續會引進映象安全掃描,來定期檢查映象。

Q:請問網路採用host模式,如果一臺主機執行多個同一埠的容器怎麼辦?比如執行2個Tomcat專案?

A:我們在容器管理工具中增加了埠的配置管理,不會出現這種情況。另外部分網路效能要求不高的應用,也會採用flannel host-gw的方案,這樣埠就可以相同了。後續會調研MacVLAN模式,給每個容器分配一個物理IP地址。

以上內容根據2016年10月18日晚微信群分享內容整理。分享人柳正龍,恆生電子研發中心Docker技術負責人。8年來一直專注於金融行業高效能中介軟體、分散式訊息分發系統架構和研發。對於網路通訊、伺服器效能調優、GDB除錯等有豐富的經驗。2015年開始研究Docker技術,現負責推進Docker技術在公司內的落地。 DockOne每週都會組織定向的技術分享,歡迎感興趣的同學加微信:liyingjiesz,進群參與,您有想聽的話題或者想分享的話題都可以給我們留言。

原文釋出時間為:2016-10-25

本文作者:柳正龍

本文來自雲棲社群合作伙伴Dockerone.io,瞭解相關資訊可以關注Dockerone.io。

原文標題:DockOne微信分享( 八十九):恆生金融交易系統的Docker化實踐


相關文章