容器技术对软件开发和运维带来的革命性变化

 一个小小的革新,改变了整个世界 

  容器,从字面的意思上理解就是装东西的东西。研究什么装、什么被装固然很有意思,但研究为啥有容器也很有意思。

  古代容器中最著名的就是青铜大鼎,历史博物馆必放之物。古老的容器解决了盛放各种物品的问题,同时也建立了量化的标准,比如“九鼎”。现在容器中最著名的就要数集装箱了(其在英文中也是container),集装箱没有什么技术含量,无非就是建立了一个运输的标准,但它完全改变了船运业,进而改变了所有的运输业,甚至改变了生产和消费方式,给大家带来了全球化和全球供应链。具体可以参看《集装箱改变世界》这本书。

  有了集装箱,货物可以封装在其中,然后标准化地在不同的轮船、火车、卡车上进行运输。运输的效率提高了,成本降低了,有很多以前无法享受全球化的商品(比如水果)就可以在全球流通了。

  在软件产业中也有同样的现象。我们有各种各样的软件,例如重型的传统数据库、新型的并行数据库、易扩展的Web应用、CPU密集型的计算应用等,这些软件需要运行在各种主机、各种云平台和各种操作系统中。多对多的关系令人感到抓狂,为什么不能把这些不同的应用都装到容器里面然后运行在不同的主机、环境和操作系统之中?这就是容器技术在软件产业中的拓展。

以Docker为代表的容器技术,就像运输业的集装箱一样,实现了Build(按照标准把货物装入集装箱)、Ship(把集装箱运行到任何地方)、Run(通过多种交通工具来运输集装箱)。

1为什么Docker成为了容器技术的事实标准?

  容器技术由来已久。年Namespace技术就开始提交到Linux内核,为进程之间提供了六个方面的隔离;年Google开始在集群中使用Borg来进行编排;年,google提交了一个重要的限制进程组所使用资源的组件cgroup到linux内核之中;年,Redhat发布了libvirt,作为第一个容器实现;年8月Linux社区推出了LXC方案;年,Twitter开始启动了Mesos项目;年是一个非常重要的时间节点,Docker横空出世,容器虚拟化有了统一的平台,到本年底docker迅速发展到了0.7版本,开始支持层叠文件系统;到了年6月,Google发布了基于Docker的编排平台Kubernetes,给容器技术添加了一把火。

  所有的容器技术都离不开cgroup和namespaces技术,但是这两项技术早于Docker很多年出现,且在libvirt和LXC两个容器项目中都有使用,但为什么Docker这么火(Docker最早的runtime其实就是LXC)?成为了容器的事实标准?可能会是因为如下几个原因:

1、Docker明确区分了容器和镜像,并定义了镜像标准,这个标准是其能实现BuildShipandRun的关键。

2、镜像采用了层叠文件系统,这样不但降低了Ship过程中网络数据的传输量,同时也大大降低了使用同样基础镜像的容器镜像的大小,使得“一个进程一个容器的封装形式”成为可能。

3、由于Docker有统一的镜像格式,而且这种镜像格式采用了层叠文件系统,于是Docker成功建立了一个以Dockerhub为梯子的容器镜像周边生态。我们需要某个程序的时候不再需要下载和编译,仅仅Dockerrun就可以了,把互联网当成自己的程序库。

  Docker第一次赋予了开发和运维人员真正的一次编译、多次运行的能力,而且这些运行是可以跨域不同的环境(开发、测试、预上线和生产)、不同的时间、不同的地域、不同的公司。

镜像标准就是Docker赋予容器技术的“梯子”,它使得技术人员的成果可以方便地建立在自己或者他人之前的工作基础之上,再困难的事情,有了一层一层的梯子搭起来,终究会解决的。

  随着计算机硬件发展的不同时代,曾经有不同的“梯子”存在。在硬件层面,Ghost镜像曾经就是其中一种,但它没有解决大量硬件依赖的问题;虚拟机时代,虚拟机镜像,比如VagrantImage也是一种,但这些文件都很大,而且并没有形成通用的虚拟机镜像标准;Java等语言也提供了语言级虚拟机JVM,但其因为语言相关而不够灵活。所以说在容器级别实现的这个标准粒度和标准化层度都非常合适。

  我们经常看到容器和虚拟化的比较,但是其实更加合适的是容器和进程的比较,因为容器实际上就是在进程之上加入了各种限制而已。它是一个操作系统之上的虚拟化方案,因此更加轻量级,对资源的损耗也更加少。

2容器技术改变了什么?

  由于Docker定义了容器镜像的标准,就像集装箱一样定义了运输的标准然后改变了运输业一样,Docker首先改变了软件交付这个环节。任何组件、应用或者微服务再也不需要以二进制代码或源码的形式进行交付,不用遇到不同的操作系统、不同的类库、不同编译器、不同的外部依赖的问题。可以方便地迁移到任何地方。不仅在开发、测试、预上线和生产环境中迁移;也可以在不同的项目中被方便地重复使用;可以在不同的公司和地点被多次地部署。一个命令就解决了之前需要低水平重复的很多工作。

  由于解决了交付的难题,Docker给DevOps带来了新生。自从Docker出现后,DevOps变得火热,之前使用vagrant、ansible或saltstack实现的DevOps流程和工具终究不如Docker那样彻底。从此开发人员和运维人员沟通的基础变成了DockerImage和它们的编排文件。

  同样的,Docker也改变了目前的软件开发模式,持续集成(CI)和持续交付(CD)都变得非常容易。不但老牌的Jenkins工具率先支持了Docker来进行CI和CD,更是有Drone这样新一代的工具原生就支持Docker,不但自己是以Docker方式运行,所有的插件也是以Docker的方式运行。CI/CD成了谈Docker的时候必谈的一个应用。

  Docker带来的最大改变恐怕还是要在软件架构方面,它使得我们可以负担得起微服务的创新架构。微服务架构带来了开发效率和运行效率的提升,但如果缺少适当的工具就会有很高的运维成本,Docker改变了这一切。开发者可以不用使用SpringCloud或Dubbo这样的Java语言级框架;并且Docker接管了资源控制、安全隔离、网络可达、日志、运行监控、健康检查等复杂、琐碎且重复的事宜。Docker降低了我们应用微服务的难度,使得架构师可以将功能拆小,小意味着简单、可扩展性强、可靠性高、可以自由组合。

  但是顺带说一句,如果只是几台机器的小规模部署系统,仅用Docker在传统工具下自动部署就可以,但是一个大型的、多租户的系统,还是需要一个完善的容器编排框架,并将所有容器难以承担的有状态后端服务进行管理,那就是PaaS。PaaS使得微服务的部署不用关心物理集群、可以跨集群进行访问、微服务可以形成组合并有效隔离、集中收集日志、维持全局微服务状态啊,PaaS还提供了服务注册和发现的框架,使得应用不需要自己实现。当然PaaS还集中管理了持久化卷以及诸如Mysql之类的BackingService,使得微服务的开发和运维工作进一步简化。

  亚信数据在多年服务于大企业的经验技术上,提供了DataFoundry这一大数据PaaS平台,将24种大数据能力作为后端服务,并支持大数据应用灵活构建。可以通过







































北京市中医白癜风医院
白癜风医院怎么样



转载请注明:http://www.nylrzx365.com/glgj/glgj/726.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了