`
peterwanghao
  • 浏览: 123533 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

集群环境下的缓存同步和出错恢复

 
阅读更多
概念:
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
集群技术是一种通用的技术,其目的是为了解决单机运算能力的不足、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设计规模和高可靠性。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics