【问题标题】:Is Zookeeper appropriate for object caching?Zookeeper 是否适合对象缓存?
【发布时间】:2012-06-14 17:56:28
【问题描述】:

开发云系统时着眼于可扩展性,这意味着系统沿功能边界(usermgmt、ordermgmt、customermgt 等)组合成基于 REST 的服务,每个服务都有自己的底层数据库,并且根据负载,我们可能会启动多个实例,比如 ordermgmt 服务。当 ordermgmt 服务处理添加订单的请求时(代表“客户”),它将对 customermgmt 服务进行 REST 调用以验证客户等...

由于客户实体不会经常更改,我想知道 ZooKeeper 之类的东西是否适合缓存特定客户的实例,customermgmt 服务的多个实例可能会在访问数据库之前对其进行询问。我查看了 Zookeeper 使用的各种列表,但没有看到有人将它用于对象缓存。似乎推荐的 znode 字节大小约为 1K,因此不适合存储脱水对象。也没有开箱即用的 GC 或 LRU 支持,所以我也需要添加它。

如果不是 Zookeeper,还有更合适的建议吗?我们使用 Hibernate 作为 ORM,但我们没有很多经验,虽然它支持 1 级和 2 级缓存,但我不确定它们是否以分布式/复制方式跨多个服务实例工作.

谢谢 斯科特

【问题讨论】:

    标签: hibernate caching cloud distributed apache-zookeeper


    【解决方案1】:

    其实你可以设置很多不同的技术,不管是分布式的还是非分布式的,作为Hibernate的L2缓存。

    • EhCache
    • 内存缓存
    • JCache
    • 榛树
    • Infinispan
    • 兵马俑
    • Gigaspaces XAP
    • 宝石之火
    • 连贯性

    最后一个,称为数据网格,通常不是免费的,我认为你不需要一个完整的数据网格只是为了一个 l2 缓存。

    我从未使用过它,但我不认为 Zookeeper 被用作分布式缓存。

    【讨论】:

      【解决方案2】:

      Zookeeper 不太适合对象缓存。

      Zookeeper 将整个数据库保存在 Java 堆的内存中。一旦 java 堆超过一个 Gigabyte 左右,您将开始遇到 gc 暂停问题。这对 zookeeper 来说尤其麻烦,因为 zookeeper 节点不断地相互发送心跳,如果在节点忙于 gc'ing 时错过了足​​够的心跳,就会触发领导者选举,从而使集群暂时停机。

      使用 zookeeper 作为缓存的另一个问题是,zookeeper 集群中的所有节点都将拥有相同的数据,而您通常不需要缓存。

      由于这些限制,您的 3 台服务器(每台都有 8 gig 的 ram)设法为大约 1 Gig 的总工作集提供服务。最好使用 memcache,或 Sebastien 列出的其他缓存系统之一。

      【讨论】:

        猜你喜欢
        • 2012-10-20
        • 2018-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 2011-10-18
        • 2014-11-16
        相关资源
        最近更新 更多