《程序员》:Docker技术商业落地的思考
Docker的火热,催生了人们对于其商业模式的探讨,虽然目前Docker还有很多有待完善之处,但这并不妨碍人们对于Docker的追捧,但我们也应理性地看到,Docker并不是万能药,对其商业模式的探讨,将有力促进Docker的健康发展。
Docker技术虽然刚问世3年,但其发展如火如荼,受到大量企业客户和个人开发者的追捧,作为一项开源技术,Docker有一点和Java很像,那就是它们都是标准。作为标准的企业级应用开发语言,绝大多数企业内部的业务应用都是用Java开发的,而Docker正在成为应用封装的标准,未来企业内部的业务应用大多会封装成Docker的形式。
标准化最大的好处是带来效率的提升。Docker经常被类比为集装箱,集装箱的出现极大地提升了货物装载的效率,集装箱把货物的封装形式标准化,为码头、货轮、卡车等货运全产业链各环节都带来了标准化。类似地,Docker把应用封装成标准化的容器应用,使应用的交付、部署、运行、更新等全生命周期的各个环节都变得标准,极大地提升企业的应用管理效率。
Docker技术火热的同时,人们也在思考如何商业化的问题。本质上讲,Docker技术如何商业化,跟其他任何开源技术商业化没有区别。以Java技术为例,Java技术本身是开源的,Java的标准版、企业版也都是开源的,而基于Java的中间件是商业化的闭源产品,Java中间件提供了企业级Java应用的标准运行环境,解决了Java应用发布(部署war包)、网络通讯(消息队列)、存储访问(数据库连接管理)等多方面需求,方便了企业在生产环境使用基于Java开发的业务应用。Java中间件产品的商业化非常成功,比如WebLogic、WebSphere,直至今天,它们仍然在企业级应用领域占有重要地位。与之相类似,Docker技术本身开源,基于Docker的PaaS平台很有希望成为商业化产品。
通常人们把云计算分为三层,IaaS、PaaS、SaaS。IaaS管理资源,提供资源的弹性;PaaS管理应用,提供应用的弹性;SaaS面向服务,提供服务的弹性。过往十来年云计算的发展,主要集中在IaaS和SaaS领域,IaaS领域既有成熟的开源技术(OpenStack)也有商业巨头(AWS),SaaS领域也有商业巨头(Salesforce),但是PaaS领域一直发展得不温不火,其开源技术(CloudFoundry)和商业公司(Heroku)都没有大获成功。
Docker的出现把应用都变成容器应用,使得应用的打包、交付、运行方式变得标准了,这样PaaS平台只需要管理标准的容器应用,为容器应用提供全生命周期的标准化管理,比如打包、测试、分发、部署、运行、更新等。可以说,Docker的出现,使得PaaS平台也变得标准了。在Docker出现之前,PaaS平台要支持各种形式的应用,比如CloudFoundry要支持Java、Python、PHP等各种常见语言,从编译开始构建应用,然后调度运行,由于应用没有标准化,CloudFoundry为了支持各种应用的各种需求,变得异常复杂。Docker成为应用的标准封装、交付、运行方式,推动了PaaS平台的标准化,降低了PaaS平台的复杂度,提升了PaaS平台的易用性。这样基于Docker的新一代PaaS平台,由于更加标准化、更加轻量、更加简便,极大地方便了企业使用PaaS平台来落地Docker。新一代PaaS平台很有可能成为Docker技术商业落地的具体产品形式。
Docker技术以PaaS平台的形式在不同类型的企业客户落地来实现商业化有不同的方式。比如提供基于Docker的公有PaaS服务,也称为Container-as-a-Service(CaaS);再比如给企业提供私有PaaS平台。下面主要讨论后面一种方式。
对私有PaaS平台有需求的客户主要是传统大型企业,比如金融、运营商、能源、广电等。这些传统企业使用私有云平台并不是因为技术原因,主要是由于其行业监管缘故,数据比较敏感,从而无法使用公有云。近年来,传统企业的业务场景发生了变化,其传统业务逐步向互联网相关业务转变,传统企业需要新一代云计算IT架构支撑其互联网业务,对基于云计算的新一代IT架构需求越来越强烈。
传统企业的现有IT架构主要还是基于国外的商业化软硬件产品,这些产品搭建的IT基础架构偏传统,跟互联网公司普遍采用的云计算架构相去甚远。原因在于,传统业务跟互联网公司的业务场景不一样,传统业务的日常业务量相对恒定,业务本身不会经常变化,比如银行网点每天的业务量不会变化很大,银行网点自身的业务也不会总是变化,但是互联网业务的业务量变化非常剧烈,比如淘宝双11当天的业务量是平时的数十倍,而且互联网业务的迭代非常快,像Google、Facebook之类的互联网公司每周都会更新业务应用。传统IT架构在设计之初就是面向业务量平稳的场景,因此无法支持业务量剧烈变化的场景,而不可预测的业务量暴增会导致传统IT架构无法承载。再者,传统IT架构也不支持业务应用频繁变化的场景,传统业务的更新频率至少是以月为单位。
基于Docker技术的PaaS平台能很好地帮助传统企业支撑其互联网业务。比如基于Docker的PaaS平台能很好地提供应用的弹性,既支持业务应用弹性扩展,又支持业务应用快速迭代更新,非常适合互联网业务场景。
2016年初,我们应某TOP3视频网站的要求,以网络春晚抢红包为模拟业务场景,设计了联合解决方案。我们作为“中间件”层,以Docker的方式解决了高并发挑战。一方面,我们拥有基于缓存的解决方案,将依赖于数据库的操作尽量置于缓存中进行,提高应用的性能。另一方面,我们将底层计算资源组成一个资源池,向上承载核心业务,实现组件的横向扩展。
此外,基于Docker的私有PaaS平台提供的容器编排能够帮助传统企业客户将复杂的业务应用以独立的容器组件方式运行,满足客户对于稳定可靠的核心需求。借助容器技术,这种私有PaaS平台实现了应用的快速部署,使应用的交付变得标准,极大地消除技术部署的局限性,提高客户产品的交付及运维效率。上海证券交易所就是一个非常有代表性的客户,上交所在自身业务系统进行了Docker化的探索和实践,非交易类应用,包括软件应用测试平台、行情监控、行情播报等应用正在逐步往容器上迁移。通过将这些应用置于同一个容器平台,上交所使测试平台得以统一,解决了原先异构环境带来的麻烦,资源池化使平台拥有自动化运维的能力,减少后期人力驻场维护的成本,提高应用测试效率。
传统企业在落地私有PaaS平台的时候也会遇到各种各样的困难。
首先,传统企业已有的IT系统和基于云计算的IT系统在管理和运行方面存在巨大的差异。传统企业常见的IT管理组织架构分为开发中心和数据中心(可能还有测试中心)。开发中心满足业务部门的需求,负责业务需求的实现;数据中心负责运维业务应用,保证业务稳定运行。对于金融、运营商这样的传统企业,保障业务稳定是最为重要的目标。因此,他们采用了严格、复杂的IT管理流程,开发中心和数据中心各司其职,进而保证业务稳定。这种严格、复杂的IT管理流程适用于传统业务,但当传统企业面向互联网业务时,这种流程就不适用了。根本原因是互联网业务处于高度竞争的状态,业务需求频繁变化,相应地要求业务应用能快速响应业务需求变化,但是传统IT系统无法适应这种场景。
基于Docker的PaaS平台,能帮助传统企业实现敏捷开发、微服务架构、持续集成、持续交付、自动化运维等各种源自互联网公司的DevOps方法,快速响应业务需求的变化。但是,传统企业无法直接采用这样一套PaaS平台,因为如果要按照互联网公司那样实现DevOps,促进开发和运维的融合,肯定要改变传统企业已有的IT管理方式和流程,包括组织架构的调整,这对于传统企业绝不是一朝一夕就能做到的。针对这一困难,传统企业也提出了双模架构,所谓“双模”是指传统IT模式和新IT模式,其传统业务仍然采用传统IT模式来管理,其互联网相关新业务采用新的基于云计算的IT模式来管理。这样传统企业可以基于全新的云计算IT架构来支撑其互联网业务,并采用DevOps方法来管理新的IT架构。
再者,传统企业对于业务的稳定性非常敏感,新技术的不稳定性是传统企业采用新技术的最大顾虑。Docker技术本身还有一些不成熟和待完善的地方,特别是网络管理和存储管理方面,还很不成熟。Docker目前的网络方案还非常新,缺乏大规模生产实践,最新的Docker 1.12版采用的网络方式是Overlay,也是一种SDN。Docker的Overlay网络性能还不够好,跟常见OpenStack的SDN方案还有很大差距。而且,目前Docker本身还不能对应用的网络带宽使用进行限流,如果一个应用对网络带宽消耗很多,有可能影响其他应用的网络使用。传统企业,特别是金融客户,对网络的需求比较复杂。金融有很多业务应用因为监管的需求,必须要做到网络隔离,保障业务应用的安全。此外,金融的很多业务应用需要保证数据的强一致性,在分布式环境下,比如同城两数据中心双活,这些强一致性的应用对网络的延迟有严格要求,如果达不到要求,那么强一致性就很难保证。Docker的存储管理就更弱了,目前只能支持把宿主机的目录映射到Docker内部来实现持久化存储。基于Docker的一些第三方存储解决方案都很新,比如Flocker,虽然能提供分布式环境下容器应用的数据存储、恢复、迁移,但都还没有大规模生产实践。
Docker作为云计算领域最为火热的技术,毕竟只诞生三年左右,其未来的技术发展方向、商业模式等还都处在早期摸索阶段,但Docker技术发展极为迅猛,正在被广大企业客户接受,相信很快就会进入成熟发展期,其技术发展方向和商业模式很快就会明确。
作者简介:王璞,数人云创始人
本文节选自《程序员》,更多精彩请订阅《程序员》