【问题标题】:JAVA EE 6 cluster and webapp imagesJAVA EE 6 集群和 webapp 映像
【发布时间】:2013-03-09 23:31:11
【问题描述】:

我正在使用 JAVA EE 6 开发应用程序,更具体地说,是 Glassfish v3.1.2.2。

以前,我曾经将用户上传的图像和文件放在我的数据库中。如果我想通过添加节点来集群化我的架构,这会更容易。

现在,我真的很想停止这样做,而只是将我上传的文件保存到我的资源文件夹(出于多种原因such as this),这样一个简单的<img> 或@987654324 @ 有名字就可以了。

我的问题是当我添加其他服务器时这是如何工作的?该文件只会保存到处理请求的服务器的资源文件夹中,其他服务器不会有它。

现在也许有人会建议使用分布式文件系统,这听起来不错,除非您正在为您的应用租用一些托管/云服务并且您无法真正选择您的文件系统。 (可能有其他原因阻止您使用此设置)

JAVA EE 是否提供任何透明同步资源文件夹的方法? JSF 已经处理它的版本控制和管理库等,我可以设置一些配置,以便我的所有服务器保留它们的资源文件夹最新的任何文件更改/上传?

如果没有,有什么替代方案?

【问题讨论】:

  • 我自己没有使用过集群,但据我所知,最好的选择可能是在专用服务器中设置静态资源(通常是 apache,因为它被认为更快)
  • 您是否有一个云服务示例,可以让您运行应用程序集群,但无法在节点之间进行实际通信?这听起来有点武断的限制。 (另外,我认为一个流行的——如果可能是不必要的昂贵——的解决方案是将这些推送到 S3 或其他类型的 CDN,它应该提供某种 API 来上传新文件。)
  • 正如 millimoose 所说,我也会选择像 Amazon S3 这样的Content Delivery Network 解决方案(免责声明:我不工作也不与亚马逊有任何关系)。
  • 虽然 JAVA EE 平台不支持开箱即用,这不是很奇怪吗?我在这里错过了什么吗?也许我只是没有清楚地看到我应该做事的方式。也许是第三方扩展或非标准化解决方案?来自 Jboss 或任何其他供应商的东西?

标签: jsf jakarta-ee servlets glassfish java-ee-6


【解决方案1】:

Java EE 不提供将图像同步到集群的公共文件夹中的方法,您的应用服务器可能对此提供支持,但我不知道应用服务器中有任何此类解决方案。

根据您的情况,我将使用 NFS 服务器并保持 NFS 服务器目录上的文件可从所有集群访问。

如果您不允许更改硬件设置,那么您可以创建一个 Web 服务器来托管资源,并且您可以从所有集群访问您的资源,例如,

<h:graphicImage value="http://myimageserver.local.com/sitename/foldername/xyz.gif"/> 在您的所有集群上。

【讨论】:

  • 当集群的节点在不同的机器上运行(标准用例)而不使用某种形式的分布式文件系统 OP 不倾向于使用时,你将如何做到这一点?跨度>
  • 如果我的节点运行在不同的机器甚至虚拟化环境中,我无法创建符号链接。
  • 我不知何故错过了您没有使用分布式系统或 NFS 的帖子。我想在这种情况下资源服务器是你的选择。
  • @fvu 如果您运行的系统需要多个异构节点,您将面临比这更复杂的问题。您总是可以编写一个自定义服务,该服务将在静态媒体节点上运行以存放文件上传。
  • @arg20 我不确定符号链接与此有多大关系。这个想法是这些文件将存在于与您的应用程序完全不同的“类型”服务器/节点上,并且您的应用程序将链接到从它的角度来看完全不同的服务器,而不是它自己的资源。
猜你喜欢
  • 2012-11-14
  • 2011-10-15
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多