Solución:
Mientras investigaba las diversas arquitecturas de bases de datos también. He recopilado una buena cantidad de información que podría ser relevante para otra persona que investigue en el futuro. Me encontré con
- Replicación maestro-esclavo
- Replicación maestro-maestro
- Clúster MySQL
He decidido conformarme con usar MySQL Cluster para mi caso de uso. Sin embargo, consulte a continuación los pros y los contras que he compilado.
1. Replicación maestro-esclavo
Pros
- Las aplicaciones analíticas pueden leer de los esclavos sin afectar al maestro
- Copias de seguridad de toda la base de datos de relativamente ningún impacto en el maestro
- Los esclavos se pueden desconectar y sincronizar con el maestro sin ningún tiempo de inactividad
Contras
- En el caso de una falla, un esclavo debe ser ascendido a maestro para que ocupe su lugar. Sin conmutación por error automática
- Tiempo de inactividad y posiblemente pérdida de datos cuando falla un maestro
- Todas las escrituras también deben realizarse en el maestro en un diseño maestro-esclavo
- Cada esclavo adicional agrega algo de carga al maestro, ya que el registro binario debe leerse y copiarse los datos a cada esclavo.
- Es posible que la aplicación deba reiniciarse
2. Replicación maestro-maestro
Pros
- Las aplicaciones pueden leer de ambos maestros
- Distribuye la carga de escritura en ambos nodos maestros
- Conmutación por error simple, automática y rápida
Contras
- Vagamente consistente
- No es tan simple como maestro-esclavo de configurar e implementar
3. Clúster MySQL
El nuevo chico de la ciudad basado en el diseño de clústeres MySQL. El clúster MySQL se desarrolló teniendo en cuenta la alta disponibilidad y escalabilidad y es la solución ideal para entornos que no requieren tiempo de inactividad, alta disponibilidad y escalabilidad horizontal.
Consulte MySQL Cluster 101 para obtener más información.
Pros
- (Alta disponibilidad) Sin un solo punto de falla
- Rendimiento muy alto
- 99,99% de tiempo de actividad
- Auto-Sharding
- Capacidad de respuesta en tiempo real
- Operaciones en línea (cambios de esquema, etc.)
- Escrituras distribuidas
Contras
- Ver limitaciones conocidas
Puede visitar el desglose completo de mi Blog, incluidos los diagramas de arquitectura que detallan más sobre las 3 arquitecturas mencionadas.
Estamos negociando disponibilidad, consistencia y complejidad. Para abordar la última pregunta primero: ¿Importa esto? ¡Sí mucho! Las opciones relativas a cómo se administrarán sus datos son absolutamente fundamentales, y no hay “Mejores Prácticas” que eludan las decisiones. Debe comprender sus requisitos particulares.
Hay una tensión fundamental:
Una copia: la consistencia es fácil, pero si resulta que todo el mundo está fuera del agua, y si la gente está lejos, entonces pueden pagar costos de comunicación horribles. Traiga dispositivos portátiles, que pueden necesitar operar desconectados, en la imagen y una copia no será suficiente.
Maestro esclavo: la coherencia no es demasiado difícil porque cada dato tiene exactamente un maestro propietario. Pero entonces, ¿qué haces si no puedes ver a ese maestro? Se necesita algún tipo de trabajo pospuesto.
Maestro-Maestro: bueno, si puedes hacer que funcione, parece que ofrece todo, no hay un solo punto de falla, todos pueden trabajar todo el tiempo. El problema con esto es que es muy difícil de conservar la consistencia absoluta. Consulte el artículo de wikipedia para obtener más información.
Wikipedia parece tener un buen resumen de las ventajas y desventajas.
Ventajas
Si un maestro falla, otros maestros continuarán actualizando la base de datos.
Los maestros pueden estar ubicados en varios sitios físicos, es decir, distribuidos a través de la red.
Desventajas
La mayoría de los sistemas de replicación multimaestro son sólo vagamente coherentes, es decir, perezosos y asincrónicos, violando las propiedades de ACID.
Los sistemas de replicación ansiosos son complejos e introducen cierta latencia en la comunicación.
Problemas como la resolución de conflictos pueden volverse intratables a medida que aumenta el número de nodos involucrados y disminuye la latencia requerida.