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