He estado trabajando en esto durante unos días y he encontrado varias soluciones, pero ninguna de ellas increíblemente simple o ligera. El problema es básicamente esto: tenemos un clúster de 10 máquinas, cada una de las cuales ejecuta el mismo software en una plataforma ESB multiproceso. Puedo lidiar con problemas de concurrencia entre subprocesos en la misma máquina con bastante facilidad, pero ¿qué pasa con la concurrencia en los mismos datos en diferentes máquinas?Distributed Concurrency Control
Esencialmente, el software recibe solicitudes para alimentar los datos de un cliente de una empresa a otra a través de servicios web. Sin embargo, el cliente puede o no existir aún en el otro sistema. Si no es así, lo creamos a través de un método de servicio web. Por lo tanto, requiere una especie de prueba y configuración, pero necesito un semáforo de algún tipo para evitar que las otras máquinas causen condiciones de carrera. He tenido situaciones en las que se creó un cliente remoto dos veces para un solo cliente local, lo que no es realmente deseable.
Soluciones He jugado con conceptualmente son:
Utilizando nuestro sistema de archivos compartidos con tolerancia a fallos para crear "bloquear" los archivos que serán controlados por cada máquina en función del cliente
Usando una tabla especial en nuestra base de datos, y bloqueando toda la tabla para hacer un "test-and-set" para un registro de bloqueo.
Uso de Terracotta, un software de servidor de código abierto que ayuda a escalar, pero utiliza un modelo de cubo y radio.
Uso de EHCache para la replicación sincrónica de mis "bloqueos" en memoria.
No me puedo imaginar que soy la única persona que ha tenido este tipo de problema. ¿Cómo lo resolvió? ¿Has cocinado algo en la empresa o tienes un producto favorito de terceros?
En lugar de probar y establecer, ¿podría la responsabilidad de asegurarse de que no haya ningún duplicado se transfiera al servicio que crea nuevos clientes? –