飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

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

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

关注

评论

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

Webpack中的plugin插件机制

Geek_02d948

webpack

Java后端面试到底要如何准备?

钟奕礼

Java 程序员 java程序员 java面试 java编程

腾讯大神亲码Redis技术笔记,实战+原理双管齐下

小小怪下士

Java redis 程序员 腾讯

React的5种高级模式

夏天的味道123

React

深度解读Webpack中的loader原理

Geek_02d948

webpack

技术分享 | TiUP工具 - TiDB集群滚动升级核心流程解析

TiDB 社区干货传送门

教你一招,安全的从 MySQL 切换到 TiDB

TiDB 社区干货传送门

迁移 实践案例

TiFlash 源码阅读(八)TiFlash 表达式的实现与设计

TiDB 社区干货传送门

AntDB入选《2022爱分析·信创厂商全景报告》

亚信AntDB数据库

AntDB 信创 国产数据库 aisware antdb AntDB数据库

React源码中的dom-diff

夏天的味道123

React

详解webpack构建优化

Geek_02d948

webpack

TiFlash 源码阅读(七)TiFlash Proxy 模块

TiDB 社区干货传送门

Vue3, setup语法糖、Composition API全方位解读

yyds2026

Vue

Vue.nextTick核心原理

yyds2026

Vue

低代码实现探索(五十三)后台逻辑的控制

零道云-混合式低代码平台

# 分布式数据库新秀TIDB初探

TiDB 社区干货传送门

TiDB 底层架构 TiDB 源码解读

老板拍脑袋决策,团队群魔乱舞

填空时光

决策 团队内耗 企业敏捷

React性能优化的8种方式

xiaofeng

React

10年码农生涯经验总结,聊聊工作中18种接口优化方案!

Java全栈架构师

Java 数据库 程序员 程序人生 性能优化

TiFlash 源码阅读(六) DeltaTree Index 的设计和实现分析

TiDB 社区干货传送门

TiDB常用SQL

TiDB 社区干货传送门

性能调优 集群管理

安防厂商在企业数字化转型中的机遇和挑战

慕枫技术笔记

AIOT 11月月更

React-hooks+TypeScript最佳实战

xiaofeng

React

解读Vue3模板编译优化

yyds2026

Vue

React生命周期深度完全解读

夏天的味道123

React

诚迈科技深耕汽车操作系统领域,获评优质供应商

科技热闻

将业务从mysql迁移至TIDB,有哪些需要注意的?

TiDB 社区干货传送门

管理与运维 应用适配 大数据场景实践

React中常见的TypeScript定义实战

xiaofeng

React

双机热备软件原理简单说明以及品牌重点推荐

行云管家

高可用 ha 热备 双机热备

技术分享 | 多测试环境的动态伸缩实践

LigaAI

云原生 自动化测试框架 测试环境 测试自动化 kubenetes

使用Docker踩坑,排查完问题之后,又涨知识了

程序员小毕

Java Docker 程序员 程序人生 后端

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