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