Analysis of container and Injection in Java, their history and future.

容器是什么

    容器是一种轻量级操作系统层面的虚拟机,它为应用软件及其依赖组件提供了一个资源独立的运行环境。应用软件所依赖的组件会被打包成一个可重用的镜像,镜像运行环境并不会与主操作系统共享内存、CPU和硬盘空间,由此也保证了容器内部的进程与容器外部进程的独立关系。

  容器与虚拟机有什么区别?

   

               ▲虚拟机(左)和容器(右)的对比

 从上图,我们可以看到,容器由于省去了操作系统,整个层级更简化,容器可以在单台服务器上运行更多的应用。

虚拟化技术针对每个虚拟机的资源分配是固定的。如下图,三个虚拟机在一台计算机上运行,该计算机配备48 GB内存、12核处理器和3TB磁盘存储空间,每个虚拟机被分配了16 GB内存、4核和1TB存储空间,如果其中一个虚拟机使用的内存从不超过1GB,只存储100MB的文件系统,该虚拟机仍占用4GB内存和整整1TB的存储空间,仍是造成了大量的资源浪费。而容器则是以共享方式使用主机上的内存、处理器和存储空间。另外,虚拟机包含了完整的操作系统环境,同时还提供了对操作系统的控制支持。因此,虚拟机的规模较大,通常会达到数个G。在运行应用前,虚拟机需要预先花费几分钟来引导操作系统,然后才能初始化和运行应用程序。容器则规模较小,一般只有数个M,容器通常可以实现秒级启动。

容器技术的特点

  • \1. 极其轻量:只打包了必要的Bin/Lib;
  • \2. 秒级部署:根据镜像的不同,容器的部署大概在毫秒与秒之间(比虚拟机强很多);
  • \3. 易于移植:一次构建,随处部署;
  • \4. 弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。

容器的标准化

      当前,docker几乎是容器的代名词,很多人以为docker就是容器。其实,这是错误的认识,除了docker 还有coreos。所以,容器世界里并不是只有docker一家。既然不是一家就很容易出现分歧。任何技术出现都需要一个标准来规范它,不然各搞各的很容易导致技术实现的碎片化,出现大量的冲突和冗余。因此,在2015年,由Google,Docker、CoreOS、IBM、微软、红帽等厂商联合发起的OCI(Open Container Initiative)组织成立了,并于2016年4月推出了第一个开放容器标准。标准主要包括runtime运行时标准和image镜像标准。标准的推出,有助于替成长中市场带来稳定性,让企业能放心采用容器技术,用户在打包、部署应用程序后,可以自由选择不同的容器Runtime;同时,镜像打包、建立、认证、部署、命名也都能按照统一的规范来做。

两种标准主要包含以下内容:

  1. 容器运行时标准 (runtime spec)

            a). creating:使用 create 命令创建容器,这个过程称为创建中

            b). created:容器创建出来,但是还没有运行,表示镜像和配置没有错误,容器能够运行在当前平台

            c). running:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务

            d). stopped:容器运行完成,或者运行出错,或者 stop 命令之后,容器处于暂停状态。这个状态,容器还有很多信息保存在平台中,并没有完全被删除

         2.容器镜像标准(image spec)

            a). 文件系统:以 layer 保存的文件系统,每个 layer 保存了和上层之间变化的部分,layer 应该保存哪些文件,怎么表示增加、修改和删除的文件等;

            b). config 文件:保存了文件系统的层级信息(每个层级的 hash 值,以及历史信息),以及容器运行时需要的一些信息(比如环境变量、工作目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近我们使用 docker inspect。

容器技术的发展现状

     容器技术主要可以分为容器运行技术和容器编排技术。其中:容器运行技术主要包括Docker和rkt等;容器编排技术主要包括Kubernetes、Mesos和Swarm等。

     历经5年发展,Docker公司揭露了今年最新的Docker年度数据报告,从2013年3月PyCon大会上,Docker首度亮相之后,至今在Docker上的容器镜像下载次数已经超过了370亿次,容器化的应用有高达350万个,目前在LinkedIn网站上的Docker相关职缺也有15,000个。全球活跃的Docker使用者社群已有200多个,包括台湾也有。全球使用企业版Docker EE的企业顾客目前则约有450家。

    而过去一年,Docker功能的进展不多,主要有拥抱Kubernetes,在Docker产品中可以和Swarm并用。其次最重要的新功能是增加了RBAC角色存取控管机制,这也是企业最想要的安全机制。

Injection 

    javava EE CDI主要使用@Inject批注,以便将托管bean的依赖注入执行到其他容器托管资源。使用依赖注入的思想是应用程序用到Foo类,Foo类需要Bar类,Bar类需要Bim类,那么先创建Bim类,再创建Bar类并把Bim注入,再创建Foo类,并把Bar类注入,再调用Foo方法,Foo调用Bar方法,接着做些其它工作。

借鉴:https://www.cnblogs.com/wdyaoyao/p/10506957.html

         https://www.cnblogs.com/qcloud1001/p/9273549.html

         https://baijiahao.baidu.com/s?id=1612742857373698780&wfr=spider&for=pc

posted @ 2019-03-15 10:21  Just_Elyon  阅读(145)  评论(0编辑  收藏  举报