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