写点什么

使用 Docker 从 Heroku 迁移到 AWS

  • 2015-04-09
  • 本文字数:1357 字

    阅读完需:约 4 分钟

DoorDash 是一家按需提供快速物流服务的公司。最近,他们发现其基于 Heroku 的基础设施已经无法满足需求,于是便迁移到了 Amazon Web Services。其间,Docker 技术的引入为他们节省了大量的时间。近日,DoorDash 官方博客发文介绍了迁移过程。

DoorDash 最初选择 Heroku 是因为它简单方便。但随着流量增加,Heroku 显现出以下几个方面的问题和局限:

  • 性能:Heroku 服务器实例(又称为“dynos”)性能表现欠佳。每个 dyno 的 CPU 性能和内存资源均非常有限。即使在对 Django 应用进行了大量优化之后,他们仍然不得不增加许多 dyno,这使他们觉得目前的基础设施不具备持续可扩展性。
  • 成本效益:Heroku dynos 的计算资源非常昂贵,租用一个 Heroku “2x” dyno(内存 1GB)的费用可以租用一个 Amazon c3.large EC2 实例(内存 3.75GB)。
  • 可靠性:Heroku 部署 API 一到两周就会出现一次问题。
  • 控制:在 Heroku 环境中,无法对服务器进行细粒度的控制,比如,安装自定义软件时无法通过 SSH 登录服务器调试 CPU 或内存问题。

为了克服这些问题,他们选择了 Amazon Web Services。Amazon EC2 实例 CPU 内存配置丰富多样,允许以 root 权限访问,并且性价比更高,看上去是个理想的解决方案。但是,迁移工作量很大。为了自动化服务器配置过程,需要安装“配置管理”软件(Chef 或 Puppet),而且还需要学习相应的领域专属语言,编写脚本执行第三方依赖安装任务及配置服务器栈中的所有软件。之后,为了测试,还需要使用 Vagrant 建立一个本地开发环境。因此,他们希望有一种更简单的方式帮助他们完成这项工作。经过研究,他们选择了 Docker,迁移计划变成了将运行 Django 应用的 Docker 容器部署到 Amazon EC2 实例上,这样就不需要将大量的时间花费在 EC2 主机配置上,从而将这种复杂性转移到了 Docker 容器环境中。迁移过程主要包含以下两个方面的工作:

  • 使用 Dockerfile 创建 Docker 镜像:与 Chef 或 Puppet 脚本相比,Dockerfile 更容易编写和理解。对 Django 而言,这一部分主要是指出如何安装第三方 Python 依赖以及配置复杂的软件组件(如 Web 服务器或数据库连接池)。
  • 准备 Docker 环境:为了节省时间,他们决定使用 AWS Opsworks ,这是一个内置了 Chef 的服务,可以帮助他们管理 EC2 实例。虽然最终没能避免使用 Chef,但由于绝大多数的系统配置工作都已经在创建 Docker 镜像时完成了,所以这里并没有很多工作要做。

下图是迁移完成后的代码部署流程:

两名 DoorDash 工程师用大约一个月的时间完成迁移,其中还包括学习 Docker、AWS 和 Chef。新环境的性能提升了 2 倍多,DoorDash 的平均 API 响应时间由 220 毫秒降到了 100 毫秒以下,后台任务执行时间也降低了一半。而且,所需服务器的数量也减少了一半,大大降低了托管成本。此外,由于有更多的控制权限,他们还安装了 Nginx 作为反向代理,提高 Web API 吞吐量。毋庸置疑,他们非常高兴迁移到 AWS,而 Docker 是他们能够快速完成迁移的关键原因。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流。

立即免费注册 AWS 账号,获得 12 个月免费套餐:点击注册

有云计算问题?立刻联系 AWS 云计算专家:立即联系

2015-04-09 21:512095
用户头像

发布了 1008 篇内容, 共 394.3 次阅读, 收获喜欢 345 次。

关注

评论

发布
暂无评论
发现更多内容

什么! 你还在使用 if (xxx != null)做NullPointerException判断?

刘超

Java Optional

架构师训练营第 1 期第五周总结

Leo乐

极客大学架构师训练营

知识视频创作者何去何从,百度给出解答

脑极体

科大讯飞开发者大赛:首届X光安检图像识别挑战赛结果出炉

Talk A.I.

架构师训练营 - 第一周学习总结

joshuamai

第五周总结

_

架构师一期 架构师第五周总结

这本书可能是给用户最好的礼物——专栏《软件交付那些事儿》上线

刘华Kenneth

政府和企业如何认识到区块链的好处

CECBC

比特币 区块链

架构师训练营第一期 - 第周五课后 - 作业一

极客大学架构师训练营

化身“监工”的AI,我们该如何相处?

脑极体

甲方日常 37

句子

工作 随笔杂谈 日常

《我想进大厂》之Dubbo普普通通9问

艾小仙

Java dubbo RPC HTTP

1分钟带你入门 React SCU、memo、pureCom

Leo

react.js 大前端 React

数字货币可能重构全球货币体系

CECBC

数字货币 金融

区块链技术本质再认知

CECBC

区块链 大数据

食堂就餐系统UML图

小兵

笔记本中的“全优生”,英特尔Evo产品上市首日秒光!

E科讯

惠普中国(HPE)技术总监教你如何做个“火影般”的“架构师”

Java架构师迁哥

Java 程序员 架构

世界上最难的5种编程语言

艾小仙

编程语言 编译 esolang

前端更应懂产品

执鸢者

产品 腾讯 大前端

成为架构师 - 架构师训练营第01周

陈永龙Vincent

食堂就餐卡系统设计

Jack

架构设计

《我想进大厂》之JVM夺命连环10问

艾小仙

Java 编程语言 JVM jvm调优

架构师训练营第一周总结

小兵

架构师训练营第一期 - 第五周课后 - 作业二

极客大学架构师训练营

极客大学架构师训练营2期第一周 作业

渡江卿

架构训练营第一周学习总结

Jack

c++nullptr(空指针常量)、constexpr(常量表达式)

良知犹存

c++

第一周学习总结

Griffenliu

极客时间 - 架构师一期 - 第五周作业

_

极客大学架构师训练营 第五周

架构师训练营第一周学习总结

韩儿

使用Docker从Heroku迁移到AWS_亚马逊云科技_谢丽_InfoQ精选文章