Gemfire服务器/客户端体系结构的默认故障/恢复行为

时间:2017-02-08 21:50:15

标签: caching gemfire spring-data-gemfire

对于gemfire缓存,我们在3个不同的地理区域使用客户端/服务器架构,使用3个不同的定位器。

缓存服务器

  • 每个区域都有2个独立的缓存服务器,可能是一个 主要和次要
  • 缓存服务器是点对点连接
  • 缓存服务器上的数据策略是重复的
  • 未启用区域持久性

缓存客户端

  • 未启用持久性
  • 未设置持久队列/订阅

以下方案的默认行为是什么:

  • 一个地理区域中的所有缓存服务器崩溃,当缓存服务器重新启动时,缓存客户端中的数据会发生什么? 缓存客户端与代理或缓存代理客户端缓存区域的行为是否不同?
  • 一个地理区域中的所有缓存客户端崩溃。虽然我们没有设置持久队列/订阅,但对于这种情况,让我们假设我们这样做。重启后缓存客户端中的数据会发生什么变化? 缓存客户端与代理或缓存代理客户端缓存区域的行为是否不同?
  • 一个地理区域中的所有缓存服务器缓存客户端崩溃,缓存服务器中的数据会发生什么情况缓存客户端启动时? 缓存客户端与代理或缓存代理客户端缓存区域的行为是否不同?

提前致谢!

1 个答案:

答案 0 :(得分:1)

好的,基于我如何解释您的配置/设置和问题,这就是我目前的回答。

另请注意,我假设您没有在位于不同地理区域的单独群集之间配置WAN"。但是,如果配置了WAN,一些问题无关紧要。

  1. 关于你的第一颗子弹......
  2.   

    缓存服务器重启时缓存客户端中的数据会发生什么变化?

    没有

    如果缓存客户端也存储数据"本地" (例如CACHING_PROXY),那么数据将保持不变。

    缓存客户端还可以使仅本地区域仅对缓存客户端可用,即服务器群集中没有匹配(通过" name")区域。这是由本地"本地"中的一个决定的。 ClientRegionShortcuts(例如ClientRegionShortcut.LOCALcorrespondsDataPolicy.NORMAL)。当然,如果群集中的服务器出现故障,则这些类型的客户端区域中的数据不会发生任何变化。

    如果您的客户区域是PROXIES,那么您的客户端不会在本地存储任何数据,至少对于那些配置为PROXIES的区域(即ClientRegionShortcut.PROXYcorrespondsDataPolicy.EMPTY )。

    因此...

      

    具有代理或缓存代理客户端缓存区域的缓存客户端的行为是否不同?

    见上文,但基本上是你的" PROXY"基于客户的区域将不再能够进行通信"与服务器。

    对于PROXY,所有Region操作(获取,放置等)都将失败,并具有某种异常。

    对于CACHING_PROXY,如果数据在本地可用,则Region.get应该成功。但是,如果数据不可用,客户端Region会将请求发送到服务器Region,这当然会失败。如果您正在执行Region.put,那么将无法检测到数据无法发送到服务器。

    1. 关于你的第二颗子弹......
    2.   

      缓存客户端重启时的数据会怎样?

      取决于您的<#34; 兴趣注册(结果)政策&#34; (即InterestResultPolicy)当服务器区域中的事件(键/值)的客户端registers interests时,特别是当客户端重新联机时。兴趣&#34;表达&#34; (特定键或&#34; ALL_KEYS&#34;或正则表达式)确定客户端区域在初始化时将接收的内容。这可能是not to receive anything

      持久性(客户端&#34;订阅队列中的`Region.registerInterest(..)。)中的durable标志&#34;仅确定当客户端未连接时服务器是否将为客户端存储事件,以便客户端可以在脱机时接收错过的内容。

      注意,&#34; 注册兴趣的替代&#34;是CQ。

      有关详细信息,请参阅herehere

      至于......

        

      具有代理或缓存代理客户端缓存区域的缓存客户端的行为是否不同?

      不是我知道的。这一切都取决于您的兴趣注册和/或CQ。

      1. 最后,关于你的最后一颗子弹......
      2.   

        一个地理区域中的所有缓存服务器和缓存客户端崩溃,缓存服务器和缓存客户端启动时的数据会发生什么变化?

        如果不启用持久性,则不会有数据。 GemFire是一个内存和#34;数据网格,因此,它只将数据保存在内存中,除非您通过持久性或编写CacheWriter将数据存储在外部数据存储(例如RDBMS)中来安排外部存储数据。 / p>

          

        具有代理或缓存代理客户端缓存区域的缓存客户端的行为是否不同?

        不是这种情况。

        希望这有帮助! -John