Docker容器的应用场景之一就是构建企业私有云平台,它简单、轻量特点不仅可以降低私有云的构建难度,而且还能更高效的利用物理资源。同时,容器在安全性方面的短板恰恰因为私有云的应用场景而显得不再重要。但基于容器的私有云也有不少挑战,比如网络、监控、用户习惯等方面都需要有好的解决方案。大众点评在2014年7月就基于Docker搭建了内部私有云平台,目前平台承担了大部分的线上的业务,实例数2800个左右,Docker物理集群300多台。InfoQ记者采访了大众点评云平台首席架构师盛延敏,听他分享大众点评私有云平台实战过程中踩过的坑和经验教训。另外,盛延敏还将在 8月28日~29日举办的CNUTCon全球容器技术大会 上分享题为《大众点评的容器私有云实战》的演讲,敬请关注。
InfoQ:点评是从什么时候开始使用Docker构建私有云平台的?未使用容器云之前,点评内部有基于其他技术搭建私有云吗?基于Docker的私有云会有哪些优势?有哪些挑战?
盛延敏:我们从2014年开始基于Docker搭建点评的私有云平台。原先点评的应用都是部署在KVM上的,大量重复性的操作耗费了运维同学不少的时间和精力,特别是扩容和缩容这块。所以就萌发了使用Docker搭建一个私有云平台的想法,借助云平台,将应用标准化,运维自动化。从目前使用情况来看,基本达到了原先设想的目标。
未使用容器云之前,点评内部谈不上使用过私有云。从实践来看,基于Docker的私有云可以带来更高效的物理资源使用率,更快的部署以及更加统一规范的标准化运行环境。较虚拟化云,其优势还是很明显的。关于挑战,我的主要体会是安全和规范,Docker还不能做到完全的多租户环境,这一点对于安全敏感的企业级应用是一个不小的挑战。不过,对于私有云而言,这一点倒不是一个致命的短板。另外一个从实践来看,大家对于从KVM过渡到Docker的使用环境,使用习惯也是一个不小的挑战。举个例子,在KVM时代,应用上线前是一定要分配一些 KVM实例的,这样可以加速应用上线发布的速度。到了Docker时代,Docker可以支持实例秒级创建,是不是还一定要预先分配实例?这其实是一个使用习惯的问题。
盛延敏:底层使用了Docker,通过Dockerfile、Docker Registry统一管理应用的标准化运行环境。这一块是整个容器云的基石。
组件之间的交互使用了NATS,通过消息的『发布-订阅』模型,将各个组件之间的耦合最小化。这也是参考和学习了Cloud Foundry公有云架构。
接入层使用了Nginx和ZooKeeper,对于Web类型的应用,通过和Nginx暴露的Restful接口交互,完成实例在集群内的注册以及注销。对于服务类型的应用,通过在ZooKeeper上注册和注销服务IP和端口,便于服务客户端发现和更新该服务。
InfoQ:从我的理解来看,基于容器的私有云,需要用户了解Docker等技术,并且容器推荐的是使用微服务架构。那你们在内部推荐这样的私有云是否困难?架构方面的问题如何解决?
盛延敏:你说的很对。所以我们从一开始就制定了合适的目标,其中最重要的是不要让用户感觉到KVM切换到Docker这个转换,在这个目标基础上我们做了大量的工作。比如,用户并不需要自己了解Dockerfile,我们使用Dockerfile来定制应用运行的环境,如果需要更新运行时环境,也是由云平台团队来维护。如果你需要Node.js的环境,我们可以帮助定制一个Node.js的镜像。再比如,我们更改了Docker的代码,让其从推荐的微服务架构演变到目前的『虚拟机』架构。开发和运维可以通过IP直接访问到Docker『虚拟机』,基于IP的应用基础架构也不需要开发和运维做剧烈的改变。通过这些方法,加上公司内部的支持,逐渐推动了私有云平台的加速建设。
盛延敏:基本上除搜索和数据库以外,点评现有的业务大多都有跑到容器上的。当然覆盖率还在提升当中。只要是可以标准化的业务,经过改造基本都可以跑到容器云上。当然这里面也有一些特殊情况,例如IP本身是不是对外暴露的,是否可以支持横向扩展等等。
盛延敏:监控点评有业绩比较有名的CAT(Central Application Tracking),所以我们的监控也是接入CAT的。通过收集CGroups和Docker实例的实时信息,将内存、CPU、网络等源源不断的上报到CAT。再由CAT提供查询,检索和展示。当然,也支持告警。
关于网络,主要是采用了Linux bridge 工作在level 2的模式,使公共IP得以暴露出来,这部分我们是做了定制的。
InfoQ:目前私有云的有哪些基础功能?可以做什么,不可以做什么?接下来有什么规划?
盛延敏:主要的基础功能包括实例的创建和销毁、缩容和扩容,和DevOps工具集成等等。接下来会把精力放到整个平台的演进上,包括模块的进一步拆分,新的镜像的支持,和运维工具Puppet的集成等等。
盛延敏:我们还是复盘过的,其实我们自己觉得也比较幸运,刚开始决定做PaaS的时候,正是Docke技术出现并繁荣的时候,在Docke上构建整个私有云平台是一个比较明智的决定。更早一点的话,说不定就使用LXC或者Warden了。未来的计划还是跟公司的业务需求紧密结合,最大能力的发挥PaaS+Docker的威力。
InfoQ:你将在 CNUTCon 上分享哪些内容?
盛延敏上述的内容都会有涉及到。另外,还有大量我们的『干货』分享,都是我们曾经踩过的坑哦。欢迎大家捧场。谢谢!