美文网首页云计算DockerAwesome Docker
SalesforceIQ的Docker之旅:从持续集成到完全Do

SalesforceIQ的Docker之旅:从持续集成到完全Do

作者: 灵雀云 | 来源:发表于2016-03-23 16:13 被阅读187次

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

Google

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?

相关文章

网友评论

    本文标题:SalesforceIQ的Docker之旅:从持续集成到完全Do

    本文链接:https://www.haomeiwen.com/subject/srollttx.html