我在jboss7上组装了一个常规的Java应用程序,它将在数据层使用JPA。我想让这个应用程序能够随着负载的增加而扩展。虽然很清楚如何扩展web层:创建更多的机器并将它们放在负载均衡器后面,但扩展数据层就不那么简单了。
我可能可以集群我的数据库(MySQL)。Stil,这会使JPA层处于非集群状态。理想情况下,JPA将通过使用MySQL支持的内存中(集群)缓存进行扩展。
当我环顾四周时,所有关于JPA scaling的信息似乎都是3-4年前的事情。人们谈论ehcache,memcached和infinispan。我不确定这是否仍然是最新的。
有人能告诉我Java EE集群和伸缩方面的最新技术吗,尤其是在数据层。
发布于 2012-04-26 21:29:02
各种缓存策略仍然是扩展JPA/Hibernate的方法(您在问题中基本上列出了最流行的选项)。据我所知,在这个领域4-5年来没有发生什么不寻常的事情。您还没有提到的另一个选项是JBoss缓存。因此,JPA/Hibernate的二级缓存仍然在这一领域占据统治地位。
为什么这里没有进展?我的猜测是,首先,需要可伸缩应用程序的人倾向于在需要高性能的领域忽略JPA和Hibernate。通常,人们会使用SQL语言、Spring框架、JDBCTemplate助手和事务管理。那么,可伸缩性就是这一领域的数据库能力问题。
另一种趋势是使用No-SQL数据库。有很多解决方案: MongoDB,CouchoDB,Cassandra,Redis等等。这些通常是类似Google BigTable的键值存储(这是过于简化,但这或多或少是这种方法背后的想法),如果你接受它们的局限性(关系不再容易管理,等等),它们的规模就像地狱一样大。
发布于 2012-04-26 21:36:33
有很多解决方案,主要有两类解决方案:
(使用群集缓存扩展数据库以降低数据库负载)
EclipseLink支持数据分区以跨一组数据库实例对数据进行分片。
请参阅:http://java-persistence-performance.blogspot.com/2011/05/data-partitioning-scaling-database.html
您也可以使用MySQL集群,
请参阅:http://www.mysql.com/products/cluster/
Oracle网格为与TopLink Coherence作为分布式缓存集成提供了EclipseLink JPA支持,
请参阅:http://www.oracle.com/technetwork/middleware/ias/tl-grid-097210.html
EclipseLink的缓存通过缓存协调支持集群,
请参阅:http://wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination
https://stackoverflow.com/questions/10328581
复制相似问题