在 2012年的时候,我在豆瓣做 Douban App Engine ( a.k.a DAE)。那时候我遇到了一个问题,就是如何隔离 Engine 的 Runtime 和应用本身的 Runtime,如果不学 GAE 那样大规模 Mock Python 的话,无论怎么做隔离性上终究不会太完美。
在 2013年春节过后,DAE 在豆瓣内部已经支撑起多数服务和应用,而我也因为职业规划准备离职去穿越亚洲,这时候一个叫 Docker 的虚拟化方案进入了我的视野。回想起 2012年我遇到的隔离性问题的,当时的我立刻被这个方案给吸引住了,即便在战火纷飞的阿富汗腹地,也靠着仅有的当地网络关注着这个项目的状态。
从我个人来看,随着业务的增长服务也会被逐步拆分,为了提高整体的服务器利用率和调度效率,平台自动化将会是一种比较好的选择。对应用耦合的,一般称为 PaaS,平台即服务,如果对硬件耦合的,一般称为 IaaS,基础设施即服务。如果纯粹靠 PaaS,隔离性上会比较让人担忧,如果是完全的 IaaS,过重的 overhead 会使得硬件利用率达不到预期以至于成本的失控。有些开源项目结合 IaaS 和 PaaS 去做自动化平台在我看来也不是一个很好的选择,毕竟公司千千万万,业务技术线也不能一概而论,二次开发也需要考虑平衡硬件和人力成本。所以我觉得一个好的平台应该做到严谨的隔离,无痛的扩展,简单的部署,可靠的支撑等几个方面,同时也不能损耗太多的性能,并且能易于上层的开发,降低公司成本。Docker 本身是个不错的基础技术,在隔离性和性能上取得了较好的平衡,相比之下 VM 虽然隔离很严谨,相对性能就损耗比较高了。并且 Docker 提供了一系列适合二次开发的 API,可以方便的低成本的做出一个适合公司本身自己技术栈的自动化平台,这对于很多发展型的公司而言那是极好的。
随着时间的推移,在容器方面我们也看到了很多后来者对于 Docker 的挑战,如 CoreOS 带来的 rocket,如有着更高隔离性的 Hyper 等。但在目前来说,我认为 Docker 的地位短时间来说很难被改变。一来大多数的公司主要以 Docker 作为基础组件构建对内的自动化平台,对更高层次的内核安全性需求没那么强烈,另外一方面基于 Docker API 的周边组件也趋于成熟,短期内其他竞品没那么完备的生态环境。随着 Docker 本身母公司的其他产品诸如 Docker Machine,Docker Swarm 等的成熟,以及业界第三方的产品如 Kubernetes 和 Mesos 等,Docker 在集群编排和调度领域的优势还会进一步扩大。
我依稀记得 2014年我来到芒果TV开始搞 Docker 相关自动化平台时的情景,虽然当时 Docker 在业内很火,但是实际上在公司内部使用的还是太少,太多公司只是用其做做实验性质的测试和体验。在 2015 年初始,新浪和腾讯两家的分享引爆了国内的容器圈,使用 Docker 作为其服务器集群调度和编排的公司如雨后春笋般冒了出来。同时 Docker 本身也在不断的进化,如 1.5 引入的 stats 接口,如 1.7 引入的日志模式,如 1.8 引入的 Volume,Docker 虽然不完美但已经足矣胜任生产环境下大规模使用。而未来即将到来的 libnetwork 等技术,也将会在 SDN 这块带来新的变革。
我不好说未来一定会怎样,是 Docker 胜出亦或是其他技术,但 Docker 所引发的这个趋势,将会在未来的一段日子里面,不断的影响着平台层面的开发人员。变革,早已开始。