5

我目前正在考虑将 SOA 风格的应用程序部署到云上的 PAAS 中。

我正在评估一些 PAAS 提供商,包括 Cloud Foundry、Heroku 和 Jelastic。

目前,为了简单起见,我只有一个 grails 应用程序和一个带有嵌入式 Jetty 服务器的服务 jar 文件。这将扩展为多个服务和 Web 前端,中间有一种服务方式,所有通过 rabbit mq 和 http 的混合进行通信。

我目前正在努力了解如何将这些部署到 PAAS 上的拓扑。

我的问题是:

  1. 是否必须将所有服务和 Web 应用程序部署为 PAAS 中的顶级“应用程序”(例如,dynos 可以在 Heroku 中使用吗?)

  2. 如果是这样,是否可以限制对服务的访问,以便只能从 webapp(最终网关)向它们发出请求。

  3. 它们是否需要作为顶级应用程序存在才能从负载平衡(和自动缩放)中受益,因为每个服务可能有多个实例。

  4. 如果每个服务都有自己的数据存储,我再次假设这需要它是一个应用程序?

  5. 如果有一种方法可以在不为每个服务使用完整应用程序的情况下实现这一点,那么节点如何单独寻址?他们可以使用某种目录服务注册自己吗?

谢谢!

4

1 回答 1

5

我将为 CloudFoundry 回答,因为这是我最精通的(也是我得到报酬的:)

前言: CloudFoundry 具有应用程序(运行的代码片段,可能会或可能不会暴露于外部世界,存在standalone 运行时)和服务(数据存储等,RabbitMQ 属于该类别)的概念。您部署应用程序并将它们绑定到零个或多个服务

  1. 我会回答“是”,假设您希望能够单独重新部署和扩展您所谓的服务(不是 CF 意义上的服务,而是 SOA 意义上的服务)
  2. 对于 CloudFoundry,答案是“否”,您必须以编程方式执行此操作。请注意,如果服务仅通过*eg* RabbitMQ 进行通信,那么您会将它们部署为独立应用程序,但它们一开始就无法通过 Web 寻址
  3. CloudFoundry 中没有“顶级”和“其他级别”。这些应用程序是您可以扩展的。绑定到 URL 的应用程序会自动进行负载平衡。
  4. 是的。请注意,您可以将多个 SOA“服务”打包为一个“应用程序”,并让其中的一部分与 CloudFoundry 服务 A 对话,而其他部分与服务 B 对话。请参阅 1) 了解缺点。
  5. 从之前的答案来看,答案是否定的。如果您使用例如RabbitMQ 作为您的消息代理,那么路由键将用作一种“目录”。

希望这是有道理的:)

于 2012-10-09T09:00:39.420 回答