日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Container Injection

發(fā)布時(shí)間:2023/11/30 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Container Injection 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Container的歷史:

  2000 年的時(shí)候 FreeBSD 開(kāi)發(fā)了一個(gè)類(lèi)似于 chroot 的容器技術(shù) Jails,這是最早期,也是功能最多的容器技術(shù)。Jails 英譯過(guò)來(lái)是監(jiān)獄的意思,這個(gè)“監(jiān)獄”(用沙盒更為準(zhǔn)確)包含了文件系統(tǒng)、用戶(hù)、網(wǎng)絡(luò)、進(jìn)程等的隔離。

  2001 Linux 也發(fā)布自己的容器技術(shù) Linux VServer,2004 Solaris 也發(fā)布了 Solaris Containers,兩者都將資源進(jìn)行劃分,形成一個(gè)個(gè) zones,又叫做虛擬服務(wù)器。

  2005 年推出 OpenVZ,它通過(guò)對(duì) Linux 內(nèi)核進(jìn)行補(bǔ)丁來(lái)提供虛擬化的支持,每個(gè) OpenVZ 容器完整支持了文件系統(tǒng)、用戶(hù)及用戶(hù)組、進(jìn)程、網(wǎng)絡(luò)、設(shè)備和 IPC 對(duì)象的隔離。

  2007 年 Google 實(shí)現(xiàn)了 Control Groups( cgroups ),并加入到 Linux 內(nèi)核中,這是劃時(shí)代的,為后期容器的資源配額提供了技術(shù)保障。

  2008 年基于 cgroups 和 linux namespace 推出了第一個(gè)最為完善的 Linux 容器 LXC。

  2013 年推出到現(xiàn)在為止最為流行和使用最廣泛的容器 Docker,相比其他早期的容器技術(shù),Docker 引入了一整套容器管理的生態(tài)系統(tǒng),包括分層的鏡像模型,容器注冊(cè)庫(kù),友好的 Rest API。

  2014 年 CoreOS 也推出了一個(gè)類(lèi)似于 Docker 的容器 Rocket,CoreOS 一個(gè)更加輕量級(jí)的 Linux 操作系統(tǒng),在安全性上比 Docker 更嚴(yán)格。

  2016 年微軟也在 Windows 上提供了容器的支持,Docker 可以以原生方式運(yùn)行在 Windows 上,而不是需要使用 Linux 虛擬機(jī)。

為什么需要容器

  其一,這是技術(shù)演進(jìn)的一種創(chuàng)新結(jié)果,其二,這是人們追求高效生產(chǎn)活動(dòng)的一種工具。

  隨著軟件開(kāi)發(fā)的發(fā)展,相比于早期的集中式應(yīng)用部署方式,現(xiàn)在的應(yīng)用基本都是采用分布式的部署方式,一個(gè)應(yīng)用可能包含多種服務(wù)或多個(gè)模塊,因此多種服務(wù)可能部署在多種環(huán)境中,如虛擬服務(wù)器、公有云、私有云等,由于多種服務(wù)之間存在一些依賴(lài)關(guān)系,所以可能存在應(yīng)用在運(yùn)行過(guò)程中的動(dòng)態(tài)遷移問(wèn)題,那這時(shí)如何保證不同服務(wù)在不同環(huán)境中都能平滑的適配,不需要根據(jù)環(huán)境的不同而去進(jìn)行相應(yīng)的定制,就顯得尤為重要。

injection:

  在軟件工程中,依賴(lài)注入是一種技術(shù),其中一個(gè)對(duì)象(或靜態(tài)方法)提供另一個(gè)對(duì)象的依賴(lài)關(guān)系。依賴(lài)項(xiàng)是可以使用的對(duì)象(服務(wù))。注入是將依賴(lài)項(xiàng)傳遞給將使用它的依賴(lài)對(duì)象(客戶(hù)端)。該服務(wù)是客戶(hù)所在端的一部分。將服務(wù)傳遞給客戶(hù)端,而不是允許客戶(hù)端構(gòu)建或找到服務(wù),是模式的基本要求。

  Dependency Injection (DI) 就是在類(lèi)之間的互相引用,都采用Interface來(lái)代替。后臺(tái)有Container,每個(gè)Interface包含一個(gè)Object,實(shí)際上這是一個(gè)Singleton的概念,所以在使用Singleton的時(shí)候,要避免使用DI,雖然DI支持非Singleton,但是感覺(jué)邏輯上不太符合常理。

優(yōu)點(diǎn):

A. 減少依賴(lài)關(guān)系通過(guò)Interface互相聯(lián)系,這樣兩個(gè)組件之間關(guān)聯(lián)少一些。

B. 更加方便重復(fù)使用只要是Interface相同,組件可以在不同的場(chǎng)合中重復(fù)使用。

C. 更容易測(cè)試Test 的代碼不需要和使用代碼有任何關(guān)聯(lián),設(shè)置好Container,然后組件就自動(dòng)生成。與正常運(yùn)行,完全相同的測(cè)試環(huán)境,不需要考慮構(gòu)造函數(shù)等等。

D. 更容易閱讀,需看Interface即可,一旦測(cè)試封裝結(jié)束后,不需要讀里面的代碼。

E. 減少Dependency Carry就是如果在最底層的引用某個(gè)變量,需要從最頂層一點(diǎn)點(diǎn)傳遞下來(lái),如果用DI,就可以跳過(guò)中間部分。這個(gè)說(shuō)得是Singleton,如果頂層的變量有一些特定的值,無(wú)法從Container中生成的話(huà),就沒(méi)必要了。

?

  

轉(zhuǎn)載于:https://www.cnblogs.com/BleachCurtain/p/10586220.html

總結(jié)

以上是生活随笔為你收集整理的Container Injection的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。