Heroku黑客指南(三)

Dynos

(五)测试Profile

为了确保Procfile工作正常,最好先在本地测试它。在本地安装的Heroku Toolbelt 工具包,带了一个非常有用的命令行工具foreman,可以用来执行这个测试。

一旦你在项目根目录定义好了Procfile文件,执行如下命令来测试它:

$ foreman start
18:06:23 web.1 | started with pid 47219
18:06:23 worker.1 | started with pid 47220
18:06:23 scheduler.1 | started with pid 47221
18:06:23 web.1 | => Output from your web process.
18:06:23 worker.1 | => Output from your worker process.
18:06:23 scheduler.1 | => Output from your scheduler process.

假如上述工作不正常,那就是什么地方配置不当。因为foreman将进程的所有标准输出打印到终端,你可以比较容易的debug出问题所在。

在开发阶段,使用foreman在本地测试运行应用,是个省心的事。任何时候你都可以先定义好Procfile文件,然后打开foreman测试运行它们。相对于传统的敏捷开发解决方案,foreman无疑使用上更简单。

(六)scale up和scale down dyno

Heroku最有力的地方在于实时扩展dyno的数量。假如你有个应用每秒可以处理5个请求,现在需要支持更多用户,那么有2个办法:

  • 优化程序代码
  • 运行多几个dyno实例

如何运行多个dyno?在Heroku里这很简单。架构上,在dyno前端使用了负载均衡器调度。不管你增加还是减少dyno数量,负载均衡器都会自动分配流量到后端的dyno集群上。比如说你运行了10个dyno,那么负载均衡器会把流量分摊到10个上面。如果下一时刻变成5个dyno,那么流量就分摊到这5个上面。

具体如何操作?答案是使用Heroku的ps和scale命令。进入项目根目录,运行ps命令:

$ heroku ps
=== web: ‘gunicorn --bind ’0.0.0.0:$PORT’ myproject:app‘
web.1 idle since 2012/08/27 10:12:22

我们看到有一个web dyno在运行。现在调整web dyno数量到10,增加1个scheduler dyno,增加5个worker dyno,执行如下命令:

$ herkou scale web=10 scheduler=1 worker=5
Scaling web processes... done, now running 10
Scaling scheduler processes... done, now running 1
Scaling worker processes... done, now running 5

再运行ps看下结果:

$ heroku ps
=== web: ‘gunicorn --bind ’0.0.0.0:$PORT’ myproject:app‘
web.1 up for 1m
web.2 up for 1m
web.3 up for 1m
web.4 up for 1m
web.5 up for 1m
web.6 up for 1m
web.7 up for 1m
web.8 up for 1m
web.9 up for 1m
web.10 up for 1m
=== scheduler: ‘python manage.py celeryd -B‘
scheduler.1 up for 1m
=== worker: ‘python manage.py celeryd‘
worker.1 up for 1m
worker.2 up for 1m
worker.3 up for 1m
worker.4 up for 1m
worker.5 up for 1m

上述显示dyno都按照调整的数量在运行了。使用heroku ps查看dyno数量,使用heroku scale调整dyno数量,一切就这么简单!

当然,减少dyno数量也是轻车熟路:

$ heroku scale web=1 scheduler=0 worker=0
Scaling web processes... done, now running 1
Scaling scheduler processes... done, now running 0
Scaling worker processes... done, now running 0
$ heroku ps
=== web: ‘gunicorn --bind ’0.0.0.0:$PORT’ myproject:app‘
web.1 up for 1m

如上所见,使用scale命令,可以在很短时间内将应用由单个dyno实例扩展到数百个实例。如果你的应用需要应对访问高峰,那么这点特别有用。你可以随时扩展dyno数量以支撑巅峰访问,峰值过后又可以将dyno数量降回来。

(七)故障处理

在Heroku里如果发生硬件故障,你无需担心。Heroku自动将dyno迁移到其他服务器。而且,在dyno被迁移、重启、或其他维护阶段,Heroku自动在负载均衡器层面buffer进来的HTTP请求,确保没有请求丢失。

(八)计算dyno成本

Heroku有个不错的价格计算器。 假如你需要做容量规划、成本预算,可以使用他们的价格计算器,它会告诉你每月产生多少费用。

 

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。