【问题标题】:What does a Terracotta server do when it is used as a backend for EHCache with Hibernate?当 Terracotta 服务器用作带有 Hibernate 的 EHCache 的后端时,它会做什么?
【发布时间】:2011-06-18 18:59:01
【问题描述】:


我的 DAL 是使用 Hibernate 实现的,我想使用 EHCache 作为具有分布式功能(用于可扩展性和 HA)的二级缓存。
看到EHCache 仅提供分布式缓存Terracotta 我的问题是Terracotta 服务器实例的作用是什么?它还保存数据吗?它是否只协调分区缓存部分之间的分布?
我的困惑主要来自 this 关于 TSA 的解释,它说服务器保存数据,但我认为在我的场景中缓存和 Terracotta 服务器可能是合并的。我说的对吗?
如果服务器确实保存了数据,那么为什么瓶颈不应该从数据库转移到Terracotta 服务器呢?

更新: Affe 的回答回答了我的问题的第二部分,这是重要的部分,但万一有人来寻找第一部分,我会说 TC 服务器必须保存内存中 EHCache 保存的所有数据,所以如果你想要一个分布式缓存(不复制),那么 L2(TC 服务器)也必须自己保存所有对象。

提前致谢,
伊泰

【问题讨论】:

    标签: java hibernate ehcache distributed-caching terracotta


    【解决方案1】:

    这个想法是,通过 terracotta 驱动程序联系 terracotta 集群并执行基本上是 Map 查找的操作,比获取数据库连接并执行 SQL 语句要快得多。即使这确实成为应用程序的阻塞点,预计总体吞吐量仍将显着高于 JDBC 连接 + SQL 阻塞点。开放的连接和开放的游标是数据库中的大资源占用,兵马俑集群的开放套接字不是!

    【讨论】:

    • 我将问题理解为 - 为什么 EHCache 需要兵马俑,而例如 JBoss 缓存是分散的,不需要任何额外的服务器
    • 这实际上不是问题,但这是一个很好的附录。
    • 我想我们不清楚你的哪一个?陈述是修辞,实际问题是什么? '是的'你明白,兵马俑解决方案使用外部服务器集群。我试图专注于最后一个实际问题,即你为什么要费心去做这样的事情。
    【解决方案2】:

    您可以在不使用 terracotta 的情况下将 ehcache 集群化。他们有通过 RMI、JGroups 和 JMS 执行此操作的文档。我们正在使用 JMS,因为我们已经有一个重要的 JMS 基础设施来处理通信。我不知道从长远来看它的扩展性如何,但我们目前关心的只是 HA。

    【讨论】:

    • 谢谢马特。事实上,没有 Terracotta,你可以获得复制而不是分发,这似乎不符合我在可扩展性方面的需求。
    • eh 可以作为对象缓存很好地使用这些类型的复制方法,但是,当以这种方式使用时,它不支持较旧的 Hibernate SPI 进行锁定。特别是作为 Hibernate L2 缓存,您必须非常小心,因为 Hibernate 将发出简单地忽略的锁定命令。 (行为取决于两者的特定版本)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多