Analysis of container and Injection in Java, their history and future.
Container:
發展歷程:
2000 年的時候 FreeBSD 開發了一個類似於 chroot 的容器技術 Jails,這是最早期,也是功能最多的容器技術。Jails 英譯過來是監獄的意思,這個“監獄”(用沙盒更為準確)包含了文件系統、用戶、網絡、進程等的隔離。
2001 Linux 也發布自己的容器技術 Linux VServer,2004 Solaris 也發布了 Solaris Containers,兩者都將資源進行劃分,形成一個個 zones,又叫做虛擬服務器。
2005 年推出 OpenVZ,它通過對 Linux 內核進行補丁來提供虛擬化的支持,每個 OpenVZ 容器完整支持了文件系統、用戶及用戶組、進程、網絡、設備和 IPC 對象的隔離。
2007 年 Google 實現了 Control Groups( cgroups ),並加入到 Linux 內核中,這是劃時代的,為後期容器的資源配額提供了技術保障。
2008 年基於 cgroups 和 linux namespace 推出了第一個最為完善的 Linux 容器 LXC。
2013 年推出到現在為止最為流行和使用最廣泛的容器 Docker,相比其他早期的容器技術,Docker 引入了一整套容器管理的生態系統,包括分層的鏡像模型,容器註冊庫,友好的 Rest API。
2014 年 CoreOS 也推出了一個類似於 Docker 的容器 Rocket,CoreOS 一個更加輕量級的 Linux 操作系統,在安全性上比 Docker 更嚴格。
2016 年微軟也在 Windows 上提供了容器的支持,Docker 可以以原生方式運行在 Windows 上,而不是需要使用 Linux 虛擬機
未來趨勢:
我認為container技術目前已經發展的相對成熟了,它和服務器虛擬化都屬於虛擬化的技術,且目標都是為了將一套應用程序所需的執行環境打包起來,建立一個孤立環境,方便在不同的硬件中移動,但為什麽我認為container技術發展會更有前景。簡單來說,常見的傳統虛擬化技術如 vSphere 或 Hyper-V 是以操作系統為中心,而 Container 技術則是一種以應用程序為中心的虛擬化技術。最明顯的差別是虛擬機需要安裝操作系統(安裝 Guest OS)才能執行應用程序,而 Container 內不需要安裝操作系統就能執行應用程序。container簡化了應用在開發測試部署環節的復雜度,相比虛擬機資源開銷更小,起停速度更快,且container推出輕量級組件化的架構,為互聯網應用提供更好的彈性。
injection:
javava EE CDI主要使用@Inject批註,以便將托管bean的依賴註入執行到其他容器托管資源。使用依賴註入的思想是應用程序用到Foo類,Foo類需要Bar類,Bar類需要Bim類,那麽先創建Bim類,再創建Bar類並把Bim註入,再創建Foo類,並把Bar類註入,再調用Foo方法,Foo調用Bar方法,接著做些其它工作。
Analysis of container and Injection in Java, their history and future.