Cuando la combinación de múltiples aplicaciones para simplificar la integración de los datos?

StackOverflow https://stackoverflow.com/questions/3856108

Pregunta

versión corta:

Tenemos varios equipos cada uno en desarrollo de múltiples aplicaciones. Tienen que compartir algunos datos. ¿Hay que combinar estas aplicaciones en una más grande para simplificar la integración de datos o hay que mantenerlos separados y utilizar algún intercambio de datos / mecanismo de caché?

versión más larga:

Tenemos un número de equipos de cada trabajo en un conjunto de aplicaciones. Muchas de estas aplicaciones tienen que compartir datos. Una opción es utilizar la mensajería asíncrona para tener un sistema de registro - donde ocurren todas las escrituras - y para la difusión de datos que fuera a cualquier otro sistema que lo necesitan. Estos sistemas podrían almacenar los bits de datos que necesitan en una lectura única caché (en su base de datos).

La ventaja de este diseño es que un sistema puede volar sin afectar a los demás sistemas. También hace que sea más fácil para los equipos individuales para trabajar en sus aplicaciones individuales. Esto hace que la programación de los comunicados más fáciles, más pequeña base de código de navegar, etc.

Otra opción es decidir que estas aplicaciones comparten manera demasiados datos, y que la cabeza de la mensajería / almacenamiento en caché es demasiado alto. En este caso se podría decidir la fusión de estas tres aplicaciones en una aplicación más amplia. A continuación, eliminar por completo el problema de la integración de datos, ya que le mueve la integración en el servicio / capa transaccional del módulo individual de la aplicación. En otras palabras, MyGiantApp todavía podría ser dividida (frascos, los contextos de aplicación, etc.) en varios módulos que hablan entre sí a través de la API de servicios transaccionales del otro módulo. En nuestro caso estaríamos utilizando Spring casi como  un bus de servicio, la invocación del método en lugar de servicios web o la mensajería asíncrona.

Si bien la integración de datos esta segunda opción simplifica, complica el desarrollo. Ahora los equipos X tienen que trabajar en la misma base de código. Esto se puede aliviar en cierta medida por el uso de ramas, integración continua, y las bibliotecas / contextos separados, etc., pero al final del día sigue siendo un artefacto deplorable que estamos todos edificio. Además, ahora los errores de un equipo pueden propagarse más fácilmente a toda la aplicación; una aplicación que sopla hacia fuera la pila podría tomar todo abajo.

¿Cómo decidir cuándo utilizar la solución # 1 y cuándo utilizar la solución # 2?

¿Fue útil?

Solución

He puesto esto en una respuesta separada como su enfoque es bastante diferente al primero.

Parece que usted ha pensado en las cosas y tener una buena comprensión de ambos su problema y la solución. Déjame tener otra oportunidad (lo que creo que es) su pregunta clave ...

  

¿Cómo decidir ...

Atrás Ir a lo básico:. Comenzar con lo que saben que es verdad
Tener un taller pizarra con las personas relevantes de su equipo (s), en los que es necesario:

  • Elaborar una lista de las restricciones pertinentes.
  • Lista de resultados que no quiere (única aplicación unmanagable grande, etc).
  • También se recomienda, pero quizás no esenciales:. Identificar los riesgos e impactos potenciales (como parte de las restricciones o resultados indeseables)
  • Lista de los resultados que desea compartir (datos, fácil implementación, etc.).
  • Dar prioridad a los resultados deseables y no deseables (muy importantes), y no se sorprenda si cambian durante el curso del debate.

Esta información debería ser suficiente para empezar a establecer un marco para la discusión y la toma de decison.

También hay algunas cosas adicionales que puede hacer por delante de este taller (o como parte de ella en función de las dinámicas políticas y sociales de su situación).

  • Identificar los objetivos del sistema - tanto en un sentido "negocio" y un sentido "arquitectura". . (Pista: los dos debe alinearse - o al menos no conflicto)
  • Si hay una visión bien definida para el sistema o su negocio que debe ayuda (pero hay que tener en cuenta que estos no siempre existe, y con unos buenos son más raros aún).
  • Consulte la empresa / planes estratégicos para los sistemas de su trabajo - y tener en cuenta el mercado, tendencias, etc. ¿Qué crees que es probable que suceda a las aplicaciones en el futuro? Pensando en el futuro arquitectónicamente no lo mismo que YAGNI a nivel de código, y una cuidadosa consideración del futuro puede influir decsions que está haciendo ahora.

Otros consejos

Hi - no estoy seguro si estoy cubriendo los puntos exactos que desea responder - pero es un comienzo; pedir aclaraciones si lo desea, y voy a actualizar mi respuesta en consecuencia.

En cuanto a la gestión de datos es posible que desee empezar a pensar a lo largo de Master Data Management líneas . El primer pensamiento que salta a la mente es que no quieren inconsistente de datos de referencia ; esto sugeriría que utilice una sola instancia compartida de los datos - otra posibilidad es tener múltiples copias que asumen los procesos de gestión y de depósito de datos en torno a que es cristalina

.

En cuanto a la integración , reutilización depende de los requisitos no funcionales de los distintos sistemas. Un servicio compartida única hace que sea fácil de gestionar los datos (en que sólo hay una única copia de qué preocuparse) pero significa que puede convertirse en un cuello de botella; más aún el "eslabón más débil de la cadena" se aplica la regla -? ¿cuál es el impacto si el servicio compartido baja

Opciones de solución posibles

Es difícil saber qué recommened sin más información, pero mis pensamientos son:

  • Mantenga sus tres aplicaciones por separado.
  • Usar un único servicio compartido de datos compartidos.
  • El acceso a los datos compartidos puede ser a través de un "servicio" -. Esto le daría más control y opciones
  • El servicio compartido podría existir como una sola instancia - o -. Que podría tener instancias de mutliple del servicio distribuido (pero sólo una instancia de la base de datos)

El punto clave es THT debe ser capaz de abstraer a cabo el servicio compartido sin afectar a las otras aplicaciones -. Specifcially, no debería estar pensando en hacer una aplicación súper

Una cosa más - el pensamiento de que haya un "servicio" en un sentido comercial no excluye tener múltiples formas de exponer y consumir técnicamente.

¿Ha pensado en concurrencia, transacciones, ...

No sé sus necesidades pero se siente como que es hora de abordar este problema de la manera correcta y utilizar un "depósito" central para administrar sus datos compartidos.

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