摘要:根本上來(lái)說(shuō),這意味著不僅要將整個(gè)應(yīng)用程序分解,而且要將任何一個(gè)服務(wù)器中的各個(gè)部分分解為多個(gè)模塊化容器,這些容器易于參數(shù)化和重復(fù)使用。在中,這種模塊化容器服務(wù)的實(shí)施者是。一個(gè)是指一組共享文件系統(tǒng),內(nèi)核命名空間和地址的一組容器。
過(guò)去幾年容器逐漸成為了打包和部署代碼的流行的方式。容器鏡像解決很多現(xiàn)有的打包和部署工具所帶來(lái)的問(wèn)題,初次以外,還為我們提供了構(gòu)建分布式應(yīng)用的全新的思路。就如SOA提倡將應(yīng)用拆分為模塊化的內(nèi)聚的服務(wù),容器應(yīng)當(dāng)進(jìn)一步提倡將這些服務(wù)拆分為緊密協(xié)作的模塊化容器。通過(guò)構(gòu)建應(yīng)用邊界,容器使用戶能夠使用模塊化,可重用的組件構(gòu)建其服務(wù),從而使得服務(wù)比單機(jī)容器構(gòu)建的應(yīng)用程序更可靠,更具可擴(kuò)展性并且構(gòu)建速度更快。
從VM向容器的演變從各種角度來(lái)說(shuō)就如同當(dāng)年從單機(jī)應(yīng)用轉(zhuǎn)化為模塊化的面向?qū)ο蟮膽?yīng)用程序。容器鏡像提供的抽象層與面向?qū)ο缶幊讨蓄惖某橄筮吔缬泻艽蟮墓餐c(diǎn),而且也提高了開(kāi)發(fā)者的效率和程序的質(zhì)量。就像正確的編碼方式是將關(guān)注點(diǎn)分離為模塊化對(duì)象一樣,在容器中打包應(yīng)用程序的正確方法是將關(guān)注點(diǎn)分離為模塊化容器。根本上來(lái)說(shuō),這意味著不僅要將整個(gè)應(yīng)用程序分解,而且要將任何一個(gè)服務(wù)器中的各個(gè)部分分解為多個(gè)模塊化容器,這些容器易于參數(shù)化和重復(fù)使用。這就像現(xiàn)代語(yǔ)言中的標(biāo)準(zhǔn)語(yǔ)言庫(kù),大多數(shù)應(yīng)用程序開(kāi)發(fā)人員可以將由其他人編寫(xiě)的模塊化容器組合在一起,并使用更高質(zhì)量的組件更快地構(gòu)建應(yīng)用程序。
從模塊化容器方面進(jìn)行思考的好處很多,特別是模塊化容器提供以下內(nèi)容:
加快應(yīng)用的開(kāi)發(fā),因?yàn)槿萜骺梢栽趫F(tuán)隊(duì)甚至是大型社區(qū)之間進(jìn)行復(fù)用 支持敏捷團(tuán)隊(duì),因?yàn)槿萜鬟吔缡且粋€(gè)天然的邊界,劃分給各個(gè)團(tuán)隊(duì)。 支持關(guān)注點(diǎn)分離,并專注于開(kāi)發(fā)特定功能從而減少?gòu)?fù)雜的依賴和不可測(cè)試組件。
從模塊化容器構(gòu)建應(yīng)用程序意味著考慮協(xié)作提供服務(wù)容器的共生組,而不是一個(gè)容器提供一個(gè)服務(wù)。在Kubernetes中,這種模塊化容器服務(wù)的實(shí)施者是Pod。一個(gè)Pod是指一組共享文件系統(tǒng),內(nèi)核命名空間和IP地址的一組容器。Pod在K8s集群中是調(diào)度的基本單位,正是因?yàn)镻od中容器的共生特性要求它們共同安排在同一臺(tái)機(jī)器上,而可靠地實(shí)現(xiàn)這一點(diǎn)的唯一方法是將容器組作為原子調(diào)度單元。
當(dāng)你從Pod的角度思考時(shí),自然會(huì)出現(xiàn)一些模塊化應(yīng)用程序開(kāi)發(fā)的通用模式,這些模式會(huì)多次重復(fù)出現(xiàn)。我相信,隨著我們?cè)贙ubernetes的開(kāi)發(fā)中向前發(fā)展,將會(huì)發(fā)現(xiàn)更多這些模式,但這里有三個(gè)我們常見(jiàn)的模式:
例子1:Sidecar容器Sidecar容器拓展并且加強(qiáng)主容器,他們?nèi)诤袭?dāng)前已有的容器并且將它們完善。舉個(gè)例子,假設(shè)有一個(gè)運(yùn)行這Nginx web應(yīng)用的容器。添加另一個(gè)容器將文件系統(tǒng)與git倉(cāng)庫(kù)同步,在容器間共享文件系統(tǒng),從而實(shí)現(xiàn)git的提交并部署。但是這種模塊化實(shí)現(xiàn)使得git同步器可以交給另一個(gè)容器開(kāi)發(fā),并且跨不同的web服務(wù)器復(fù)用。因?yàn)檫@種模塊化,你只需要編寫(xiě)并測(cè)試單個(gè)git同步應(yīng)用并且提供給多個(gè)應(yīng)用使用。而如果有別的團(tuán)隊(duì)開(kāi)發(fā)了這個(gè)工具,你甚至不需要重復(fù)開(kāi)發(fā)。
例子2:Ambassador容器Ambassador容器代理外界至本地的連接。比如,現(xiàn)在有一個(gè)Redis集群,包含多個(gè)讀者和單個(gè)寫(xiě)者。 你可以創(chuàng)建一個(gè)Pod,包含主應(yīng)用和Redis ambassador容器。ambassador容器作為代理分離讀寫(xiě)請(qǐng)求分別交給對(duì)應(yīng)的服務(wù)器。因?yàn)檫@兩個(gè)容器共享一個(gè)網(wǎng)絡(luò)命名空間,即他們共享一個(gè)IP地址,因此主應(yīng)用可以用localhost訪問(wèn)ambassador服務(wù),無(wú)需通過(guò)服務(wù)發(fā)現(xiàn)。從主應(yīng)用的視角來(lái)看,就仿佛在localhost上連接了redis集群。這種方式非常方便,不僅因?yàn)椴煌膱F(tuán)隊(duì)可以管理自己的組件,而且因?yàn)樵陂_(kāi)發(fā)環(huán)境中,你可以跳過(guò)代理,直接連接到Redis集群上。
例子3:Adapter容器Adapter容器標(biāo)準(zhǔn)化輸入輸出。假設(shè)現(xiàn)在需要監(jiān)控N個(gè)應(yīng)用,每個(gè)應(yīng)用可能使用了不同的方法來(lái)輸出監(jiān)控?cái)?shù)據(jù)(比如JMX, StatsD等)。但是每個(gè)監(jiān)控系統(tǒng)都希望用一個(gè)一致的數(shù)據(jù)模型來(lái)管理收集的數(shù)據(jù)。通過(guò)使用Adapter模式來(lái)組合容器,你可以創(chuàng)建一個(gè)pod將應(yīng)用容器和適配器容器組合起來(lái),從而將同質(zhì)的監(jiān)控?cái)?shù)據(jù)轉(zhuǎn)化為單個(gè)同一個(gè)的表現(xiàn)形式。同樣的,因?yàn)檫@些Pod共享命名空間和文件系統(tǒng),這兩個(gè)容器間的協(xié)作簡(jiǎn)單明。
RefrenceSidecar Pattern
Ambassador Pattern
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/33128.html
摘要:讀取出數(shù)據(jù)時(shí),將此版本號(hào)一同讀出,之后更新時(shí),對(duì)此版本號(hào)加一。此時(shí),將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫(kù)表對(duì)應(yīng)記錄的當(dāng)前版本信息進(jìn)行比對(duì),如果提交的數(shù)據(jù)版本號(hào)大于數(shù)據(jù)庫(kù)表當(dāng)前版本號(hào),則予以更新,否則認(rèn)為是過(guò)期數(shù)據(jù)。 前言 很多人都在討論數(shù)據(jù)的指數(shù)型增長(zhǎng),以及我們將會(huì)有比想象的還要大的數(shù)據(jù)量。但是,很少有人從數(shù)據(jù)庫(kù)的角度談?wù)撨@個(gè)問(wèn)題。隨著數(shù)據(jù)量的暴漲,數(shù)據(jù)庫(kù)也需要隨之升級(jí)。這也是為什么既要了解如...
摘要:什么是仿射變換一組設(shè)備無(wú)關(guān)的坐標(biāo)被用來(lái)將所有的坐標(biāo)信息傳遞給對(duì)象。對(duì)象作為對(duì)象狀態(tài)的一部分。類代表一個(gè)的仿射變化,將一組的坐標(biāo)進(jìn)行線性映射到另一組保留了平行關(guān)系和豎直關(guān)系的坐標(biāo)中。 什么是仿射變換 一組設(shè)備無(wú)關(guān)的坐標(biāo)被用來(lái)將所有的坐標(biāo)信息傳遞給Graphics2D對(duì)象。AffineTransform對(duì)象作為Graphics2D對(duì)象狀態(tài)的一部分。該對(duì)象定義了如何將用戶空間的坐標(biāo)轉(zhuǎn)化為設(shè)備...
摘要:如果我們的容器使用,文件如下在這個(gè)例子中,我們可以重復(fù)創(chuàng)建和銷毀,同一個(gè)持久存儲(chǔ)會(huì)被提供給新的,無(wú)論容器位于哪個(gè)節(jié)點(diǎn)上。 前言 臨時(shí)性存儲(chǔ)是容器的一個(gè)很大的買(mǎi)點(diǎn)。根據(jù)一個(gè)鏡像啟動(dòng)容器,隨意變更,然后停止變更重啟一個(gè)容器。你看,一個(gè)全新的文件系統(tǒng)又誕生了。 在docker的語(yǔ)境下: # docker run -it centos [root@d42876f95c6a /]# echo H...
摘要:如果我們的容器使用,文件如下在這個(gè)例子中,我們可以重復(fù)創(chuàng)建和銷毀,同一個(gè)持久存儲(chǔ)會(huì)被提供給新的,無(wú)論容器位于哪個(gè)節(jié)點(diǎn)上。 前言 臨時(shí)性存儲(chǔ)是容器的一個(gè)很大的買(mǎi)點(diǎn)。根據(jù)一個(gè)鏡像啟動(dòng)容器,隨意變更,然后停止變更重啟一個(gè)容器。你看,一個(gè)全新的文件系統(tǒng)又誕生了。 在docker的語(yǔ)境下: # docker run -it centos [root@d42876f95c6a /]# echo H...
閱讀 2907·2019-08-30 15:44
閱讀 1970·2019-08-29 13:59
閱讀 2870·2019-08-29 12:29
閱讀 1114·2019-08-26 13:57
閱讀 3234·2019-08-26 13:45
閱讀 3363·2019-08-26 10:28
閱讀 908·2019-08-26 10:18
閱讀 1721·2019-08-23 16:52