Rendimiento de los servicios WEB

LIBP-0071 (Libro de pautas)

Pautas

TítuloCarácter
Minimizar el tráfico de la red agrupando funcionalidades en los serviciosObligatoria
Controlar el tamaño y complejidad de los mensajes SOAPObligatoria
Usar los tipos de datos simples Recomendada
Recomendaciones de diseño en SOAPRecomendada
Aplicación de niveles de seguridadObligatoria
Uso de la cache en los servicios webRecomendada
Conexiones en función del tipo de contenido del mensajeRecomendada
Codificación binaria de algunos elementos del mensajeRecomendada

Minimizar el tráfico de la red agrupando funcionalidades en los servicios

Se debe diseñar la interfaz del servicio web intentando minimizar el tráfico de red. Para ello es necesario agrupar la funcionalidad del servicio de manera que el número de comunicaciones necesarias decaiga. Se deben construir servicios generales, es decir, que "hagan muchas cosas y regresen mucha información". Con ello se reduce la sobrecarga de la red y se mejora el tiempo de respuesta del servicio.

Controlar el tamaño y complejidad de los mensajes SOAP

Si se generan mensajes SOAP de gran tamaño, facilitamos la creación de cuellos de botella ya que se necesita mucho tiempo de ejecución para interpretarlos. Se debe mantener el contenido del mensaje tan pequeño como sea posible.

En el caso de encontrarnos con mensajes muy complejos, el proceso de serialización y el inverso de deserialización consumen mucho tiempo efectivo. A ser posible hay que diseñar los mensajes minimizando la complejidad de los mismos. Sin embargo, suele ser difícil mantener un equilibrio entre complejidad y tamaño en el diseño de los mensajes

Usar los tipos de datos simples

En la medida de lo posible utilizar los tipos simples de SOAP (String, Int, Float, NegativeInteger) ya que cada nuevo tipo de dato utilizado introduce un tratamiento específico con un serializador para procesar el valor y convertirlo de XML a JAVA y viceversa. Para este proceso, se necesita mas tiempo en el procesado y por ende, existe una bajada de rendimiento en el servicio.

Recomendaciones de diseño en SOAP

  • Si existen intermediarios en la comunicación entre el cliente y el servicio (proxy, puerta de enlace), se debe minimizar la interpretación de mensajes que realizan.
  • Si se tiene control del intérprete de XML utilizado, considerar el uso de SAX o StAX ya que suelen proveer mayor rendimiento que DOM.
  • El formato Document/Literal de los mensajes SOAP es mas pequeño y menos complejo que los mensajes de tipo RPC/SOAP.

Aplicación de niveles de seguridad

Hay que evaluar a que tipo de clientes esta orientado el servicio. La seguridad tiene un impacto en el desempeño. No todo el tráfico de SOAP necesita estar protegido ya que el costo en rendimiento de una seguridad de punta a punta (por ejemplo, con WS-Security) es en muchos casos mucho mayor a implementar un mecanismo de seguridad a nivel de transporte como SSL. Definir políticas de seguridad en función del tipo de servicio y del entorno del mismo

Uso de la cache en los servicios web

La utilización de caché es una forma de mejorar el rendimiento de los sistemas que hacen uso intensivo del procesador. Sin embargo esto solo aplica para los servicios de solo lectura.

Conexiones en función del tipo de contenido del mensaje

  • Las conexiones persistentes son buenas para el rendimiento en casos donde existan gran cantidad de mensajes con poco contenido. Para mensajes más grandes, la diferencia no es tan considerable.
  • Las conexiones de flujo continuo (streaming) son buenas para el rendimiento en casos donde existen mensajes con gran cantidad de contenido. La codificación HTTP "chunked" es un tipo de flujo continuo soportado por HTTP/1.1.

Codificación binaria de algunos elementos del mensaje

En ocasiones, efectuar una codificación binaria de elemento contenidos en el mensaje puede resultar beneficiosa. En el caso de tener una capa de transporte sea lenta, o el procesamiento pudiera ser complejo, es interesante disponer un modelo de mensajería asíncrona