Control de procesamiento por lotes simultáneo del mismo lote de datos por parte de múltiples servidores
Hay un problema muy serio con esto: solo hay un servicio activo a la vez.
Si el Sistema A obtiene los datos e inicia una transacción, pero no la confirma, entonces el Sistema B encontrará el mismo lote de datos que no se confirmó correctamente en las mismas condiciones. En este momento, el hilo de consulta del sistema B bloqueará la transacción esperando que A se envíe. Entonces aquí viene la pregunta. Aunque solo un servicio puede obtener y procesar un lote de datos al mismo tiempo, esto también conduce a una eficiencia extremadamente baja. No importa cuántas aplicaciones de servicio se expandan más adelante, es inútil.
Instrucciones paso a paso:
Aquí solo he escrito un plan aproximado y hay algunos aspectos de alta disponibilidad e idempotencia de datos de Redis que he considerado yo mismo.
Este método es la mejor solución en mi opinión. Garantiza completamente que cada servicio procese los datos de MySQL de forma diferente y evita por completo los problemas de competencia.
Pero actualmente no utilizamos esta solución porque... actualmente nuestra memoria redis solo se aplica a una cantidad de memoria relativamente pequeña. La estructura de tabla de salto utilizada por zset garantiza que la consulta de datos sea muy rápida, pero. También ocupa mucho espacio. Se estima que, según nuestro volumen de datos, se deben almacenar al menos 3 millones de datos y la cantidad de memoria utilizada es de entre 3 y 4 G. Buen chico, toda nuestra memoria se utiliza directamente. Otros servicios son inútiles... y para garantizar la seguridad de los datos, esto debe dejar al menos 1G de espacio de seguridad libre sin borrar datos... Eso definitivamente es inútil.
Si los datos de su servicio son lo suficientemente pequeños o su memoria es lo suficientemente grande y la disponibilidad y confiabilidad de redis son altas, todavía recomiendo esta solución. Después de todo, ¡muchos servicios están orientados al rendimiento!