【问题标题】:independently scaled services in one heroku app在一个 Heroku 应用程序中独立扩展服务
【发布时间】:2012-02-01 03:44:22
【问题描述】:

我在 Heroku Cedar 堆栈上的文档中看不到任何表明这是可能的,但我想知道是否可以在单个 Heroku 应用程序上使用单个代码库来安装多个服务(例如机架应用程序)根据某些条件获取发送给他们的请求。

我正在寻找类似于我可以告诉机架应用程序安装在特定url 的方式。

理想情况下,这将允许我独立扩展这些服务,但对它正在做的任何工作使用相同的代码库、模型等。

例如,我可能有一个仅处理 api 调用的api 服务。这可能是一个简单的机架应用程序,它应该具有快速的响应时间,并且能够独立于服务于主站点的 Web 应用程序进行扩展。它可以使用具有特定路径的相同域,也可以使用以某种方式映射到在某个特定端口上运行的机架应用程序的不同域。

有人知道这种事情是否可能吗?我知道替代方案(对我的代码进行优化并在不同的应用程序之间共享),但我首先将其作为一种可能性进行探索。

【问题讨论】:

  • 在这种情况下扩展服务意味着什么?我会认为它就像添加一个测功机,但这显然会影响所有服务。无论如何,我对机架不太了解,所以不确定安装是如何工作的,但是将机架应用程序编写为仅查看 url 然后调用机架应用程序的端点将是微不足道的(即它是一个带有仅基于 env['HTTP_HOST']) 之类的内容转发调用的 case 语句
  • 我认为使用标准 Heroku 产品,可扩展性纯粹是在应用程序级别设置的。我怀疑是否有一种方法可以在应用程序内进行扩展而无需 heroku 干预(但价格合适,谁知道呢?)。如果您从 Heroku 得到明确的答案,请回答您自己的问题。
  • 是的,我基本上是指使用测功机进行缩放。新的 Cedar 堆栈允许您使用 Procfile 以这种方式扩展流程,因此我可以定义一个 api 流程并为其添加更多测功机。我不知道该怎么做,就是将网络流量路由到它。
  • 请记住,每个应用程序只有一个外部 $PORT 可供其他人连接,因此您需要弄清楚如何解决这个问题。
  • 这就是我的问题的重点。

标签: ruby heroku rack


【解决方案1】:

你为什么要这样做?如果您将相同的代码部署到 Heroku 上的多个应用程序,您可以共享您的代码、单独扩展它们、为它们提供不同的端点 URL 并获得每个应用程序每月 750 小时的免费使用时间。

您的建议听起来很复杂且容易出错,因此请保持简单。

如果您需要在他们之间共享数据库,那也可以:http://neilmiddleton.com/sharing-databases-between-heroku-applications/

【讨论】:

  • 我认为我的建议实际上会更简单。我可以在我的 rails 应用程序中定义一个 Rack 应用程序,然后单独安装它。它可以为数据库工作加载ActiveRecord,但不需要整个 Rails 堆栈,所以它应该很快。你的方式我必须维护 gem 并确保我的部署是同步的,以避免迁移、过时代码等问题......
  • 很公平。我只是说我已经在 Heroku 上部署了数百个应用程序,我不会接近你的方法。
  • 是的,看来我想做的事情不可用。所以......如果我们要对两个不同的应用程序使用相同的代码库。您是否只是设置了确定要启动哪个 Rack 应用程序的某些配置变量?即ENV['RACKUP'] = 'api.ru'
  • 是的,这可能是最好的方法。
  • 酷。我会回复我的发现。假设一切正常,我会将您的答案标记为正确。谢谢一堆
猜你喜欢
  • 2021-10-25
  • 2017-05-13
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多