最近几十年,硬件只是在不断提升性能而软件技术则层出不穷百花齐放的发展,看起来软件技术的发展似乎找不到头绪。其实软件和硬件是互相依赖交叉发展的。软件技术发展总的来说有2个基本原则:1.充分发挥出硬件的最大性能;2.减少人力成本;
当硬件计算能力变得越来越强时,为了释放人类的计算需求最大化利用硬件计算能力,各种虚拟机得以开发出来以提高硬件的利用率。
当软件存储量和计算量远远超过普通的单台电脑硬件上限时,硬件上就出现了瓶颈,出于成本考虑软件上的“分布式”解决方案得以变得流行。因此可以猜想,当将来的普通硬件计算能力和存储能力提高到某个阀值,也许就不需要复杂的“分布式”软件技术了。
当互联网软件的业务复杂度越来越高,同时迭代速度变的越来越快,虚拟机对硬件的利用率出现瓶颈,因为虚拟机很难根据当前业务量动态调整其占用的硬件资源,同时虚拟机的开关响应速度跟不上业务快速迭代的节奏,因此容器化技术得以流行。
如图所示,紫色方块代表操作系统,虚拟机中的操作系统彼此之间的内存和CPU是固定的不可共享的,假设应用程序1和应用程序2占用了大量内存性能下降,但是应用程序3所在的虚拟机有很多内存闲置,然而因为虚拟机的完全隔离性,无法充分的发挥硬件资源的利用率。另外硬盘上的只读文件(公共依赖)也是不可共享的,虽然这些公共的只读文件永远不会被修改,但是也必须重复的复制到每一个虚拟机里面,最终浪费大量硬件存储资源。
那么容器化技术是怎么一回事呢?容器可以看成是一种轻量化的虚拟技术,容器之间彼此隔离,但是又共享当前操作系统,同时也会尽可能的共享公共的依赖文件和资源。Linux系统内核原生对容器化进行了支持,因此容器的执行不需要额外的虚拟化支持,它是内核级别的虚拟化,相对于虚拟机几分钟的启动时间,容器只需要几秒钟就可以启动成功,这个特性对DevOps中的“持续集成,持续测试,持续交付”来说非常关键。
当前最流行的容器化解决方案是Docker,三大主流操作系统都可以快速安装使用,而且网上已经有了大量的中英文教材,你没有理由不立马尝试一下,拥抱Docker!
(本文首发的