2011-10-24 22 views
6

Estoy escribiendo una aplicación distribuida que involucra varios nodos frontales que necesitan denegar acciones al usuario a menos que sean parte de una lista.¿Tiene sentido usar Zookeeper para almacenar permisos de usuario?

Ahora tenemos más de 4 de esos nodos pero solo un servidor de base de datos que ejecuta DB2 que a menudo está fuera de servicio por mantenimiento.

En este momento estamos consultando la base de datos para actualizar una lista en la memoria, de modo que si un usuario es eliminado de la lista, el cambio se refleje en los 4 nodos. Pero si uno de los nodos se reinicia mientras la base de datos está inactiva, terminaríamos con una lista vacía que denegará todas las solicitudes de los usuarios que no queremos. Podemos aceptar la solicitud del usuario incluso si la base de datos está inactiva ya que los almacenamos en una cola de mensajes, pero queremos rechazarlos inmediatamente si necesitan ser rechazados.

Tiene sentido ejecutar una instancia de Zookeeper en cada uno de nuestros 4 nodos y almacenar el permiso de usuario en Zookeeper. Por lo tanto, la lectura debe ser rápida y los datos altamente disponibles y consistentes. No tendríamos que volver a hacer sondeos e incluso si reiniciamos la base de datos, ¡el nodo podrá obtener su configuración de zookeeper!

Respuesta

10

Sí, la forma en que ha descrito su problema, Zookeeper debe encajar a la perfección. Hay algunas preguntas sin embargo, que se necesita contestar:

  • ¿Cuántos datos estamos hablando? Zookeeper persiste los datos en el disco, pero funciona solo si los datos se ajustan a la memoria RAM.

  • ¿Con qué frecuencia se cambian los datos? Zookeeper asegurará que más de la mitad de los nodos recibió la actualización, por lo que las escrituras no son exactamente efectivas.

  • ¿Cuántos datos se deben leer a la vez? Zookeeper tiene un límite de tamaño de respuesta de 1MB, pero su recomendación es mantener los datos muy por debajo de ese límite. Tenga en cuenta que este límite también se puede alcanzar si está enumerando un nodo con muchos hijos, ya que los nombres secundarios cuentan como datos.

Teniendo en cuenta que los datos se sirve de la RAM, la lectura no debería ser un gran problema, pero siempre se puede resultados de caché, y establecer el reloj en los nodos apropiados para invalidar los datos locales.

Cuestiones relacionadas