本文转自:http://blog.csdn.net/DL88250/archive/2011/04/25/6361421.aspx
ToC
摘要
JPA 缓存
JPA 与应用集群
策略 1:禁用 L2 缓存
策略 2:L2 缓存同步
策略 3:一致性数据层
结语
反思
参考
摘要
本文主要介绍了 JPA 缓存体系结构以及在集群环境下 JPA 二级缓存的问题及应对策略。
JPA 缓存
JPA 缓存分为一级缓存(L1)与二级缓存(L2)。
其中,一级缓存即实体管理器(EntityManager),主要负责实体状态管理。
二级缓存即 EntityManagerFactory 缓存,主要负责缓存实体或数据行(例如 EclipseLink 缓存实体,Hibernate 缓存实体 Id 与数据行)。
查询时,二级缓存可以有效缓解数据库压力,并有助于集合实体的初始化。
JPA 与应用集群
当应用运行在一个 JVM 里时,JPA 缓存是没有问题的。但如果进行应用集群,那么 L2 的更新机制将出现一致性问题。
下面提供两个通用策略以及一个产品相关策略来解决这个问题。
策略 1:禁用 L2 缓存
如果禁用二级缓存的话,
所有节点的数据视图总是可以保证一致
数据总是一致的
每一次事务查询时都将从数据库获取数据构造实体
不存在节点间消息
应用占用内存上升,因为每次事务都要构造实体
每次事务需要效率变低,因为需要构造实体
性能瓶颈——数据库
策略 2:L2 缓存同步
如果进行 L2 缓存同步,
所有节点的数据视图总是可以保证一致
数据总是一致的
事务查询尽量使用 L2 缓存的实体
创建/更新/删除 实体时需要同步所有其他节点
同步代价为 O(n2 )——网络通讯与同步处理开销可能会超过缓存带来的好处
(Orz)
L2 缓存大小受限于单个节点 JVM 内存堆大小
主流 JPA 实现一般会提供 JMS、RMI、JGroups 来进行缓存同步。
策略3:一致性数据层
这里所谓的“一致性数据层”就是指使用一个能够保证分布式时数据一致性的服务,用于替换 L2。
例如组合使用 Oracle Coherence 与 TopLink Grid 。
结语
对于一个基于 JPA 的 Web 应用,我们必须注意 JPA 二级缓存在集群时的问题,这是可伸缩的基本点之一。
为了解决 JPA 二级缓存不一致的问题,我们必须牺牲一定的应用性能,或是使用商业产品。
反思
ORM 固然方便,但我认为它带来的问题远比解决的问题多,基于关系型数据库的应用还是 JDBC 直接。
框架是为了简化代码,统一管理。但同时带来的限制也不容忽视。
个人还是偏向于自造轮子,宁肯多写一些代码,也不愿被框架束缚。
参考
Shaun Smith, TopLink Grid: Scaling JPA Application with Coherence , 2010
Tom Pfaeffle, Oracle Fusion Middleware Integration Guide for Oracle TopLink with Coherence Grid, 11g Release 1 (11.1.1) E16596-02 , 2011-02
Doug Clarke, Persistence Strategies for Java EE and WebLogic
EclipseLink
Sandesh, Toplink Cache and Weblogic Cluster
本文是使用 B3log Solo 从 简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/jpa-cache-cluster.html
分享到:
相关推荐
【标题】"spring boot+jpa+redis集群"的实现与应用 在现代互联网开发中,Spring Boot、JPA(Java Persistence API)以及Redis已经成为构建高效、可扩展的应用程序的常用技术栈。本项目结合这三个核心组件,旨在创建...
- 使用JPA的缓存机制,如一级缓存(Entity Manager级别的缓存)和二级缓存(可选,如Hibernate的第二级缓存),提升查询效率。 11. **Spring Boot集成** - 在Spring Boot项目中,Spring Data JPA的配置非常简单,...
这些库结合在一起,为基于Spring、Struts和JPA的Web应用提供了一个完整的环境,包括了数据访问、业务逻辑处理、视图渲染、集群支持和性能优化等多个方面的功能。在开发过程中,开发者可以利用这些库快速构建出高效、...
- **缓存机制**: 第一级缓存是实体管理器内部的缓存,第二级缓存可配置为应用范围或集群范围。 - **批处理**: 配置JPA批处理大小,提高性能。 总之,JPA是Java开发中非常重要的数据访问工具,通过它,我们可以方便...
运行 QueryWith2lcBenchmark/FindWith2lcBenchmark: -Djub.consumers=CONSOLE,H2 -Djub.db.file=.benchmarks 要添加 Byteman,请添加: -javaagent:/opt/byteman/lib/byteman.jar=listener:true,boot:/opt/byteman/...
在本篇Spring Boot 2.x基础教程中,我们将探讨如何使用集中式缓存系统Redis来提升应用程序的性能和数据一致性。在之前的章节中,我们学习了Spring Boot默认的ConcurrentMap缓存和EhCache,但这些缓存机制在多服务器...
尽管随着Spring Data JPA等现代技术的崛起,Hibernate的使用频率有所下降,但其核心概念和技术仍然具有重要价值,特别是对于缓存管理的理解和应用。 在一对一关联的映射中,Hibernate提供了两种方式:外键映射和...
### Java分布式应用与SOA概览 在深入探讨Java分布式应用和面向服务架构(SOA)之前,我们首先需要理解这两个概念的基本含义及其在现代IT系统中的重要性。 #### Java分布式应用 Java分布式应用是指利用Java编程...
它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地创建一个独立的、生产级别的基于 Spring 的应用。 在本压缩包文件中,我们可以看到一系列围绕 SpringBoot 进行...
5. **集群与高可用性** JBoss 可以配置为集群,实现负载均衡和故障转移,提升系统的可用性和性能。 6. **微服务架构支持** JBoss EAP 支持容器化和微服务架构,通过 WildFly Swarm 或 KubeVirt 提供 Kubernetes ...
Oracle TopLink Grid 是一个强大的工具,它将Oracle Coherence(内存数据网格)的功能与TopLink对象关系映射框架集成,以实现高效的缓存和分布式计算。这篇文章主要关注如何使用Coherence作为TopLink的二级(L2)...
首先,Spring Cloud 2是微服务架构的核心框架,它为开发者提供了构建分布式系统中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等多种功能。...
6. **集群与SpringBoot的交互** - **读写分离**:在集群环境下,可以配置SpringBoot应用进行读写分离,如主节点写入,副本节点读取。 - **事务处理**:在分布式环境中,事务管理变得复杂。Spring提供了分布式事务...
- Spring Data JPA:简化了与数据库的交互,支持ORM(对象关系映射)。 - Spring Security:提供身份验证和授权机制,保护应用的安全。 - Spring Cloud Config:用于实现配置的集中管理和动态更新。 - Spring ...
3. **负载均衡与集群**:随着用户数量的增长,可能需要使用Nginx等反向代理服务器实现负载均衡,以及将应用部署在集群上,以保证服务的高可用性。 4. **数据备份与恢复**:定期备份数据库,防止数据丢失,并设置...
本系统采用JAVA技术构建,中间层与数据访问层采用了SPRING框架和EclipseLink框架,采用了数据库二级缓存技术、大并发数据访问支持能力卓越,这种能力在多用户同时考试生成试卷和同时提交试卷并计算得分时非常重要,...
在Java Web应用框架领域,Spring Cloud框架提供了构建微服务所需的一整套解决方案,包含配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话和集群状态等。...
7. **负载均衡与集群**:通过负载均衡器分配请求到多个服务器,可以提高应用的可用性和处理能力。J2EE应用可以部署在集群环境中,实现session复制或共享,以保证用户会话的连续性。 8. **监控和性能分析**:使用如...
3. 集群与高可用性:WebLogic支持服务器集群,可以提高系统的可用性和容错能力,确保服务的连续性。 三、WebLogic配置与管理 1. 服务器配置:包括JVM参数设置、网络配置、日志和诊断设置等,这些设置对服务器性能...
在实际应用中,`jboss-cache.jar`通常与JPA(Java Persistence API)或Hibernate等ORM框架结合使用,提供透明的缓存支持。这样,数据库操作的结果可以直接放入缓存,提高读取效率。同时,它也支持第二级缓存,即在一...