为何说容器技术会引领新的IT技术变革

Posted by 小罗 on January 31, 2019

前言

为了帮助大家理解,先列出核心思想:

  • 先讲述集装箱提升全球运输业效率的故事
  • 再拿容器技术与集装箱做联系对比-Docker的镜像打包技术其实就是实现了应用软件的发布和运行的集装箱化
  • 说说容器技术,尤其是Docker的杀手锏技术
  • 最后容器技术的使用现状

集装箱颠覆全球运输业 海运集装箱

  在上海、深圳或者香港的货运港口,停靠在码头的巨大的集装箱船和岸边堆场里叠起来的数万个金属集装箱;旁边数十米高的大型起重机臂不停地吊起这些几十吨的集装箱,在几分钟内安放到集装箱船上;几小时后巨轮拔锚启航,上面承载了数千个集装箱。如果你曾见识过此情此景,一定会赞叹现代航运的高效率和大容量,以及依托它而建立的广泛的全球贸易。

  上个世纪60年代以前,人们在码头装载货物还都是以散件的方式进行堆砌和运输!   以“勇士号”为例,在一次从布鲁克林到不来梅的运输中,货物装卸都是由普通的码头工人来完成的,它装载了5015英吨的货物,主要是食品、日用品、邮件、机器和车辆的零部件以及53辆车。这批货物的数量达到了惊人的194582件,而且大小和种类各不相同

传统货运装卸方式

  所有的货物都是码头工人一件一件放到货盘上,再把货盘降到船舱中一件一件搬下来堆好。他们装完这艘船总共用了6天时间,其中还有一天是因为罢工而浪费掉了。

  横跨大西洋的航行用了10天半的时间;在不来梅港,码头工人是昼夜不停地干活儿,他们卸船用了4天时间。总而言之,这次航行 有一半时间都花在码头上。这船货物中的最后一批到达其最终目的地的时间,是”勇士号“停靠不来梅港之后的第33天,是它从纽约港起航后的第44天,是其中最早起运欧洲的货物从美国的来源地上路后的第95天。

运输成本

  运送这批货物的总成本达到了23.7万美元,还没有算上”勇士号“返回纽约的成本以及运输过程中暂时存放货物的支出。

  在这个总额当中,海上航行本身的支出仅占11.5%,而在航行起点和终点的两个码头上,货物处理的费用占到了总支出的36.8%。研究者注意到,如果不是因为德国码头工人的工资比美国的码头工人低1/5,港口成本肯定还会高出很多。研究者最后得出的结论是,要降低总的运输成本,最好的办法是降低在美国各港口接收、储运、装载离岗货物的成本

  他们还进一步提出忠告说,政府和企业应该提高码头工人的劳动生产率,消除低效率的工作惯例,尽早彻底地反思整个流程。他们在研究报告中写道:“或许,补救的方法就在于找到可以避免散件处理的包装、搬运和装载货物的方法。”

为什么非要装载、卸载、转移和再装载那么多的散件货物?为什么不把货物装进大箱子里,然后就只装卸和搬运这些箱子?

集装箱的效率

  运输业大量采用集装箱后,由咖啡制造商发出的一只35吨的集装箱,可以在马来西亚离开工厂装上一艘货轮,经过16天的航行到达9000英里之外的洛杉矶。一天之后,这个集装箱被一列火车运到芝加哥,并被随机转移到了一辆开往辛辛那提的卡车上。   在这一路上,很可能没有人碰过集装箱里的东西,甚至根本没有人打开过它。同传统的货轮相比,集装箱船的装卸只需要大约1/6的时间和1/3的劳动力。

  集装箱最大的成功在于其产品的标准化以及由此建立的一整套运输体系。无论货物的体积、形状差异有多大,最终都被装载进集装箱里。由于要实现标准尺寸集装箱的运输,堆场、码头、起吊、船舶、汽车乃至公路桥梁、隧道等,都必须适应它在全球范围内的应用而逐渐加以标准化,形成影响国际贸易的全球物流系统。由此带来的是系统效率大幅度提升,运输费大幅度下降,地球上任何一个地方生产的产品都可以快速而低廉地运送到有需求的地方。

容器技术与集装箱

  目前容器技术的代表就是Docker,我们把集装箱和Docker拿来对比一下:

容器与集装箱对比

Docker 创始人 Solomon Hykes显然是研究过集装箱给货运行业带来的革命性变化并从中获得了灵感,要不然docker的logo怎么会是大鲸鱼驮着大量的集装箱呢?而Docker的原始英文的意思是:码头工人!!! docker的logo

# 为何Docker技术如此诱人

容器技术正在快速改变着公司和用户创建,发布,运行分布式应用的方式,已经被大量的应用在用户的生产环境中,其核心技术包括:

  • 资源独立且隔离   资源隔离是云计算平台的最基本需求。Docker通过linux namespace, cgroup限制了硬件资源与软件运行环境,与宿主机上的其他应用进程实现了隔离,做到了互不影响。不同应用或服务以“集装箱”(container)为单位装“船”或卸“船”,“集装箱船”(运行container的宿主机或集群 )上,数千数万个“集装箱”排列整齐,不同公司、不同种类的“货物”(运行应用所需的程序,组件,运行环境,依赖)保持独立。
  • 环境一致性   开发工程师完成应用开发后构建一个docker image,基于这个image创建的container就是一个集装箱,里面打包了各种“散件货物”(运行应用所需的程序,组件,运行环境,依赖)。无论这个集装箱在哪里:开发环境、测试环境、生产环境,都可以确保集装箱里面的“货物”种类与个数完全相同,软件包不会在测试环境缺失,环境变量不会在生产环境忘记配置,开发环境与生产环境不会因为安装了不同版本的依赖导致应用运行异常。 这样的一致性得益于“发货” (build docker image) 时已经密封到”集装箱“中,而每一个环节都是在运输这个完整的、不需要拆分合并的”集装箱“。

  • 轻量   相比传统的虚拟化技术(VM),由于docker容器是共享宿主机内核,中间没有hypervisor层,因此docker在cpu, memory, disk IO, network IO上几乎没有性能损耗。同时,容器的本质是进程,因此容器可以快速的创建、启动、销毁。

  • 一次构建,到处运行   这个特性着实吸引了我,“货物”(应用)在“汽车”,“火车”,“轮船”(私有云、公有云、物理机等服务)之间迁移交换时,只需要迁移符合标准规格和装卸方式的“集装箱”(docker image),削减了耗时费力的人工“装卸”(上线、下线应用),带来的是巨大的时间人力成本节约。 这使的仅有少数几个运维人员就可以运维超大规模装载线上应用的容器集群成为可能,如同60年代后少数几个机器操作员即可在几小时内连装带卸完一艘万吨级集装箱船。

举个鲜活的例子:我所在的部门有人希望使用或为其他人提供大数据技术栈中的某些软件服务,如:Elasticsearch(ES), Kibana, Spark, Kafka, Redis, MongoDB。一些人甚至只是想做些简单的功能验证,而他们却要先花一上午甚至一天去依次完成下载软件本身、修改ulimit、设置环境变量、下载JAVA运行环境、编译某些组件、安装其他依赖包、创建目录、进行若干次容易出错的配置、经历3次以上程序启动失败。可悲的是,下次如果想在其他服务器上提供类似的服务仍要重复前面的经历,更别提把这个任务交给一个新人负责完成需要多长时间。他们就像50年前可怜的码头工人一样,四肢发达,头脑简单,重复着旧式散货装卸模式,抱怨着活多钱少。其实这些准备工作我可以只用一条docker pull 命令把我需要的docker镜像拉取下来并docker run起来就可以直接在环境里验证功能了!

容器技术的发展现状

截止到2018年第一季度,Docker的相关使用情况如下: Docker报告   容器镜像已经被下载了370亿次,已经有大约350万个应用运行在容器里!国内的大型运营商(某南方移动)已经将96%的业务做了容器化改造,目前在金融、证券、以及各类企业都在做业务容器化的改造,以此适应不断变化的市场需求和消费者需求,更别提阿里、腾讯、百度、京东等互联网巨头。因此我个人感慨如下:

  • 容器技术是一项伟大的变革,他已经实实在在的影响到企业是否能够以最快的速度把新的产品功能交付给消费者!
  • 随着kubernetes的不断完善,容器编排解决方案已经较为成熟,所有你能接触到的公有云厂商以及私有云厂商都推出了基于kubernetes容器编排平台或工具,以方便客户实施自己的容器云平台解决方案,比如Rancher、openshift、IBM-ICP等等。
  • 基于容器的业务迁移将变得更加容易,就如同集装箱在轮船、火车、汽车之间迁移一样,无论是公有云平台还是私有云平台只要有docker引擎就可以把企业自有的docker镜像运行起来,只要有kubernetes就可以把成百上千个容器编排起来,这才是真正做到IAAS层的解耦!

我深信,容器技术将在未来1到2年内全面普及开来,大量企业将会采用docker以及kubernetes来承载自己的业务!

Docker

参考:https://blog.csdn.net/gaoyingju/article/details/49616295