写点什么

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

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

关注

评论

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

倒计时3天!银行APP用户体验外滩峰会嘉宾阵容抢先看!

易观分析

App 银行

湖仓一体电商项目(九):业务实现之编写写入DIM层业务代码

Lansonli

湖仓一体电商项目 11月月更

面试官:React怎么做性能优化

beifeng1996

React

Vue.$nextTick的原理是什么-vue面试进阶

bb_xiaxia1998

Vue

我的react面试题笔记整理(附答案)

beifeng1996

React

React源码分析1-jsx转换及React.createElement

goClient1992

React

面试官:vue2和vue3的区别有哪些?

bb_xiaxia1998

Vue

Java注解与原理分析

Java 架构

湖仓一体电商项目(十一):编写写入DWS层业务代码

Lansonli

湖仓一体电商项目 11月月更

数据预处理和特征工程-特征选择-Wrapper包装法

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

React源码分析(二)渲染机制

goClient1992

React

python小知识-单元测试

AIWeker

Python python小知识 11月月更

Linux中传输文件如何做到又快又安全?同学,scp命令了解一下!

wljslmz

Linux 运维 scp 11月月更

湖仓一体电商项目(十):业务实现之编写写入DWD层业务代码

Lansonli

湖仓一体 11月月更

自制操作系统日记(5):跳转到C语言执行

操作系统

ReactDOM.render在react源码中执行之后发生了什么?

flyzz177

React

面试官:说说Event Loop事件循环、微任务、宏任务

loveX001

JavaScript

一年前端面试打怪升级之路

loveX001

JavaScript

CSS 定位

默默的成长

CSS 前端 11月月更

我的react面试题整理2(附答案)

beifeng1996

React

SpringBoot3正式版将于11月24日发布:都有哪些新特性?

艾小仙

Java spring-boot spring、

开发和学习时需要造一些kafka消息,于是写了段脚本实现,在这里记录备忘,后面会常用到

程序员欣宸

kafka 11月日更

一份vue面试知识点梳理清单

bb_xiaxia1998

Vue

CSS高级技巧

默默的成长

CSS 前端 11月月更

React源码分析(三):useState,useReducer

goClient1992

React

前端vue面试题

bb_xiaxia1998

Vue

ISO 8601持续时间格式

HoneyMoose

IO原理(一):从BIO到NIO

苏格拉格拉

Linux io nio 多路复用

前端面试如何回答,这些题目或许可以给你一些提示

loveX001

JavaScript

这些js原型及原型链面试题你能做对几道

loveX001

JavaScript

面试官让你说说react状态管理?

beifeng1996

React

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