11

我在 jboss7 上组装了一个常规的 Java EE 应用程序,它将在数据层中使用 JPA。我想让这个应用程序随着负载的增加而扩展。虽然很清楚如何扩展 Web 层:创建更多机器并将它们放在负载均衡器后面,但扩展数据层却不那么重要。

我可能可以集群我的数据库(MySQL)。仍然,这使 JPA 层不聚集。理想情况下,JPA 将通过使用由 MySQL 支持的(集群)内存缓存来扩展。

当我环顾四周时,所有关于 JPA 缩放的信息似乎都是 3-4 年的历史。人们谈论 ehcache、memcached 和 infinispan。我不确定这是否仍然是最新的。

谁能告诉我 Java EE 集群和扩展的最新技术,尤其是在数据层。

4

2 回答 2

8

各种缓存策略仍然是扩展 JPA/Hibernate 的方式(您基本上在问题中命名了最流行的选项)。据我所知,在这个领域 4 到 5 年以来没有发生什么特别的事情。您还没有提到的另一个选项是 JBoss Cache。所以 JPA/Hibernate 的二级缓存仍然在这方面占主导地位。

为什么这里没有进展?我的疯狂猜测是,首先,需要可扩展应用程序的人往往会在需要高性能的领域忽略 JPA 和 Hibernate。通常人们使用穿着 Spring Framework JDBCTemplate 助手和事务管理的 SQL。那么可伸缩性就是这个领域的数据库能力问题。

另一个趋势是使用 No-SQL 数据库。有很多解决方案:MongoDB、CouchoDB、Cassandra、Redis 等等。这些通常是 Google BigTable 之类的键值存储(这过于简单化,但或多或​​少是该方法背后的想法),如果您接受它们的局限性(关系不再容易管理等),它们的扩展性就像地狱一样。

于 2012-04-26T13:29:01.510 回答
6

解决方案有很多,解决方案主要分为两大类:

  • 扩展数据库
  • 使用集群缓存来减少数据库负载

EclipseLink 支持数据分区,以便跨一组数据​​库实例分片数据,

见:http: //java-persistence-performance.blogspot.com/2011/05/data-partitioning-scaling-database.html

您还可以使用 MySQL 集群,

见: http ://www.mysql.com/products/cluster/

Oracle TopLink Grid 提供 EclipseLink JPA 支持,以作为分布式缓存与 Oracle Coherence 集成,

见: http ://www.oracle.com/technetwork/middleware/ias/tl-grid-097210.html

EclipseLink 的缓存通过缓存协调支持集群,

见: http ://wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination

于 2012-04-26T13:36:33.417 回答