10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

使用 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:512423
用户头像

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

关注

评论

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

IP地址分类及范围

郑州埃文科技

IP地址 IP地址分类 IP地址范围

运行时,物体移动旋转缩放插件,“RuntimeTransformGizmos插件”使用教程(Unity3D)

恬静的小魔龙

游戏开发 Unity 插件 虚拟仿真 游戏引擎

带你认识8个软件设计中的谬误

华为云开发者联盟

后端 分层架构 开发

2022年中国人工智能产业生态图谱

易观分析

人工智能

饿了么为啥给你推荐这个?本地生活搜索算法解密

阿里技术

算法 性能提升

用Unity做仿真,这款图表插件我不允许你不知道

恬静的小魔龙

Unity

想要制作沙盒游戏?那么这一款插件你一定不能错过(Unity3D)

恬静的小魔龙

Unity

同构+跨端,懂得小程序+kbone+小程序容器就够了!

Geek_99967b

小程序容器

26岁从计算机视觉界“黄埔军校”博士毕业,他想为车打造一双慧眼

华为云开发者联盟

人工智能 计算机视觉 天才少年 激光感知

融云超级群的「新能力」

融云 RongCloud

ios Android;

易观分析《2022年中国数据安全市场数据监测报告》正式启动

易观分析

技术

数字化转型失败的罪魁祸首是什么?

雨果

数字化转型 DaaS数据即服务

void 0 有什么意义?undefined竟然是可变的?

南极一块修炼千年的大冰块

7月月更

hive数据导入:Python脚本

怀瑾握瑜的嘉与嘉

Python hive 7月月更

EMQ映云科技荣登《中国企业家》2022年度“新锐100”榜单

EMQ映云科技

开源 物联网 IoT emq 7月月更

2022年中国第三方支付市场专题分析

易观分析

第三方支付

Spirng之Annotation注解与AOP使用

echoes

个人实战经验:数据建模 “账户数据是属于维度还是账户域 ”

松子(李博源)

数据仓库 数据建模 数据中台场景实践

移动研发平台EMAS 3.0全新升级,欢迎登陆阿里云官网搜索EMAS进行体验

移动研发平台EMAS

阿里云 emas 移动测试 移动研发 产品架构

开发动态 | StoneDB 2022年版本发布里程碑

StoneDB

云原生 #数据库 大数据 开源 #开源

你离「TDengine 开发者大会」只差一条 SQL 语句!

TDengine

tdengine 开源 时序数据库

tsconfig.json在配置文件中找不到任何输入,怎么办?

华为云开发者联盟

JavaScript 前端

数字藏品系统开发——商城盲盒h5平台搭建

开源直播系统源码

数字藏品 数字藏品系统软件开发 NFT数字藏品系统 数字藏品源码出售 数字藏品交易平台开发

膜拜~ 终于拿到了美团老大哥分享的 Netty 源码剖析与应用 PDF

程序知音

Java 程序员 架构 Netty 后端技术

同城订单同城送,爆单依旧得心应手!

CRMEB

浅谈负载

Damon

7月月更

这次和GrowingIO工程师一起搞事情 | StartDT Hackathon

奇点云

深入理解完美哈希

C++后台开发

hash 后端开发 C++后台开发 哈希函数 C++开发

还在用Unity开发游戏?那你就out了,试试用Unity做一个答题系统吧

恬静的小魔龙

Unity

还在被电影中吧爆炸的画面震撼?那你一定不要错过这款Unity的爆炸插件

恬静的小魔龙

Unity

还在用 ListView?使用 AnimatedList 让列表元素动起来

岛上码农

flutter ios 安卓开发 跨平台开发 7月月更

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