Pregunta

Tenemos dos sistemas en los que el sistema envía los datos a un sistema de B. Es un requisito que cada sistema puede ejecutar de forma independiente de la otra y tampoco lo hará estallar si el otro está abajo. La pregunta es ¿cuál es la mejor manera para el sistema de A a comunicarse con el sistema B, mientras que cumplir con el requisito de desacoplamiento.

Sistema B tiene actualmente un proceso que los datos de encuestas de una tabla db y procesa las nuevas filas que se han insertado.

Un diseño propuesto es para el sistema de A a simplemente insertar datos en la tabla db sistema de b y tienen sistema de proceso B las nuevas filas por el proceso existente. La pregunta es qué esta solución cumple con el requisito de la disociación de los dos sistemas? Es una parte de base de datos considerados de un sistema B, que podría convertirse en un sistema disponible y causa para hacer estallar?

Otra solución es para el sistema de A a poner los datos en una cola de MQ y tener un proceso que leer de MQ y luego insertar en la base de datos del sistema de B. Pero es simplemente esta sobrecarga adicional? En última instancia es una cola MQ más tolerante a fallos que una tabla db?

¿Fue útil?

Solución

En términos generales, el intercambio de la base de datos es un acoplamiento cerca y no ser preferido, excepto, posiblemente, para propósitos de velocidad. No sólo para fines de disponibilidad, sino también porque el sistema A y B serán cambiado y mejorado en varios puntos de su futuro, y deben tener dependencias mínimos sobre la otra - el paso de mensajes es una dependencia obvia, mientras que las bases de datos compartidas tienden a morder (o sus herederos) en la parte posterior cuando menos se espera. Si vas a la ruta de compartir la base de datos, al menos que la interfaz de intercambio explícito con mesas dedicados o puntos de vista.

Hay cuatro niveles comunes de integración:

  1. compartir la base de datos
  2. Uso compartido de archivos
  3. llamada a procedimiento remoto
  4. Mensaje pasar

que se puede aplicar y se combina en diversas situaciones, con diferente disponibilidad y facilidad de mantenimiento. Tiene una excelente visión en el patrones de integración empresarial sitio .

Al igual que con cualquier infraestructura de integración central, MQ debe estar alojado en un entorno con gran disponibilidad, la conmutación por error completa y c. Hay otras soluciones de cola que le permiten distribuir la coordinación cola.

Otros consejos

Use Colas para la comunicación. No "pasar" los datos del Sistema de A a B Sistema a través de la base de datos. Usted está utilizando la base de datos como una cara cola gigante, y compleja mensaje.

Utilice una cola de mensajes como una cola de mensajes.

Esto no es sobrecarga "extra". Esta es la mejor manera de desacoplar los sistemas. Se llama arquitectura orientada a servicios (SOA) y el uso de los mensajes es absolutamente esencial para el diseño.

Una cola MQ es mucho más simple que una tabla de base de datos.

No se puede comparar "tolerancia a fallos", porque utiliza un RDBMS enormes gastos generales (inimaginables) para alcanzar un nivel razonable de seguridad de que su transacción está bien puesto. Cierre. Buffering. Escribe Colas. Administración de almacenamiento. Etc etc.

Una aplicación de cola de mensajes fiable utiliza algún almacén de respaldo para mantener el estado de la cola. La sobrecarga es mucho, mucho menos de un RDBMS. El rendimiento es mucho mejor. Y es mucho, mucho más fácil de interactuar con ellos.

En SQL Server Me gustaría hacer esto a través de un paquete SSIS o un trabajo (en función del número de registros y la complejidad de lo que estaba en movimiento). Otras bases de datos también tienen soluciones ETL. Me gusta la solución ETL robaba puedo mantener registros de lo que fue cambiado y qué errores se procesaron, puedo enviar los registros que por alguna razón no se irá al otro sistema (estructuras de datos rara vez son la misma entre dos bases de datos) a una explotación mesa sin matar al resto del proceso. También puedo realizar cambios en los datos a medida que fluye a ajustar las diferencias de base de datos (cosas como los valores de la tabla de búsqueda, por ejemplo el estado terminado en DB1 tiene 5 años y es 7 en DB2 o decir DB2 tiene un campo obligatorio que DB1 no, y que hace hay que añadir un valor por defecto a la presentada si es nulo). Si uno u otro servver se ha reducido el trabajo que ejecuta el paquete SSIS fallará y se verán afectados ninguno de los sistemas, por lo que mantiene los datbases disociadas como el uso de disparadores o replicación no lo haría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top