【问题标题】:Dealing with high memory scalable Java EE application处理高内存可扩展 Java EE 应用程序
【发布时间】:2012-08-03 04:00:28
【问题描述】:

我在一个 Java EE 应用程序中工作,它需要太多的内存服务器端应用程序级数据(即它不是用户级数据)。通过应用程序级数据,我的意思是所有用户的数据都是不变的,例如主要的数据。到目前为止,我们在一台具有 16 GB RAM 的 Windows 服务器上为 15-20 个并发用户使用 EHCache。我们将应用程序的堆大小指定为 8GB。

现在我们需要重新设计应用程序,使其能够支持超过 500 个并发用户。这将导致更多的内存数据需求。

我想在这种情况下获得您的观点,以便应用程序具有足够的可扩展性。

据我了解,以下解决方案会有所帮助 -

  1. 实现负载平衡,以便分配负载,但每个服务器上的内存数据仍然很高,因为它是应用程序级数据。虽然在一定程度上会有所帮助。

  2. 将此实现为无状态操作,而不是将数据保存在缓存中。但这会对性能产生影响。我在某处读到无状态是可扩展性的关键。我想避免这种情况,因为这需要太多的工作。

  3. 将 Terracotta 的 BigMemory 与 EHCache 结合使用。它基本上以一种特殊的方式将数据保存在磁盘上,即数据访问速度仍然很好。请注意,这不是免费产品,我们有这样的免费选项吗?

  4. 选择基于云的内存架构?对此不太了解。

任何建议都将受到高度赞赏。

【问题讨论】:

  • 如何优化数据结构以提高内存效率?这样您就可以在内存中保留相同的数据但使用更少的内存。
  • 数据量很大。我们需要根据应用程序要求将数据加载到第三方库的数据结构中。我认为我们在这个方向上做不了什么。
  • 您是否进行了内存分析来验证这一点?
  • 是的,我用 JProfiler 知道这一点。

标签: jakarta-ee cloud scalable ehcache-bigmemory


【解决方案1】:

您可以使用 BigMemory Go,它可以让您在每台服务器上使用多达 32GB 的内存 (RAM)。因为,我认为您稍微误解了 BigMemory 是什么,它不会将数据存储在磁盘上(如果您希望进程可重新启动,它可以),但数据总是直接从内存中访问。

请参阅http://terracotta.org/products/bigmemorygo 了解更多详情。但鉴于你低于 32GB 的限制,它对你来说都是免费的......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多