es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Procesamiento de registros por aplicación de múltiples instancias mediante ZooKeeper.

Tengo una aplicación de microservicios que tiene un planificador para recoger datos de la base de datos basado en la bandera isProcessed=false. Se ejecuta continuamente cada 1 segundo y recupera 50 registros a la vez. Tras una lectura exitosa y un procesamiento, actualiza el valor de las filas a isProcessed=true. Estoy utilizando la selección y actualización JDBC para llevar a cabo las operaciones en la base de datos desde la aplicación.

Actualmente estoy ejecutando una sola instancia de la aplicación y si quiero ejecutar varias instancias del microservicio, se producirá una condición de carrera en las filas de la base de datos. Múltiples instancias de la aplicación recuperan y actualizan las mismas filas dos veces. ¿Cómo evitar múltiples recuperaciones del mismo registro en una aplicación de múltiples instancias?

¿Existe alguna manera de utilizar zookeeper para coordinar entre múltiples instancias y tener información de los registros de la base de datos seleccionados? En una instancia de base de datos de múltiples instancias, las filas leídas por una instancia deben estar bloqueadas y no deben ser leídas por otras.

Mi tabla se ve así (1,2,3 no procesados y 4,5 procesados y actualizados):

---------------------------
C1 | C2 | C3 | isProcessed
----------------------------
1  | a  | 3  | false
2  | b  | 3  | false
3  | c  | 3  | false
4  | d  | 3  | true
5  | f  | 3  | true

Ejecutar múltiples instancias mejorará el rendimiento de procesamiento de mi base de datos de registros, ya que múltiples instancias trabajarán en la misma base de datos. ¿Cómo evitar la superposición/procesamiento del mismo registro mediante microservicios diferentes?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Implementación de la coordinación con Zookeeper

    Para evitar condiciones de carrera entre múltiples instancias del microservicio, podemos utilizar Zookeeper como una herramienta de coordinación. La idea es que cada instancia se registre en Zookeeper y cuando esté lista para tomar registros de la base de datos, creará un nodo en Zookeeper para ese registro. Otras instancias consultarán a Zookeeper para verificar si existen nodos antes de intentar tomar un registro.

    Aquí hay una descripción general de alto nivel de los pasos involucrados:

    1. Cada instancia del microservicio se registra en Zookeeper.
    2. Cuando una instancia está lista para tomar registros de la base de datos, verifica si existen nodos en Zookeeper.
    3. Si no hay nodos para un registro en particular, la instancia crea un nodo para ese registro en Zookeeper.
    4. Una vez que la instancia ha tomado el registro y lo ha procesado, elimina el nodo de Zookeeper.
    5. Otras instancias, al consultar Zookeeper para obtener nodos, omitirán cualquier nodo que ya esté presente.

    Este enfoque asegura que solo una instancia del microservicio tomará un registro en particular en cualquier momento dado, evitando superposiciones y duplicaciones. Al utilizar Zookeeper, tenemos una herramienta de coordinación distribuida que puede manejar múltiples instancias del microservicio y escalar según sea necesario.

    Java y Apache Camel se pueden utilizar para implementar esta coordinación con Zookeeper utilizando el componente Zookeeper en Apache Camel. Se puede utilizar Quartz-Scheduler para programar la búsqueda de la base de datos de registros no procesados.

Comments are closed.