集群时的缓存同步
概念:
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
集群技术是一种通用的技术,其目的是为了解决单机运算能力的不足、IO能力的不足、提高服务的可靠性、获得规模可扩展能力,降低整体方案的运维成本(运行、升级、维护成本)。Cluster必须可以协调管理各分离的组件的错误和失败,并可透明地向Cluster中加入组件。一个Cluster包含多台(至少二台)拥有共享数据存储空间的服务器。任何一台服务器运行一个应用时,应用数据被存储在共享的数据空间内。每台服务器的操作系统和应用程序文件存储在其各自的本地储存空间上。Cluster内各节点服务器通过一内部局域网相互通讯。当一台节点服务器发生故障时,这台服务器上所运行的应用程序将在另一节点服务器上被自动接管。当一个应用服务发生故障时,应用服务将被重新启动或被另一台服务器接管。当以上的任一故障发生时,客户都将能很快连接到新的应用服务上。
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
问题:
当一个应用部署在集群环境下的不同节点上并行运行时,每个服务器节点都是单独缓存。这样就很容易导致不同节点的缓存内容出现版本上的不一致。一台机器上修改了数据只会影响到本地的内存,但不会通知其他服务器,导致其他节点的缓存数据实际已经失效了。这样就必须实现在集群环境下保持缓存同步。
当原先为用户创建session的服务器崩溃了,出错恢复允许用户无缝地从另一台server上获得session信息。
实现:
用数据库/文件系统实现
当集群中的一台server上的应用更新时,更新的部分写入数据库,然后缓存管理器把所有机器上的缓存设为无效,强迫它们下次重新获取新的。只有一个缺点,就是要花时间把数据从数据库或共享的文件系统中取出,调入内存中。
用数据库/文件系统实现session持久性的主要缺点在于:当存储大的或很多对象在session中时有限的伸缩性。用户每次向HttpSession增加一个对象,session中所有的对象都要序列化并写入数据库或共享的文件系统。大多数用数据库实现session持久化的application server都主张尽量少用session存储object,但这会限制Web application的结构和设计,特别是用HttpSession存储用户数据时。
基于内存的实现
把内存中的信息写到一个备份服务器上。有两种做法:第一种把信息写到一个集中式状态服务器,集群中的所有机器都要把数据写到这台server上;第二种是集群中每个节点任意地选择一个节点作为backup server,将存储在内存中的数据单独序列化写入那台backup server。
上面两种方法中,如果集群中的机器数较少,用专门的state server比任意指定backup server要好,这样可以节省CPU来处理transaction和动态网页的生成。另一方面,当集群的机器数很大时,专门的state server就成为瓶颈,而向任意指定的backup server复制内存的消耗将随着机器数的增长而线性增长。当增加机器时用专门的state server,你需要为它加上更多的RAM和CPU。用任意指定的backup server你仅仅增加机器而已,信息会平均地分布在所有机器之间。基于内存的持久化提供了灵活的Web application设计规模和高可靠性
润乾报表的集群条件下的缓存更新策略:
随着对服务器集群的负载均衡能力要求越来越高,很多服务器推出了session同步的功能。即 同一个客户端在同一个访问周期里,可能第一次访问A机器,第二次跳转到B机器访问,此时在访问A机器过程中产生的session里的内容可以被同步复制到 B机器上。这个功能使得负载均衡更加合理,但是也带来了一系列问题。
服务器的集群只解决了服务器自己的session同步问题,而作为报表工具,润乾报表还提供了先进的参数缓存和报表缓存。那么,当客户端第一次访问 报表服务器的时候,A机器计算了报表并在A机器作了缓存,而当客户端第二次访问时,例如此时跳转到B机器,则在B机器上找不到报表的缓存,也找不到参数的 缓存,于是只好报错或者重新计算,一定程度上浪费了服务器的资源,降低了服务器的性能。
润乾报表专门针对此类情形,提供了集群服务器之间通讯的能力–集群时缓存同步,彻底解决了负载均衡时服务器之间跳转访问带来的缓存同步的问题。
其原理是:
客户端第一次访问报表服务器,A机器计算了报表并在A机器作了缓存,当客户端第二次访问时,例如此时跳转到B机器,B机器根据缓存id判断出是A机器做的缓存,于是B机器向A机器发送缓存请求,A机器读取缓存并把缓存结果发送给B机器,B机器再把结果返回给客户端。
实现步骤:
1、 在reportConfig.xml文件中做如下配置:
<config> <!– 配置缓存机器和缓存端口号–>
<name>clusterMember</name>
<value>A,192.168.0.59,8087;B,192.168.0.48,8087;</value>
</config>
<config> <!– 配置是否共享缓存目录–>
<name>isCachedFileShared</name>
<value>yes</value>
</config>
<config> <!– 配置缓存共享目录–>
<name>cachedReportDir</name>
<value>\\192.168.0.59\cached</value>
</config>
这里主要的是 clusterMember属性,它指定了系统缓存前缀、所有集群的服务器结点及每个服务器结点与缓存服务器间的通讯接口。
它的格式是:缓存前缀,IP,端口;(注:润乾通信端口非web服务器端口)
2、 重起服务器,即可实现集群时缓存同步
分享到:
相关推荐
在标题提到的“memcache缓存分布式集群”中,主要涉及以下知识点: 1. **分布式存储原理**:分布式存储是将数据分散存储在多台独立的设备上,以提高系统的可扩展性和可用性。Memcache分布式集群就是通过将数据分散...
### 集群的缓存技术 #### 一、多级缓存的构建与作用 在现代互联网系统架构中,为了提升系统响应速度和减轻后端数据库的压力,多级缓存成为了不可或缺的一部分。多级缓存策略通过在不同的层级设置缓存机制,有效地...
【Redis缓存高可用集群】是为了解决单机Redis在面临高并发、大数据量时可能出现的性能瓶颈和单点故障问题。本文将探讨Redis的两种集群方案:哨兵模式和高可用集群模式,以及如何搭建Redis高可用集群。 1. **哨兵...
分布式缓存Redis集群安装 本章节主要介绍了在CentOS 7系统下安装和配置Redis集群的步骤,包括单机安装Redis、Redis主从集群和Redis分片集群等内容。 单机安装Redis 在安装Redis之前,需要安装必要的依赖项,包括...
Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施installation。 Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况...
分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。...
Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。通过在内存中存储常用数据,Memcached能够快速响应客户端请求,避免了频繁的磁盘I/O操作。 ...
本地缓存与分布式缓存优缺点、使用场景 缓存是计算机系统中的一种优化技术,通过将频繁访问的数据存储在内存中,以减少对外部存储设备的访问次数,提高系统的响应速度和性能。本文将详细介绍本地缓存与分布式缓存的...
总的来说,"encache+jgroups集群缓存共享"是一个深度整合分布式缓存和群组通信的技术方案,它结合了EnCache的高性能缓存特性与JGroups的稳定通信能力,为大型分布式系统提供了高效、可靠的缓存解决方案。理解和掌握...
在"weblogic 集群与Coherence 集群之路"这个主题中,我们将探讨这两个关键组件如何协同工作,以构建高效、可扩展的企业级系统。 WebLogic集群是通过多台服务器实例的集合来提供高可用性和负载均衡的。每台服务器...
最后,启动多个应用实例,每个实例都会使用其对应的EhCache配置,并通过配置的网络信息与其他实例建立连接,形成缓存集群。这样,当在一个实例中更新缓存时,更新会被广播到其他实例,确保所有节点上的缓存保持一致...
【Nginx + Tomcat 负载均衡缓存服务器集群】 在面对高访问量和复杂业务需求时,构建一个高效的服务器集群是必要的。这里介绍的是使用Nginx作为负载均衡和缓存服务器,后端搭配Tomcat作为应用服务器的架构。这种架构...
在与Terracotta等其他开源JVM集群框架的比较中,Shoal强调了其基于API的事件通知模型,这有助于解决分布式系统中的数据复制问题。相比之下,Terracotta采用字节码增强的方式,更适合数据复制。Shoal的设计目标是提供...
在“redis本地缓存与redis缓存”的主题中,我们将深入探讨这两种缓存方式及其各自的特点。 首先,我们要理解什么是本地缓存。本地缓存指的是将数据存储在应用程序的内存中,通常是Java的HashMap、Guava Cache或C#的...
双层集群缓存系统分为两层:网内集群缓存层和代理集群缓存层。网内集群缓存层主要负责存储内部网络用户的访问内容,利用用户访问的局部性和相似性,将热门内容保存在本地,减少对外部网络的请求。而代理集群缓存层则...
关于单一窗口缓存配置和集群的事宜 本文档主要介绍了单一窗口缓存配置和集群的实现方式,涉及到缓存配置、缓存读取、缓存数据分页等多个方面。 缓存配置 缓存配置是指在系统中配置缓存的方式,使用 sysDict 实体...
MapCache是纯JAVA写的,用的HashMap来缓存数据,用的RMI来同步数据。支持某台服务器关闭后启动着的服务器自动将切换成单机状态,支持关闭的服务器重启后马上能同步更新已存在的数据并将缓存切换成同步状态,支持为...
一级缓存是 Hibernate 内置的,默认开启,与 Session 对象关联。它是一个事务范围的缓存,也就是说,每个 Hibernate Session 对应一个一级缓存,仅在当前事务中有效。一级缓存主要存储了 Session 在当前事务中加载和...
高速网络中集群web缓存系统设计
利用redis广播消息更新集群环境下本地缓存,包含说明和代码。 在软件系统开发中,有时需要将系统元数据放在数据库中,使用时再从数据库中查询。为避免频繁访问数据库,提升系统性能,需要将更新不频繁的数据放到本地...