Shopify的Docker实战经验(一)用Docker和CoreOS构建内部云

这是系列文章的第一篇,介绍咱们如何借助容器让服务器更易于扩展和管理,从而跟上业务需求的步伐。

git

containers-cropped_(1).jpg



关键元素是:
docker

  • Docker:容器技术,使应用更加便携和易于管理数据库

  • CoreOS:提供最小化的操做系统,便于流程规划和Docker容器的运行安全


Shopify是一个大型的Ruby on Rails应用程序,这些年末层作过大规模的扩展。咱们的生产服务器扩容到使用1700个核以及6 TB内存,能支持每秒超过8000次的请求。

Docker备受瞩目,由于其可以将应用打包进便携的容器,从而实现版本控制和快速部署。

容器听上去很像虚拟机(virtual machine,VM),它有独立的文件系统、网络环境等等。可是容器又比虚拟机更加轻量,可以更高效地利用硬件资源。Docker容器不是像VM同样去模拟物理硬件的行为,而是容许多个应用程序安全地共享Linux宿主机器,经过:
服务器

  • 内核命名空间使应用间相互隔离网络

  • cgroups限制资源的上限并实现计费架构

  • 多层文件系统减小容器的大小负载均衡


Docker在开发和维护团队中迅速走红,主要是由于:
运维

  • 快速启动:容器能够快速启动和运行,只须要几秒时间。若是须要,能够利用容器构建的时间作一些其余耗时的操做。快速启动意味着快速部署。spa

  • 超高利用率:容器最大限度地共享宿主机器(好比,单核机器),相比VM能更为有效地利用硬件资源。这意味着在一样的硬件配置上能够运行更多应用。

  • 一致性:容器确保每一个实例启动时是彻底一致。

  • 开发友好的工做流:容器由纯文本的Dockerfile构建,Dockerfile能够作版本控制从而帮助区分容器版本。另外,开发人员能够用很熟悉很像git的push/pull操做来发布容器。

  • 运维友好的工做流:容器包含操做系统,所以,若是你须要安装一个package或者自定义的配置,开发人员就能够完成这项工做,而不须要推给运维人员。这是工做职责的重要改变:开发人员负责容器,运维人员则能够关注于提供可靠的硬件和网络。


最重要的容器特性是能够实现一机多用。作不一样工做的容器能够在相同的硬件系统上和平共处。这使得数据中心真正成为广泛意义上的计算资源。好比:

  • 能够很快很容易地增长应用服务器容器的数量,这意味着咱们随时能够应对忽然的流量尖峰。

  • 能够轻松地拿出生产服务器的闲置资源去进行所需资源密集型的操做,好比数据分析。


听上去不可抗拒吧?咱们也有同感,并且咱们已经准备来分享咱们的经验,如何将这些愿景变为生产级别的现实。咱们不只仅高谈阔论,咱们还会在社区里分享尽量多的代码。

这里有不少内容能够讲,咱们将分期介绍:

  • 容器化:如何以一种能让自觉得是的开发团队满意的方式,将已有应用放到容器里?

  • 管理诀窍:真实的应用包括不少API秘钥和数据库密码,这些都须要安全得保存(最好是能版本控制,并能在Heartbleed这样的事件再次发生的时候迅速把它们找出来)。咱们在这里有不错的解决方案。

  • 路由:怎样将容器链接到外部世界,并能和生产环境的基础架构(好比负载均衡器)完美合做?

  • 监控:咱们的容器化架构须要达到或者超越Shopify的99.97%的在线时长。维护系统时须要花费大量的工做在问题变得严重以前发现并解决它。在容器化的世界里解决这个问题须要和纯物理机环境不一样的解决方案。调整已有的监控系统来监控新环境是保证Shopify稳定性的重要环节。

  • 健壮性:优雅且可预见地抛错很难。咱们在处理内存耗尽(out-of-memory),请求队列化和signal处理上的经验能够供你们参考。

  • 部署:咱们的系统构建在Chef和Ubuntu之上,如今计划更新为纯物理机上的CoreOS。以后会介绍咱们如何部署节点使其可以运行容器,而且在全是容器的世界里实现高效监控。


敬请关注从此各个话题上更深刻的探讨。

相关文章
相关标签/搜索