国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

構(gòu)建一個簡單的CaaS系統(tǒng)

2019-11-02 16:11:27
字體:
供稿:網(wǎng)友

在CaaS系統(tǒng)出現(xiàn)前企業(yè)應(yīng)用架構(gòu)基本被IaaS/SaaS/PaaS等模式壟斷,直到Docker的出現(xiàn)為我們打開了另一個扇大門,廢話不說了,我們直奔主題。

我們先了解下一個簡單的CaaS系統(tǒng)是如何為用戶提供服務(wù)的:

企業(yè)用戶上傳它的應(yīng)用代碼或其他代碼托管方式,我們生成用戶應(yīng)用的鏡像,或者用戶直接上傳鏡像,或者用戶直接使用我們提供的基礎(chǔ)服務(wù)鏡像 用戶部署他的鏡像應(yīng)用,啟動它的鏡像容器 用戶訪問他的應(yīng)用服務(wù)

OK,需求確定了,該搬磚了。

用戶鏡像制作

既然是一個簡單的CaaS系統(tǒng),我們就不讓用戶上傳代碼或者使用第三方代碼托管了,直接讓他們制作鏡像后提交給我們,為此我們需要搭建一個Docker私服來讓用戶上傳鏡像,假設(shè)用戶上傳的鏡像遵循這種格式 :docker 私服地址 /{appId}:{version} ,這對用戶有一定要求,畢竟一些用戶可能連Docker是啥都不知道就更別奢望讓他們編寫Dockerfile制作鏡像交付給我們了。當(dāng)然如果我們提供一些基礎(chǔ)服務(wù)鏡像(比如MySQL服務(wù),Redis服務(wù)等)給用戶那最好了。

啟動用戶鏡像

有了用戶制作的鏡像,該是啟動它的時候了。

docker pull docker私服地址/{appId}:{version}docker run -d docker私服地址/{appId}:{version} 

啟動方式很簡單,但這并不是我們想要的,畢竟我們是要讓用戶能夠訪問到他部署的服務(wù)的,假如用戶的服務(wù)是一個Web服務(wù),那你得暴露出用戶的Web服務(wù)端口,這需要我們確定容器的通信方案:

跟宿主機共用一個網(wǎng)絡(luò)空間 發(fā)布一個容器端口,讓Docker隨機選擇一個未使用的高位端口 發(fā)布一個容器端口,并映射到宿主機上指定端口為外部路由服務(wù) 采用Docker的'links'來允許容器間通信。 如果一個新容器鏈接到一個已有容器,新容器將會通過環(huán)境變量獲得已有容器的鏈接信息,一個關(guān)聯(lián)的容器將會獲得它的對應(yīng)連接信息,在它處理了那些變量后允許它自動連接。這樣就使得同一個宿主機上的容器不需要知道對應(yīng)服務(wù)的端口和地址,就可以直接進(jìn)行通信

我們簡單的CaaS系統(tǒng)暫時還用不到容器間通信,如果跟宿主機共用一個網(wǎng)絡(luò)空間即 --net="host" 模式啟動的話,那么如果有多個用戶上傳了鏡像,他們的WEB服務(wù)端口都是8080,顯然宿主機上只能啟動一個8080端口,只能有一個用戶的容器啟動成功,其他的因為端口已經(jīng)被占用導(dǎo)致啟動失敗,在這里我們選擇第三種模式,選擇指定的端口映射來發(fā)布容器,這也方便我們后面管理宿主機上的端口資源。OK,啟動方式改成下面:

docker run -d -p 25701:8080 docker私服地址/{appId}:{version} 

為了不讓某個用戶的應(yīng)用占用過多資源導(dǎo)致影響到整個宿主機上其他的應(yīng)用,我們稍微對用戶的資源進(jìn)行下限制,比如限制用戶應(yīng)用容器的使用內(nèi)存和CPU權(quán)重:

docker run -d -p 25701:8080 -m 512M -c 1024 docker私服地址/{appId}:{version} 

為了能做到水平擴展,容器服務(wù)最好是無狀態(tài)的的,這樣能更好的實現(xiàn)負(fù)載均衡和水平擴容。

應(yīng)用啟動成功,我們可以通過在宿主機上訪問25701即可訪問容器的8080端口服務(wù)。

在寫代碼的時候我們通過 Docker Remote API client libraries 來啟動卸載容器,具體代碼實現(xiàn)就不多說了。

服務(wù)發(fā)現(xiàn)

容器啟動成功后,用戶該如何訪問到他的容器服務(wù)呢,總不能提供宿主機IP給用戶直接訪問吧,這就需要我們構(gòu)建一個服務(wù)發(fā)現(xiàn)組件了。

服務(wù)發(fā)現(xiàn)的工作方式

當(dāng)每一個服務(wù)啟動上線之后,他們通過發(fā)現(xiàn)工具來注冊自身信息

服務(wù)的消費者能夠在預(yù)設(shè)的終端查詢該服務(wù)的相關(guān)信息,然后它就可以基于查到的信息與其需要的組件進(jìn)行交互

為了簡便,我們使用ZooKeeper來作為我們的服務(wù)發(fā)現(xiàn)工具。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 锦屏县| 虞城县| 安福县| 滕州市| 瑞金市| 临湘市| 昌宁县| 汕头市| 和顺县| 东乌珠穆沁旗| 舟山市| 富阳市| 临江市| 延安市| 寿宁县| 汝城县| 三门县| 章丘市| 鄂尔多斯市| 象山县| 潢川县| 宿州市| 安仁县| 仁化县| 满城县| 池州市| 班戈县| 余庆县| 容城县| 友谊县| 德庆县| 石门县| 晋州市| 济南市| 巴彦县| 南丰县| 田东县| 福泉市| 河津市| 武功县| 五台县|