Heroku:革命性的 Rails 托管服务

  • Obie Fernandez
  • 胡振波

2009 年 5 月 29 日

话题:RubyRuby on Rails云计算DevOps语言 & 开发架构

Heroku的 Rails 主机托管解决方案在历时一年的免费测试阶段之后,商业版终于在上周登场。他们宣称他们提供的是“无需准备的部署服务”,因为操作和扩展都是自动的,无需任何系统管理。虽然相较于其它服务商而言 Heroku 目前的价格较高,而且由于它(目前)基于 Amazon 的 EC2 云计算平台,因此相应地受到 Amazon 服务等级协议的限制,但我们认为他们提供的服务是可靠的,值得进行进一步研究。

上个礼拜我的两个工程师和我一起访问了 Heroku 的创始人之一James Lindebaum,以了解他对 Heroku 的看法。James 愉快地称他的公司是由一群 Ruby 爱好者组成的。一年半之前,他和他的合伙人 Adam Wiggins 和 Orion Henry 在得到了YCombinator的支持之后,致力于创建一个超级方便的 Rails 部署服务。我们认为他们所完成的工作无异于一场革命。

受益于 Heroku,Ruby 的 web 应用程序部署变得异常简单:所有的工作只是在终端上输入少许命令。无需邮件,无需电话,也无需技术支持(support ticket)。我们已经开始在 Hashrocket 使用 Heroku 来托管我们的内部执行环境,我可以证明,这是一种你从未经历过的部署体验。Heroku 一出现,Capistrano 即行将就木了。在完成注册,并在 Heroku 的云计算平台上创建一个新的应用实例之后,部署仅仅是一句:git push heroku master。

这个 push 命令触发了一个进程:把应用程序编译成一个独立的、只读的实例,在 Heroku 里它被称为“slug”。它会自动地进行测试来保证它能正常地启动。被依赖的 gem 会被自动安装,并且通过应用程序根目录下的一个.gems manifest 文件进行维护:这是与普通的 Rails 应用程序的唯一不同之处。同时需要指出的是,Heroku 也支持 Merb 和 Sinatra(实际上是任何一款 Rack)。

一旦 push 成功,slug 就在一个或多个 slot 中被实例化。这些 slot 将置于一个特殊设计的网格计算环境中,slug 在这个环境中可以访问数据库和缓存信息,并且开始启动。Heroku 唯一支持的数据库是 Postgres。据 James 说,Heroku 之所以目前不支持 MySQL,是因为它还不支持事务型数据描述语言(transactional DDL)的执行。

slug 激活后,就成为了一个拥有完整功能的 web 应用,它被称作“dyno” 。每个 dyno 都是网格中服务器的一个单独进程,它包括了应用程序代码、框架、中间件、Rack、应用服务器、Ruby 虚拟机以及 POSIX 环境。Dyno 使用的应用服务器是经过少许修改的 Thin,系统分配给它 250M 内存。

为适应不断变化的需求,Heroku 可以在网格中其它地方启动新的完全独立的 dyno,或者关闭那些闲置的 dyno。Dyno 的启动时间还不到 2 秒,这足以证明 Heroku 的平台空前的强大。为了满足更高需求而启动新的 dyno 实例时,Heroku 特制的路由系统可以在把新的请求“冻结”。四个 dyno 的计算性能相当于传统环境中的一台服务器的计算性能。

Heroku 的网格本身建于一个强大的云计算环境中,这样它可以根据需要的 dyno 数量方便地进行扩展或者缩减。网格上层是一个成熟的高并发路由网络,它承担了把请求分派至 dyno 的工作。还有一些额外的元件,比如 HTTP cache 和 memory cache,它们分别用来减少对 dyno 和数据库的访问。

据 James 说,Heroku 的路由网络是拥有专利的,并且是 Heroku 中一个很具创新性的部分。起始时路由网络被实现成 Nginx C-modules,一直工作地很好,直到 Heroku 上部署的应用超过了 10,000 个之后,性能开始吃紧。现在的路由系统是用 Erlang 编写的,并且工作得非常好。

Heroku 自身也托管于 EC2 的一组实例之上。我问 James,相比于直接使用 EC2,Heroku 的费用会贵多少。他发现他难以回答我的问题,因为 Heroku 包含一个完整的系统架构,每一个应用都需要复制成 6 或者 7 个 EC2 实例,所以要在两种服务之间进行价格比较是很困难的。另一方面,相较于 EC2 部署服务而言,dyno 方便的启动和关闭节省了很多管理费用。

Heroku 根据用户使用资源的数量来收取费用,它的定价模式适应所有层次用户的需求。有各种层级的价格来适应所有人的需求,高至每月百万级别访问量的企业级大型应用,低至入门级的用户。每月价格从几千美金到一百美金不到,而且 Heroku 为测试和快速原型提供免费服务。

Heroku 的服务在测试延长阶段已经经过了实战测试,那时在它上面部署了由 23,000 多名开发者开发的超过 25,000 个 Ruby 应用。保守估计,这已经使 Heroku 的使用量十倍于第二大的 Ruby 应用部署服务提供商。虽然商业版刚刚登场,但 James 告诉我他们一开始就获得了付费客户,并且收费策略得到了投资商的支持。他们已经做好了为客户提供强大和持久服务的准备。(Heroku 在 2008 年 5 月得到了来自 Redpoint 的 300 万美金风险投资

查看英文原文:Heroku's Provisionless Hosting for Rails Apps is Revolutionary

RubyRuby on Rails云计算DevOps语言 & 开发架构