Rendimiento de los servicios WEB
- Área: Rendimiento de Aplicaciones Java
- Tipo de pauta: Directriz
- Carácter de la pauta: Obligatoria
Pautas
Título | Carácter |
---|---|
Minimizar el tráfico de la red agrupando funcionalidades en los servicios | Obligatoria |
Controlar el tamaño y complejidad de los mensajes SOAP | Obligatoria |
Usar los tipos de datos simples | Recomendada |
Recomendaciones de diseño en SOAP | Recomendada |
Aplicación de niveles de seguridad | Obligatoria |
Uso de la cache en los servicios web | Recomendada |
Conexiones en función del tipo de contenido del mensaje | Recomendada |
Codificación binaria de algunos elementos del mensaje | Recomendada |
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