La integración es el arte el proceso de hacer que múltiples y heterogéneos componentes software interactuén entre sí de modo que el sistema final funcione como uno solo. En una organización se buscará siempre que sus sistemas estén integrados, es decir que todas sus aplicaciones, servicios y dispositivos estén de alguna manera interrelacionados entre ellos. El objetivo es poder interactuar con este sistema global como si fuese un unico sistema y no tener que interactuar con varios sistemas a la vez para realizar una tarea.
Cuando hablamos de integración existen varios niveles de integración. Veámoslos en detalle:
Integración de Interfaz
Este tipo de integración es una integración a nivel de presentación. Normalmente, en este tipo, nos estamos refiriendo a una interfaz única. La integración, a este nivel consiste en consolidar las vistas de distintos sistemas en una sola vista. Es lo que tradicionalmente se conseguía con screen scraping o incrustando elementos dentro de una misma pagina web. Obviamente, este es un nivel muy primitivo de integración, en realidad no hay interacción entre los distintos sistemas. Este metodo se utilizaba (y se utiliza) para “integrar” aplicaciones que no podían ser conectadas entre si, pero al menos daban al usuario final una interfaz única y la percepción de que se encontraban ante un sistema único.Integración de Procesos
En este nivel de integración lo que hacemos es, a partir de la lógica de un proceso de negocio, interconectar los distintos sistemas o aplicaciones que intervienen en los distintos pasos de ese proceso.La integración aqui se entiende como una orquestración o coordinación de las distintas interacciones con los sistemas que intervienen en dicho proceso. En este tipo de integración orientada a procesos, normalmente hay dos tipos de implementación en función del tipo de proceso con el que se trabaja:
- Procesos de Larga Duración: Normalmente son procesos que requieren interacción humana, en los que la mayor parte del tiempo se esta a la espera que un individuo proporcione datos o complete una tarea. Por tanto, son procesos que requieren persistencia, para conservar durante largos periodos de tiempo (pueden ser días o incluso meses) el estado y datos del proceso. El orquestador o coordinador de esta integración será un motor de BPM o motor de workflow que se encargará de comunicarse con los distintos sistemas en la organización. Por tanto, no hay una interacción directa entre las aplicaciones o servicios, todo tiene al motor de workflow como intermediario.
- Procesos de Corta Duración: En este tipo de procesos, la integración entre sistemas se realiza a través del intercambio de mensajes sin intervención humana. En este tipo de integración, normalmente un mensaje inicial o disparador de eventos provoca una serie de acciones a realizar por distintos sistemas o aplicaciones como respuesta a ese evento. En arquitecturas dirigidas por eventos, la respuesta conjunta de estos sistemas se suele implementar bien como una orquestación (con un mediador de eventos) o bien como una coreografia (con un broker de eventos), donde los eventos entre aplicaciones se van publicando y consumiendo en cadena.
Integración de Datos
Este nivel de integración es el que tiene lugar cuando dos o más aplicaciones/sistemas intercambian datos entre ellos. La integración de datos es necesaria cuando un sistema necesita entender los datos de otro sistema. Cuando un sistema A necesita entender los datos de un sistema B, este problema se soluciona de dos maneras:- Adaptando el sistema A (escribiendo codigo en A) para entender los datos de B.
- Utilizando un formato de datos standard intermedio entre A y B que permite a los dos escribir y leer en dicho formato. Lo que comunmente hacemos con JSON, XML o CSV. Son formatos standard de intercambio de datos.
Normalmente no habrá un unico standard en toda la organización, conforme la tecnología avanza los standares evolucionan e incluso aparecen nuevos. No es extraño encontrar en un misma organización el uso de JSON, XML y CSV en distintas areas de negocio o procesos. Por eso, la capacidad de mi sistema más importante en este tipo de integración es la transformación de datos. Cuanto más flexible y eficiente sea mi sistema en efectuar estas transformaciones mayor grado de integración de datos voy a conseguir.
Conectividad y Comunicación
Este nivel de integración se refiere a como dos sistemas hablan entre ellos. Con el nivel anterior podemos conseguir que un sistema A entienda los datos que maneja un sistema B, conseguimos solo facilitar el intercambio de datos. En este nivel lo que queremos es que un sistema A y un sistema B interactúen directamente. Es decir, que un sistema A sea capaz de enviar ordenes, realizar consultas o enviar notificaciones a un sistema B, y que el sistema B responda enviando información, actualizando sus bases de datos o realizando cualquier otra operación. El problema en estos casos es que en general A y B no han sido diseñados para hablar entre ellos. Este problema lo solucionamos de varias maneras:- Mediante conectores o drivers de conexión que permiten por ejemplo que mi aplicación se comunique con mi base de datos mediante un driver JDBC.
- Mediante la creación de APIs que me permiten crear una capa de acceso o interfaz con una serie de operaciones que yo puedo invocar desde el exterior y que la API traduce a operaciones internas que mi sistema entiende
Con APIs y conectores solucionamos el problema de comunicación, establecemos que tipo de operaciones/mensajes se pueden intercambiar. Nos queda por último la conectividad, aquí también necesitamos integración en el sentido de que es necesario establecer cómo dos sistemas comunican entre si: el formato de los mensajes, sincrono o asincrono, seguridad... etc Esto es lo que tradicionalmente solucionamos con protocolos de comunicación como HTTP, FTP, AMQP, etc Para conseguir integración a este nivel necesitaremos:
- Estandarizar todas las APIs. Lo que durante los ultimos años muchas organizaciones tratan de definir todas sus APIs de tipo REST
- O bien utilizar tecnologia middleware, ESBs o brokers capaces de realizar la integración entre los distintos protocolos, tipos de APIs y tipos de comunicación (sincrona y asincrona)