2012-06-11 20 views
10

Desarrollar un sistema en la nube con escalabilidad significa que el sistema está compuesto en servicios REST a lo largo de límites funcionales (usermgmt, ordermgmt, customermgt etc.) cada uno con su propia base de datos subyacente y dependiendo de la carga, es posible que giremos hasta varias instancias de, por ejemplo, el servicio ordermgmt. Cuando el servicio ordermgmt procesa una solicitud para agregar un pedido (en nombre de un "cliente"), realiza una llamada REST al servicio customermgmt para validar al cliente, etc. ...¿Es Zookeeper apropiado para el almacenamiento en caché de objetos?

Dado que una entidad cliente no cambiaría muy a menudo, me pregunto si algo como ZooKeeper sería apropiado para almacenar en caché una instancia de un cliente en particular que múltiples instancias de un servicio de customermgmt podrían interrogar antes de llegar a la base de datos. He observado las diversas listas de usos de Zookeeper pero no veo a nadie usándolo para caché de objetos. Parece que el tamaño znode de bytes recomendado es de aproximadamente 1 KB, por lo que no es apropiado para almacenar un objeto deshidratado. Además, no hay soporte para GC o LRU de manera inmediata, así que también tendría que agregar esto.

Si no Zookeeper, ¿alguna sugerencia más apropiada? Estamos utilizando Hibernate como ORM, pero no tenemos mucha experiencia con él y si bien admite cachés de primer y segundo nivel, no estoy seguro de si funcionan de manera distribuida/replicada en varias instancias de servicio. .

Gracias a Scott

Respuesta

3

En realidad se puede establecer muchas tecnologías diferentes, distribuidos o no, ya que la memoria caché L2 de hibernación.

  • Ehcache
  • Memcached
  • JCache
  • Hazelcast
  • Infinispan
  • terracota
  • GigaSpaces XAP
  • Gemfire
  • Coherencia

Los últimos, llamados datagrids, generalmente no son gratuitos y no creo que necesite una cuadrícula de datos completa solo para un caché l2.

Nunca lo he usado, pero no creo que Zookeeper haya sido creado para ser utilizado como un caché distribuido.

10

Zookeeper no es una buena opción para un caché de objetos.

Zookeeper mantiene toda la base de datos en la memoria en el montón de Java. Una vez que el montón de java supera un gigabyte, comenzarás a tener problemas con las pausas de gc. Esto es especialmente problemático con el cuidador del zoológico porque los nodos guardianes del zoológico se envían constantemente audiciones, y si se pierden latidos suficientes mientras un nodo está ocupado, se desencadena una elección de líder que hace que el clúster baje momentáneamente.

El otro problema con el uso de zookeeper como caché es que todos los nodos en un grupo de zookeeper tendrán los mismos datos, que normalmente no necesitan para un caché.

Con estas limitaciones, sus 3 servidores, cada uno con 8 gigas de ram, logran servir un conjunto de trabajo total de ~ 1 Gig. Es mejor usar Memcache, o uno de los otros sistemas de caché que Sebastien enumera.

Cuestiones relacionadas