jueves, 2 de junio de 2011

Un Tomcat diferente

El framework Dinámica incluye un Tomcat light, reempaquetado por nosotros para que sea fácil de usar en desarrollo y producción con Dinámica, y sea sobre todo rápido y seguro.

Para eso le sacamos todo el exceso de equipaje que suele incorporar, todas las aplicaciones de administración y los ejemplos, lo dejamos vacío, y también le desactivamos en el web.xml global lo que no vamos a utilizar: JSP entre otras cosas. También limpiamos el server.xml y le desactivamos lo que no necesitamos, básicamente solo dejamos el conector HTTP 1.1 con la compresión GZIP para las salidas de texto y la válvula de log HTTP, la cual es de uso opcional si lo quieren hacer aún más liviano. Le ponemos suficientes Threads de fábrica y la parte de SSL comentada pero lista para usar.

En Windows le dejamos la auto-recarga activada para facilitar el desarrollo, pero en la distro de Linux se la quitamos, porque esta generalmente se usa para producción, y se recomienda hacer lo mismo con la de Windows si la van a usar para producción. Para cubrir la falta de la auto-recarga proveemos un utility seguro que corre local al proceso Tomcat y permite recargar una webapp aunque la facilidad esté desactivada.

Luego vienen los complementos. Una vez que el Tomcat está liviano y seguro, hay que añadirle capacidades empresariales de uso muy frecuente: soporte para publicar web services usando el API estándar JAX-WS y JavaMail, además de los drivers JDBC open source para PostgreSQL 9 y SQLServer/Sybase. Todo en sus últimas versiones estables:

- Tomcat 7.0.53
- JAX-WS 2.2.8
- JavaMail 1.5.1
- postgresql-9.3-1100.jdbc4.jar
- jtds-1.3.1.jar

En resumen: tiene lo necesario para aplicaciones modernas de negocios web, incluyendo web services de alta velocidad, sin sobrecargar al servidor ni hacerlo complicado en su instalación o administración. No hay que olvidar que las webapps hechas con Dinámica incluyen una serie de facilidades para monitore y diagnóstico, así que no hay que añadirle nada de esto a Tomcat, basta con su instrumentación JMX en modo local (no hace falta activarla para acceso remoto, así es más seguro).

Todo esto va distribuido entre las carpetas "lib" y "endorsed" de Tomcat 7. Para correr este Tomcat se puede usar Java 6, Java 7 o Java 8 (recomendado).

Esta idea se parece al concepto de "Web Profile" de la última especificación Java EE, que define containers que no tienes que incluir todo el peso de JEE, en el caso Web permite incorporar solo algunas funcionalidades empresariales, aun así nos parece sobre cargada y deja por fuera JavaMail, que es muy necesario. Para mayor información sobre los profiles JEE:

Java EE: The web profile

Si le quieren añadir otras cosas, como un cliente JMS o soporte para transacciones distribuidas JTA, solo necesitan incorporar los JARs en la carpeta "lib" de Dinámica. Para el caso de transacciones JTA, quizá lo más fácil de integrar con Tomcat 7 es JOTM. Para pruebas con JMS lo más sencillo es OpenJMS. Los JARs que conforman la capa cliente de OpenJMS se pueden consolidar fácilmente en un solo JAR y añadir a Tomcat 7. En Dinámica existe soporte declarativo para enviar mensajes a una cola de forma transparente al programador, se ha probado con OpenJMS y ActiveMQ de Apache, solo requiere que Tomcat tenga los JARs cliente de JMS en su carpeta "lib".

En el caso de Linux, nuestra distro Tomcat es muy fácil de instalar, se descomprime un TGZ y se corre un script install.sh que deja Tomcat como servicio en Ubuntu.

Aunque la documentación de Dinámica que concierne a nuestra distro Tomcat y otras facilidades del framework está solo disponible para nuestros suscriptores, las distros como tal pueden ser descargadas del website del framework.

Nuestro objetivo ha sido proveer un servidor de aplicaciones web que cubra el 100% de nuestros requerimientos, y que sea rápido y confiable tanto en su estabilidad como en su seguridad. Nos gustó Tomcat desde la versión 6 porque se hizo más sencillo en su empaquetamiento y configuración, y adquirió madurez en su Core, suficiente como para competir con productos establecidos como Resin o WebLogic, que se han vuelto en contraste cada vez más complicados, y sigue siendo más simple de usar que las alternativas open source  como Glassfish o JBoss.

Saludos,
El Team Dinámica

5 comentarios:

Anónimo dijo...

Buenísimos Martín los consejos sobre "plugins" opcionales a agregar, y sobre todo el cómo aliviar el Tomcat por defecto. Al menos nuestra experiencia con tomcat ha sido muy buena, si bien tenemos un apache por delante que es quien aporta "seguridad", el Tomcat ha tenido un rendimiento y estabilidad excelente. Pronto la idea es probar cluster de Tomcat, veremos que sale :) . De paso consulta, qué tipo de pruebas han hecho con JMS, o mejor dicho, para qué lo han usado?
Un abrazo
Gustavo / Mendoza / Argentina

Martín Córdova dijo...

Hola Gustavo! lo del cluster no tiene mayor complicación, depende de si quieres failover o no, ya tenemos un webfarm de tomcats con el Windows Load Balancer por delante en un cliente en producción, camina bien. En tu caso creo que el conector de Apache hacia Tomcat haria el load balancing.

Lo del JMS lo incorporamos para satisfacer a suscriptores de Dinámica Deluxe, funciona de manera declarativa, como lo del email, luego de ejecutar la lógica de negocios puedes enviar un mensaje a una cola de un server JMS solo con configurarlo. Un server de colas es parte de la infraestructura de servicios en algunas empresas, no es muy común pero nos pareció importante soportarlo.

Saludos,
Martín

Anónimo dijo...

Que Grande Martín! Siempre al día y agregando soporte al framework de manera que sea más que fácil usarlo...realmente dinámica es un referente a orden, simpleza y sencillez en la programación. Lo de JMS no lo había sentido nombrar...
Tal cual comentás respecto al cluster en nuestro caso, es un apache el que tiene que hacer el balanceo de carga. Sobre lo que estuve leyendo un poco hace tpo y tengo que retomar es si usar conector AJP o http (haciendo apache sólo de proxy). Ambos tienen sus ventajas y desventajas dependiendo de como uno organice los servidores, si están en el mismo equipo, si tenés conexión segura entre ambos, si querés ver el tráfico entre ambos (contenido) o simplemente que viaje en binario... en fin... prueba y error.
Un abrazo
Gustavo / Mendoza / Argentina

Eleazar Alfriadez dijo...

Saludos Sr. Martin Cordova, cuando esta por Peru - Lima, para profundizar aun mas los conocimientos del Framework.

Eleazar Alfriadez dijo...

Saludos Sr. Martin Cordova, cuando esta por Peru - Lima, para profundizar aun mas los conocimientos del Framework.