浏览器总是跳转到缓存界面
介绍
关系数据库事务是ACID ,强大的一致性模型简化了应用程序开发。 由于启用Hibernate缓存是一项配置 ,因此,只要数据访问层开始出现性能问题,就转向缓存非常吸引人。 添加缓存层确实可以提高应用程序性能,但是它有其代价,您需要意识到这一点。
数据库性能调优
因此,数据库是任何企业应用程序的中心部分,其中包含有价值的业务资产。 数据库服务器的资源有限,因此可以服务有限数量的连接。 数据库事务越短,可以容纳的事务越多。 第一项性能调整操作是通过正确建立索引和优化查询来减少查询执行时间。
优化所有查询和语句后,我们可以添加更多资源( 向上扩展 )或添加更多数据库节点(向外扩展)。 水平缩放需要数据库复制 ,这意味着要同步节点。 同步复制保留了强大的一致性,而异步主从复制则导致了最终的一致性。
与数据库复制挑战类似,缓存节点会引起数据同步问题,尤其是对于分布式企业应用程序。
快取
即使适当地优化了数据库访问模式,较高的负载也可能会增加延迟。 为了提供可预测且恒定的响应时间,我们需要转向缓存 。 缓存使我们可以将数据库响应重用于多个用户请求。
因此,缓存可以:
- 减少数据库端的CPU /内存/ IO资源消耗
- 减少应用程序节点与数据库层之间的网络流量
- 提供恒定的结果获取时间,对流量突发不敏感
- 当应用程序处于维护模式时(例如,在升级数据库架构时)提供只读视图
引入缓存解决方案的不利之处在于,数据是通过两种独立的技术进行复制的,这些技术可能很容易失步。
在最简单的用例中,您有一台数据库服务器和一台缓存节点:
缓存抽象层知道数据库服务器,但是数据库对应用程序级缓存一无所知。 如果某些外部进程在不触摸缓存的情况下更新数据库,则两个数据源将不同步。 因为很少有数据库服务器支持应用程序级通知 ,所以缓存可能会破坏强一致性保证。
为了避免最终的一致性,需要在分布式XA事务中注册数据库和缓存,因此受影响的缓存条目将被同步更新或无效。
通常,构成整个企业系统的应用程序节点更多或多个不同的应用程序(Web前端,批处理程序,调度程序):
如果每个节点都有其自己的隔离缓存节点,则需要注意可能的数据同步问题。 如果一个节点在不通知其余节点的情况下更新数据库及其自身的缓存,则其他缓存节点将不同步。
在分布式环境中,当多个应用程序或应用程序节点使用缓存时,我们需要使用分布式缓存解决方案,以便:
- 缓存节点以对等拓扑进行通信
- 缓存节点以客户端-服务器拓扑进行通信,中央缓存服务器负责数据同步
结论
缓存是一种很好的扩展技术,但是您必须注意可能的一致性问题。 考虑到您当前的项目数据完整性要求,您需要设计应用程序以利用缓存而不损害关键数据。
缓存不是一个跨领域的问题,它渗入到您的应用程序体系结构中,并且需要一个经过深思熟虑的计划来补偿数据完整性异常。
翻译自: https://www.javacodegeeks.com/2015/04/things-to-consider-before-jumping-to-enterprise-caching.html
浏览器总是跳转到缓存界面