Skip to main content
SOA-Direct

Oracle SOA-Direct Binding vs. SOAP sobre HTTP

En la mayoría de las soluciones software, ya sean desarrollos a medida o uso de productos específicos, llega un momento en el que nos tenemos que enfrentar a la difícil fase de optimización de la solución para poder obtener un mejor rendimiento. Entre las distintas acciones que podemos aplicar encontraríamos, desde optimizaciones de los algoritmos utilizados hasta acciones que dependen del producto sobre el que está desplegada nuestra solución software. Por ejemplo, si utilizamos productos Oracle, podríamos deshabilitar el audit level en los procesos BPEL o evitar un uso excesivo de XPath mediante variables en el bus.

¿Pero qué pasa con las comunicaciones? En las arquitecturas SOA no sólo afectan al rendimiento la calidad de los algoritmos utilizados sino que también las comunicaciones pueden repercutir en los tiempos de respuesta. Es ese tiempo el que muchas veces por desconocimiento o descuido se deja de lado al llevar a cabo las optimizaciones. Por este motivo, si trabajamos con productos Oracle, es necesario tener en cuenta la alternativa de utilizar SOA-Direct Binding en lugar de utilizar SOAP sobre HTTP como otra opción bastante interesante a la hora de aplicar optimizaciones de rendimiento a nivel de comunicaciones.

Antes de empezar ¿qué es y qué proporciona SOA-Direct Binding?

Según la documentación de Oracle, SOA-Direct Binding proporciona conectividad nativa entre los componentes de Oracle Service Bus (OSB de aquí en adelante) y Oracle SOA Suite. La SOA Suite proporciona un framework denominado “direct binding” que permite exponer servicios en el composite de tal forma que el transporte SOA-Direct del OSB pueda interactuar con esos servicios expuestos mediante dicho framework. Así se permite que los componentes interactúen a nivel de bus y se aprovechen de las capacidades y características del OSB.

Además, SOA-Direct Binding soporta las siguientes características:

  1. Invocación a cualquier servicio SOA binding a través de Java RMI y transporte RMI optimizado para invocar esos servicios SOA.
  2. WS-Addressing, incluyendo autogeneración de propiedades ReplyTo para los callbacks asíncronos.
  3. Propagación de identidad y transacción.
  4. Attachments.
  5. Soporta clustering y alta disponibilidad.
  6. Balanceo de carga y failover.
  7. Gestión de reintentos en caso de error.

Como se indica en el punto 1 de las características soportadas, SOA-Direct Binding permite invocar a servicios SOA binding a través de Java RMI. Esto se debe a que el protocolo propietario de Oracle conocido como T3 es la implementación de Weblogic de la especificación de RMI. Este protocolo se usa para intercambiar información entre servidores Weblogic y otras aplicaciones Java. Weblogic crea una única conexión T3 y por tanto maximiza la eficiencia eliminando múltiples protocolos usados en la comunicación entre redes. También minimiza el tamaño de los paquetes con el fin de incrementar la velocidad del método de entrega.

Un detalle a considerar sobre el protocolo T3, es que por defecto está configurado para manejar mensajes de hasta 10 MB. Por este motivo, si el servidor recibe mensajes de un tamaño mayor, no podrá manejarlos. Obviamente este problema se puede resolver pero se escapa del alcance de esta entrada y simplemente se menciona para que se tenga en cuenta.

Experimentación y resultados

Para llevar a cabo la comparativa de rendimiento entre SOA-Direct Binding y SOAP sobre HTTP he implementado dos composites SOA para medir el tiempo de comunicaciones entre ellos:

  • El primer composite solo tiene un proceso BPEL con dos actividades: una actividad “receive” y una de “reply”. Este composite lo consideraremos como el composite “hijo”.
  • El segundo composite tiene dos procesos BPEL: el primer proceso BPEL tiene diez invocaciones a través de SOA-Direct Binding al proceso BPEL del composite “hijo”, y el segundo proceso tiene también diez invocaciones al composite “hijo” pero a través de SOAP sobre HTTP.

Con el fin de que el protocolo no optimice el tamaño del mensaje y el tiempo de respuesta sea la única variable a tener en cuenta en la medición, el mensaje de la request y el de la response tienen un único elemento String que ha sido inicializado con un String de un único carácter.

Una vez desplegados dichos composites en un Weblogic con la SOA Suite 11g que corre en un portátil con un Intel Core i5 Dual Core 2.5GHz y 12GB DDR3 SDRAM, he ejecutado una prueba de carga para cada caso (SOA-Direct Binding y SOAP sobre HTTP) con un único thread invocando durante 30 minutos y los resultados han sido los siguientes:

soadirect_tabla1Si calculamos el speed-up entre los tiempos medios de respuesta, podemos ver que aunque el tamaño del mensaje es muy pequeño, se obtiene un porcentaje de cerca del 3% de mejora utilizando SOA-Direct Binding en vez de SOAP sobre HTTP:

soadirect_dibu1Con el fin de comprobar cómo los tiempos de comunicación se mejoran si se utiliza SOA-Direct Binding, he modificado el segundo composite con los dos procesos BPEL para incrementar el número de invocaciones de diez a cien para ambos casos. Tras realizar dicho cambio, he vuelto a ejecutar la misma prueba de carga para cada caso con la misma configuración, es decir, un único thread realizando peticiones durante treinta minutos y los resultados han sido los siguientes:

soadirect_tabla2Si calculamos el speed-up entre los nuevos tiempos medios, podemos observar que SOA-Direct Binding proporciona una mejora cercana al 8% con respecto a SOAP sobre HTTP:

soadirect_dibu2Esto demuestra que realmente existe una mejora de la eficiencia cuando se utiliza SOA-Direct Binding en lugar de SOAP sobre HTTP en el caso de conectividad entre componentes de OSB y SOA Suite.

Consideraciones finales

Aunque los resultados anteriores nos llevarían a pensar en utilizar SOA-Direct Binding si queremos mejorar el rendimiento, existe un pequeño detalle sobre el balanceo de carga a tener en cuenta antes de lanzarnos a aplicarlo en lugar de SOAP sobre HTTP.

Este pequeño detalle consiste en que no se puede especificar explícitamente el balanceo de carga de las conexiones T3 porque el protocolo es el que se encarga de gestionar su propio balanceo (stateless stub realizarán invocaciones mediante round-robin y stateful stubs mediante una gestión sticky, ambas con su apropiado failover). Por este motivo, si ponemos un balanceador hardware/software delante de un cluster de Weblogic podría no servirnos de ayuda ya que la petición de conexión inicial irá a través del balanceador (sólo como parte de la conexión) y tras haber establecido la conexión, ésta permanecerá atada al mismo servidor sin pasar nuevamente por el balanceador. En el caso de que la conexión falle, el balanceador no intentará reestablecerla, ya que la responsabilidad de reconexión y failover pertenecen al protocolo T3, lo cual puede ser un problema.

Por este motivo, antes de aplicar SOA-Direct Binding como mejora de rendimiento se debe conocer la arquitectura del sistema sobre el que lo vamos a aplicar y posteriormente, aplicarlo de manera inteligente.

Para completar, os dejo una mención a una entrada en inglés que publiqué en mi blog personal sobre este tema esperando que también os sirva de guía de referencia para problemas futuros sobre temas de rendimiento con productos Oracle. Recordad que cada problema es un mundo y en la imaginación está el límite, así que usadla con moderación.

 

 

 

Elías Grande Rubio

Arquitecto SOA/BPM y Consultor de Seguridad TIC pragmático e investigador. Apasionado de la seguridad, las tecnologías middleware y de la computación de altas prestaciones. Diseñador de ideas revolucionarias que me hubieran hecho rico… pero las guardé en Megaupload y ahora escribo blogs.

Elías Grande Rubio ha escrito 7 entradas


Elías Grande Rubio

Arquitecto SOA/BPM y Consultor de Seguridad TIC pragmático e investigador. Apasionado de la seguridad, las tecnologías middleware y de la computación de altas prestaciones. Diseñador de ideas revolucionarias que me hubieran hecho rico… pero las guardé en Megaupload y ahora escribo blogs.

2 comentarios en “Oracle SOA-Direct Binding vs. SOAP sobre HTTP

  1. Pingback: OSB | Pearltrees

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *