Zookeeper适用于对象缓存吗?

Sco*_*ish 11 cloud distributed caching hibernate apache-zookeeper

开发一个关注可扩展性的云系统,这意味着系统根据功能边界(usermgmt,ordermgmt,customermgt等)组成基于REST的服务,每个服务都有自己的底层数据库,并且根据负载,可以假定我们可以实现多个说ordermgmt服务的实例.当ordermgmt服务处理添加订单的请求(代表"客户")时,它将对customermgmt服务进行REST调用以验证客户等...

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

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

谢谢斯科特

sbr*_*ges 11

Zookeeper不适合对象缓存.

Zookeeper将整个数据库保存在java堆的内存中.一旦java堆超过千兆字节,你将开始遇到gc暂停的问题.这对于zookeeper来说尤其麻烦,因为zookeeper节点不断地向对方发送听力,如果在节点忙碌时错过了足​​够的心跳,则会触发领导者选举,使群集下降到momemtarily.

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

由于存在这些限制,您的3台服务器(每台服务器具有8台内存)可以提供~1 Gig的总工作集.最好使用memcache,或其他一个缓存系统Sebastien列表.


Seb*_*ber 4

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

  • 高速缓存
  • 内存缓存
  • JCache
  • 榛卡斯特
  • 无限跨度
  • 红陶
  • 千兆空间XAP
  • 宝石火
  • 连贯性

最后一个称为数据网格,通常不是免费的,我认为您不需要仅用于二级缓存的整个数据网格。

我从未使用过它,但我不认为 Zookeeper 是为了用作分布式缓存而设计的。