2012-06-11 67 views
10

开发云计算系统时要注意可扩展性,这意味着系统被组成基于REST的服务,这些服务沿着功能边界(usermgmt,ordermgmt,customermgt等),每个服务都有自己的底层数据库,并且根据负载情况,我们可能会旋转说出ordermgmt服务的多个实例。当ordermgmt服务处理添加订单的请求(代表“客户”)时,它将对customermgmt服务进行REST调用以验证客户等等。Zookeeper是否适用于对象缓存?

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

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

感谢 斯科特

回答

3

其实你可以设置许多不同的技术,分布式与否,休眠的二级缓存。

  • 的Ehcache
  • Memcached的
  • 的JCache
  • Hazelcast
  • 的Infinispan
  • 陶土
  • GigaSpaces的XAP
  • 的GemFire
  • 连贯

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

我从来没有使用过它,但我不认为Zookeeper是作为分布式缓存使用的。

10

Zookeeper不太适合对象缓存。

Zookeeper将整个数据库保存在java堆的内存中。一旦Java堆获得超过1 GB的技术,您将开始遇到gc暂停的问题。这对于动物园管理员来说尤其麻烦,因为动物园管理员节点不断地向对方发送听力信号,并且如果在节点繁忙时漏掉足够的心跳,则会触发领导者选举,从而使集群陷入昏迷状态。

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

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

相关问题