SalesforceIQ是一家客户关系管理(CRM)的软件服务提供商,2004年6月在纽交所上市。SalesforceIQ从2013年就开始用Docker做持续部署,2014年初用Docker实现了不停机地部署网站,并将整个网站架构在了Docker上。
John Fiedler是SalesforceIQ的工程部副总裁,负责全公司的技术架构,包括安全,运维,开发与部署。John在两年前开始接触Docker,并与四位业界达人共同攥写了『Docker in Production』一书。
John在DockerCon的演讲中,介绍了SalesforceIQ为期两年的Docker之旅。以下为演讲主要内容:
本次议题的中心思想是:如何成功将Docker投入生产环境?那么让我们先理清『生产环境』与『成功』这两个概念。
何谓生产环境?
生产≠测试与研发
需要隔离性,安全性,性能,监控,与日志记录
可扩展,有模板与自动化流程
生产环境不是你的测试环境,在测试环境中你会将数据库等多个不同的模块连接在一起。在生产环境里,重要的几点是:隔离性,安全性,性能,监控,与日志记录。
同时,你不会把生产出的产品只放在一台电脑上运行,产品是要运行在千千万万台机器上的,所以你的架构需要一个模板,这样才能启动自动化操作去复制和创建产品。
何谓成功?
>99% uptime,失败率少
快速的代码部署
安全意外为零
从评估生产是否成功的角度来说,目前市面上的SaaS应该都能做到99%的高效运行,快速的代码部署可以提高效率,而满分的安全状况也是至关重要的。
SalesforceIQ的Docker历程
科普完毕,现在跳到Docker环节。SalesforcIQ所有的网页架构都是用Docker运行的,在为客户提供服务的同时保持着99.97%的高效运行时间。
上面这张图展示了我们应用Docker的历程,供大家参考。
促使我们使用Docker的原因来自于2013年,那时我们会进行定期系统维护,在发现用户在凌晨三点发Twitter,抱怨我们的downtime后,我们决定开始为客户提供100%的uptime,杜绝因系统维护导致的downtime。
我们开始了一系列的Docker化行动:
从最开始的持续部署,到2014年初期将网站用Docker部署,达到100%的uptime;
之后开始使用Mesos和Kafka去做Docker的管理,并于2014年中把整个网站架构在了Docker上;
我们也在Docker上建立了开发环境,并深刻地体会到将运维场景Docker化的优势;
现在,我们正在升级Docker化的系统,将两年来开发的框架升级到最新的Docker环境中。
我们在容器里装了什么?
除了Kafka之外,我们不把数据库放在容器里。
请容器的内部细节
所学经验
Docker本身已经具备用于生产的需要,但是很多关联的解决方式并没有完全准备好,所以要注意一些新的工具是否与Docker兼容;
在初期不要直接发展到PaaS,使用未产品化的技术,失败率总是比较高。例如Kubernetes,Mesos,CoreOS,Swarm,ECS;
将一切简洁化处理,清楚地知道每个操作工具的作用;
合理地利用旧的工具;
在某些情况下,需要你在架构上亲历亲为地做出创新,不停地学习新的东西;
从别人身上学习新的知识,与时俱进;
创新;
你可以把容器隔离化。
在这里特别要注意的是:你可以Docker化一些看似『过时』的工具,比如Chef,Ansible,SaltStack等。你不需要用全新的工具去使用Docker,当下使用的工具皆可Docker化哦。
系统架构图
上图是我们现在的系统架构图,在这个架构上,我们现有的工具都可以方便使用,不需要更新,同时安全性,100%up time与扩容性也得以确保。你可以看出我们在用Chef等现有的工具,并没有全部采用最新的工具,他们同样运行的非常好。
过程细节图
在近两年使用Docker的过程中我们也发现了一些问题,首先就是disk文件的系统问题。最初我们的容器无法正确地停止,因为Docker并不支持unmounting volumes reliably,从而导致容器在任务结束后依旧无止境地运行,这个问题在我们换到Docker v.9.0版本时解决了。同时在做过研究之后,我们发现用devicemapper也可以解决容器的运行问题,只要在脚本中删除-storage-opt dm.blkdiscard=false这个代码就可以解决容器运行无止境的问题。
Registry
使用一个好的Registry,例如:
灵雀云镜像中心:hub.alauda.cn(为了小编涨工资,逃
Hub.docker.com
Quay.io
Trusted registry
Azure
AWS
S3
我们最初用了私有的Registry,导致整个流程都变慢了许多,在经历了不同的私有Registry和quay.io等工具后,我们正在将Registry升级至Docker Registry 2.1。
Registry细节图
隔离化方案
CI/CD方案
Docker目前不支持自动扩展,所以在CI/CD的时候,我们用Packer去做扩展。
使用插件,图中右侧的工具都可以提高你在运行Docker时的效率
PaaS
Beanstalk是AWS推出的PaaS平台,当你对Docker的使用逐渐成熟,你可以自己做一个Beanstalk,然后让它自己生产出web容器。
PaaS平台的比较
如何做成功的PaaS?
网友评论