摘要:本文主要和大家分享下容器技術和頂象風控系統私有化部署的優勢以及容器技術在頂象內部的應用實踐。容器技術在頂象內部的應用目前容器技術已在頂象內部大規模推行,所有應用均通過容器實現部署交付與更新。
頂象全景式業務安全風控體系基于新一代風控體系構建,并采用Docker技術進行私有云和公有云部署。本文主要和大家分享下Docker容器技術和頂象風控系統私有化部署的優勢以及Docker容器技術在頂象內部的應用實踐。
Docker容器技術概述Docker是一個開源的容器引擎,Docke是以Docker容器為資源分割和調度的基本單位,封裝軟件的運行時環境,用于快速構建、發布、運行分布式應用的平臺。
Docker容器本質上是宿主機上的進程,通過namespace實現資源隔離,通過cgroups實現資源限制,通過寫時復制(copy-on-write)實現高效的文件操作。容器是應用程序層的一個抽象,將代碼和依賴關系打包在一起。 多個容器可以在同一臺機器上運行,并與其他容器共享操作系統內核,每個容器在用戶空間中作為孤立進程運行。
圖自官網
Docker引擎包含Docker守護進程(Docker daemon,dockerd 命令)、REST API和Docker客戶端(docker 命令)。Docker采用 C/S架構,Docker客戶端與Docker守護進程通信,Docker守護進程負責構建,運行和分發Docker容器。 Docker客戶端和守護進程可以在同一個系統上運行,也可以將Docker客戶端連接到遠程的Docker守護進程。 Docker客戶端和守護進程使用REST API通過UNIX套接字或網絡接口進行通信。Docker容器基于開放標準,可運行在所有主要Linux發行版,Microsoft Windows以及包括虛擬機,裸機和云上的任何基礎架構上。
技術優勢Docker能夠將應用程序與基礎架構分離,從而可以快速交付軟件。使用Docker,可以像管理應用程序一樣管理基礎架構。宿主機不需要去關心某一個容器運行所需要的依賴,只要它可以運行Docker,那么它就可以運行所有的Docker容器,容器將軟件與其周圍環境隔離開來,并有助于減少在同一基礎架構上運行不同軟件的團隊之間的沖突。
Docker容器實現了應用環境的標準化,我們可以為不同應用、及其不同的版本制作各自的鏡像,實現持續集成、應用的快速交付、應用快速更新與回滾。Docker的鏡像存儲采用分層的形式,不同的 Docker 容器共享一些基礎的文件系統層,同時再加上自己獨有的改動層,大大提高了存儲的效率,通過合理的鏡像構建方式,鏡像所需的存儲空間并不會隨著鏡像的數量而線性增長。在Docker的官方鏡像倉庫Docker Hub上,我們能找到100,000+的鏡像,經鏡像倉庫的統一管理,我們只需要pull其鏡像,然后通過run命令就可以快速搭建起所需的環境、部署應用。而基于Docker提供的Dockerfile,我們可以在基礎鏡像上自由地構建自己所需的鏡像。
相較于以往的基于虛擬機部署,Docker容器更加輕量化并具備可移植性,并且不需要考慮外部的依賴問題,就像Java “Write once,run anywhere”的特性一樣,JVM屏蔽了不同平臺的差異性,而Docker所提出的 “Build once,Run anywhere,Configure once,Run anything”體現了其更加便捷、部署成本更低的特性,不僅能夠有效屏蔽操作系統之間的差異,對于混合部署又能夠屏蔽其他應用可能出現的影響,間接保證了應用的高可用,提高了資源的利用率。
Docker容器編排與集群管理當Docker容器逐漸增多,應用的依賴關系變得復雜,依賴需要多個組件時,就可以使用Docker容器的編排。編排是一個廣義的概念,它是指容器調度、集群管理和可能其他主機供應配置。為此,Docker提供了容器集群快速編排的Compose與Swarm工具。Compose是定義、運行多容器、多服務和Swarm集群配置的應用編排程序(Define application stacks built using multiple containers, services, and swarm configurations.),使用YAML文件來配置應用程序的服務,然后通過命令創建并啟動配置中所有服務,實現快速部署。
當應用被擴展到多臺宿主機,管理每個宿主系統和抽象化底層平臺的復雜性變得更有挑戰。Swarm作為容器集群的管理工具,可以很容易地部署跨主機的容器集群服務,Compose本身不支持跨主機管理容器,因為它的實現中只能連接一個docker client。Swarm把多個主機的docker engine集群抽象成一個虛擬的Docker主機。
在集群中一個應用或者組件發現其運行環境以及其它應用或組件的信息通過服務發現實現,通常是key/value存儲,例如Consul、Etcd、ZooKeeper等。Docker1.12及之后的版本已內置SwarmKit,這是一個Swarm的升級項目,在SwarmKit中內置key/value存儲,通過構建Swarm集群,在上面就可以把任務負載到不同的機器上。Swarm集群中,節點有兩種角色,manager和worker。manager節點通過實現Raft一致性算法來管理全局的集群狀態,再配合Compose YML V3的語法可以方便對所有應用的配置管理,高效實現跨主機的容器編排與集群管理。
頂象風控系統的私有部署,除了考慮業務和用戶數據的安全問題,還考慮了基礎設施的依賴和隔離、快速部署交付、更新等,保證所有組件和服務都可快速的彈性擴容,既滿足小范圍的測試與業務起步階段,也可以動態擴容適應業務發展,實現高QPS的支撐。
Docker容器技術在頂象內部的應用目前Docker容器技術已在頂象內部大規模推行,所有應用均通過Docker容器實現部署、交付與更新。在此列舉幾個簡單的實踐例子:
1、在一個Docker容器中,通常我們只運行一個應用,當使用容器編排時,不同應用的啟動時間不同,同時耗費的時間又會與機器的性能有關,在docker-compose的YML文件中, depends_on, links等參數可以控制服務的啟動順序,但是實際上并不知道容器內的應用是否完成啟動,當一個服務必須要依賴另一個服務時就需要控制它們之間容器啟動的時間間隔,或者在啟動應用的命令中預留等待的時間,也可以對兩個服務分別編排啟動。
2、Compose在鏡像的制作上也很方便,YML中提供了build參數用于指定Dockerfile的路徑,image參數指定鏡像的名稱,docker-compose提供了build、push、images等命令可以為所有的應用批量制作鏡像,或指定service名稱,為單個服務制作鏡像。同時YML支持環境變量,通過Linux export命令設置環境變量可以動態地調整參數,而docker-compose config命令則可以檢查YML文件的正確性、預覽最終的文件內容。
3、Docker容器日志輸出的是控制臺的日志,保存在/var/lib/docker/containers下以容器ID命名的目錄中,在大多數情況下,我們只需要將必要的日志內容輸出到文件中,再掛載到宿主機,對此可以屏蔽一些輸出到控制臺的日志以減小磁盤空間的占用,同時docker run提供了參數 --log-opt 可以用于控制日志大小,在Compose中則有logging max-size相關參數。
4、Docker提供了bridge、host、overlay、container等網絡模式,在實際的使用中經常會有跨主機容器訪問通信的場景,選擇不同的網絡模式、合理分配應用的部署可以提高應用的性能。
5、通過Jenkins搭建持續集成環境,自動構建代碼,可以快速把應用打包成鏡像并自動部署,將構建結果發送到Sonar, 展示單測覆蓋率,代碼基本bug檢測,并把失敗的構建以郵件方式通知相關的開發人員,對需要發布的鏡像推送到鏡像倉庫。基于Docker私有倉庫,應用的發布更新從倉庫中獲取鏡像分發,對不同版本的容器區別命名,保留舊版本容器方便及時回滾。
更多業務安全類的技術分享,請關注頂象官方博客:https://www.dingxiang-inc.com...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27112.html
摘要:本篇文章將會結合網易云信的實踐經驗,以全局概述的方式帶大家認識點播私有化平臺構建的整體架構面貌。基于構建點播私有云平臺在具有以上優勢的同時,還具備資源彈性管理監控完善部署簡易自動化維護等特性。基于構建平臺,能夠自由管理創建云主機。 私有云是為一個客戶單獨使用而構建的,因而提供對數據、安全性和服務質量的最有效控制。前置條件是客戶擁有基礎設施,并可以使用基礎設施在其上部署應用程序。其核心屬...
摘要:本篇文章將會結合網易云信的實踐經驗,以全局概述的方式帶大家認識點播私有化平臺構建的整體架構面貌。基于構建點播私有云平臺在具有以上優勢的同時,還具備資源彈性管理監控完善部署簡易自動化維護等特性。基于構建平臺,能夠自由管理創建云主機。 私有云是為一個客戶單獨使用而構建的,因而提供對數據、安全性和服務質量的最有效控制。前置條件是客戶擁有基礎設施,并可以使用基礎設施在其上部署應用程序。其核心屬...
摘要:問能否談一下迅雷云使用的過程其實最初的時候,迅雷團隊對是懷有謹慎的態度的。三調度算法是迅雷云定制優化的。迅雷在使用這方面一直沒有把數據層面交給迅雷云之外的系統。 非商業轉載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/201256 曾金龍就職于迅雷網絡,是國內覆蓋面最廣的迅雷P2P引擎核心研發成員。他畢業于中山大...
摘要:的設計模式的設計模式以持續集成持續測試持續交付和持續部署為中心,自動化協作和持續監控是中使用的一些其他設計模式。持續集成持續集成是不斷地將源代碼集成到一個新的構建或發布的過程,源代碼可以在本地存儲中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 識別二維碼報名活動 8月19日,來自微軟、數人...
閱讀 1200·2021-11-23 09:51
閱讀 1980·2021-10-08 10:05
閱讀 2338·2019-08-30 15:56
閱讀 1900·2019-08-30 15:55
閱讀 2639·2019-08-30 15:55
閱讀 2487·2019-08-30 13:53
閱讀 3497·2019-08-30 12:52
閱讀 1249·2019-08-29 10:57