Tomcat - Introducción

Un worker Tomcat es un ejemplar Tomcat que est� esperando para ejecutar servlets por cuenta de alg�n servidor web. Por ejemplo, podemos tener un servidor web como Apache reenviando peticiones servlets a un proceso Tomcat (el worker que se ejecuta detr�s de �l.

El escenario descrito arriba es uno muy simple; de hecho uno puede configurar m�ltiples workers para servir servlets por cuenta de un cierto servidor web. Las razones para dicha configuraci�n pueden ser:

  • Queremos que diferentes contextos sean servidos por diferentes workers Tomcat para proporcionar un entorno de desarrollo donde todos los desarrolladores compartan el mismo servidor pero con su propio worker Tomcat.
  • Queremos que diferentes host virtuales servidos por diferentes procesos Tomcat proporcionen una clara separaci�n entre los sites pertenecientes a distintas compa��as.
  • Queremos proporcionar un balance de carga, lo que significa ejecutar m�ltiples workers Tomcat cada uno en su propia m�quina y distribuir las peticiones entre ellos.

Probablemente haya m�s razones para tener m�ltiples workers pero creo que esta lista es suficiente...

Los workers est�n definidos en un fichero de propiedades llamado workers.properties y est� p�gina explica como trabajar con �l.

.�Definir Workers

La definici�n de workers para el plugin Tomcat del servidor web puede hacerse usando un fichero de propiedades (un fichero de ejemplo llamado workers.properties est� disponible en el directorio conf/); el fichero contiene entradas con la siguiente forma:

worker.list=<una lista separada por comas de nombres de workers >

Por ejemplo:

worker.list= ajp12, ajp13

Y

worker.<nombre de worker>.<property>=<valor de propiedad>

Por ejemplo:

worker.local.port=8007

Cuando arranque, el plugin del servidor web ejemplarizar� los workers cuyos nombres aparezcan en la propiedad worker.list, estos tambi�n son los workers a los que podemos mapear peticiones.

Cada worker nombrado deber�a tener una pocas entradas para proporcionar informaci�n adicional sobre s� mismo; esta informaci�n incluye el tipo de worker y otra informaci�n relacionada. Actualmente existen estos tipos de workers en (Tomcat 3.2-dev):

Tipo de Worker Description
ajp12 Este worker sabe c�mo reenviar peticiones a workers Tomcat fuera-de-proceso usando el protocolo ajpv12.
ajp13 Este worker sabe c�mo reenviar peticiones a workers Tomcat fuera-de-proceso usando el protocolo ajpv13.
jni Este worker sabe c�mo reenviar peticiones a workers Tomcat fuera-de-proceso usando jni.
lb Este es un worker de balance de carga, que sabe como proporcionar un balance de carga basado en redondeo con un cierto nivel de tolerancia.

Definir workers de un cierto tipo deber�a hacerse siguiendo este formato de propiedad:

worker.<worker name>.type=<worker type>

Donde worker name es el nombre asignado al worker y worker type es uno de los cuatro tipos definidos en la tabla. Un nombre de worker podr�a no contener espacios (una buena convenci�n de nombres ser�a utilizar las reglas de nombrado para las variables Java).

Por ejemplo:

Definici�n de Worker Significado
worker.local.type=ajp12 Define un worker llamado "local" que usa el protocolo ajpv12 para reenviar peticiones a un proceso Tomcat.
worker.remote.type=ajp13 Define un worker llamado "remote" que usa el protocolo ajpv13 para reenviar peticiones a un proceso Tomcat.
worker.fast.type=jni Define un worker llamado "fast" que usa JNI para reenviar peticiones a un proceso Tomcat.
worker.loadbalancer.type=lb Define un worker llamado "loadbalancer" que hace balance de carga de varios procesos Tomcat de forma transparente.

.�Configurar Propiedades del Worker

Despu�s de definir los workers podemos especificar propiedades para ellos. Las propiedades se pueden especificar de la siguiente manera:

worker.<worker name>.<property>=<property value>

Cada worker tiene un conjunto de propiedades que podemos configurar seg�n se especifica en las siguientes subsecciones:

.�Propiedades de un Worker ajp12

Los workers del tipo ajp12 reenv�an peticiones a workers Tomcat fuera-de-proceso usando el protocolo ajpv12 sobre sockets TCP/IP. La siguiente tabla especifica las propiedades que puede aceptar un worker ajp12:

Nombre de
Propiedad
Significado Ejemplo
port El puerto donde el worker Tomcat escucha peticiones ajp12. worker.local.port=8007
host El host donde el worker Tomcat escucha peticiones ajp12. worker.local.host=www.x.com
lbfactor Cuando trabaja con un worker de balance de carga, este es el factor de balance para el worker. worker.local.lbfactor=2.5

.�Propiedades de un Wroker ajp13

Los workers del tipo ajp13 reenv�an peticiones a workers Tomcat fuera-de-proceso usando el protocolo ajpv13 sobre sockets TCP/IP. Las principales diferencias entre ajpv12 y ajpv13 son que:

  1. ajpv13 es un protocolo m�s binario e intenta comprimir algunos de los datos solicitados codificando los strings m�s frecuentemente usados en enteros peque�os.
  2. ajpv13 reusa sockets abiertos y los deja abiertos para futuras peticiones.
  3. ajpv13 tiene un tratamiento especial para informaci�n SSL por eso el contenedor puede implementar m�todos relacionados cono SSL como isSecure().

La siguiente tabla especifica las propiedades que puede aceptar un worker ajp13:

Nombre de
Propiedad
Significado Ejemplo
port El puerto donde el worker Tomcat escucha peticiones ajp12. worker.local13.port=8007
host El host donde el worker Tomcat escucha peticiones ajp12. worker.local13.host=www.x.com
lbfactor Cuando trabaja con un worker de balance de carga, este es el factor de balance para el worker. worker.local13.lbfactor=2.5
cachesize Especifica el n�mero de conexiones sockets abiertas que mantendr� el worker. Por defecto este valor es 1, pero los servidores web multi-thread como Apache2.xx, IIS, y Netscape se beneficiar�n si configuramos este valor a un nivel m�s alto (como una media estimada de los usuarios concurrentes de Tomcat). worker.local13.cachesize=30

.�Propiedades de un Worker lb

El worker de balanceo de cargas realmente no se comunica con otros workers Tomcat, en su lugar es el responsable de varios workers "reales". Este control incluye:

  • Ejemplarizar los workers en el servidor web.
  • Usar el factor de balanceo de carga, realizando un balanceo de carga al redondeo de peso donde el lbfactor m�s alto significa una m�quina m�s fuerte (es la que manejar� m�s peticiones).
  • Seguimiento de las peticiones que pertenecen a la misma sesi�n y que se ejecutan en el mismo worker Tomcat.
  • Identificar los workers Tomcat fallidos, suspender las peticiones a estos workers y hacer que otros workers las manejen.

El resultado general es que los workers manejados por el mismo worker lb tienen balance de cargas (bas�ndose en su lbfactor y la sesi�n de usuario actual) y tamb�en tienen anti-ca�da por lo que si un proceso Tomcat muere, no "matar�" toda la site.

La siguiente tabla especifica las propiedades que puede aceptar un worker lb:

Nombre de
Propiedad
Significado Ejemplo
balanced_workers Una lista separada por comas de workers que el balanceador de carga necesita manejar. Estos workers no deber�an aparecer en la propiedad worker.list. worker.loadbalancer.balanced_workers= local13, local12

.�Propiedades de un Worker jni

El worker jni abre una JVM dentro del proceso del servidor web y ejecuta Tomcat dentro de ella (es decir en-proceso). Despu�s de esto, los mensajes pasados hacia y desde la JVM son pasados usando llamadas a m�todos JNI, esto hace al worker jni m�s r�pido que los workers fuera-de-proceso que necesitan comunicarse con los workers Tomcat escribiendo mensajes AJP sobre sockets TCP/IP.

Nota: como la JVM es multi-thread; el worker jni s�lo se deber�a usar dentro de servidores multi-thread como AOLServer, IIS, Netscape y Apache2.0. Deber�amos asegurarnos de que el esquema de threads usado por el servidor web corresponde con el usado para construir el plugin jk del servidor web.

Como el worker jni abre una JVM puede aceptar tantas propiedades como pueda reenviar a la JVM como el classpath, etc. como podemos ver en la siguiente tabla:

Nombre de
Propiedad
Significado Ejemplo
class_path El casspath usado por la JVM en-proceso. Esto deber�a apuntar a todos los ficheros jar/file de Tomcat as� como a cualquier clase u otro fichero jar que queramos a�adir a la JVM
Deber�amos recordar a�adir tambi�n javac al classpath. Esto se hace en Java2 a�adiendo tools.jar al classpath. En JDK1.xx deber�amos a�adir classes.zip.
La propiedad class_path se puede dividir en m�ltiples l�neas. En este caso el entorno jk concatenar� todas las entradas classpath poniendo un delimitador (":"/";") entre cada entrada.
worker.localjni.class_path=path-to-some-jarfile
worker.localjni.class_path=path-to-class-directory
cmd_line La l�nea de comandos que es manejada sobre el c�digo de arranque de Tomcat.
La propiedad cmd_line puede proporcionarse en m�ltiples l�neas. En este caso el entorno jk las concatenar� poni�ndo espacios entre ellas.
Nota: El string cmd_line no soporta espacios en blanco embebidos. Esto afecta principalmente a las especificaciones de paths. Sobre windows, podemos usar los nombres MS-DOS 8.3 para directorios que de otro modo contendr�an un espacio en blanco.
worker.localjni.cmd_line=-config
worker.localjni.cmd_line=path-to-tomcats-server.xml-file
worker.localjni.cmd_line=-home
worker.localjni.cmd_line=-path-to-tomcat-home
jvm_lib El path completo a la librer�a de implementaci�n de la JVM. El worker jni usa este path para cargar la JVM din�micamente. worker.localjni.jvm_lib=full-path-to-jvm.dll
stdout El path completo donde la JVM escribir� su System.out worker.localjni.stdout=full-path-to-stdout-file
stderr El path completo donde la JVM escribir� su System.err worker.localjni.stderr=full-path-to-stderr-file
sysprops Propiedades de sistema para la JVM. worker.localjni.sysprops=some-property
ld_path Path a las librer�as din�micas adicionales (similar en naturaleza a LD_LIBRARY_PATH). worker.localjni.ld_path=some-extra-dynamic-library-path

.�Macros en Ficheros de Propiedades

Desde Tomcat3.2 podemos definir macros en los ficheros de propiedades. Estas macros nos permite definir propiedades y posteriormente usarlas cuando construyamos otras propiedades. Por ejemplo, el siguiente fragmento:

workers.tomcat_home=c:\jakarta-tomcat
workers.java_home=c:\jdk1.2.2
ps=\
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes
worker.inprocess.class_path=$(workers.java_home)$(ps)lib$(ps)tools.jar

Terminar� con los siguientes valores para las propiedades worker.inprocess.class_path:

worker.inprocess.class_path= c:\jakarta-tomcat\classes
worker.inprocess.class_path=c:\jdk1.2.2\lib\tools.jar

.�El ejemplo worker.properties

Como escribir worker.properties por nosotros mismos no es una cosa f�cil de hacer; junto con los paquetes de Tomcat3.2 (y superiores) viene un fichero worker.properties de ejemplo. Este fichero est� pensado para ser tan gen�rico como sea posible y usa extensivamente las macros de propiedades.

El ejemplo worker.properties contiene el siguiente nivel de definiciones:

  1. Un worker ajp12 que usa el host localhost y el puerto 8007.
  2. Un worker ajp13 que usa el host localhost y el puerto 8009.
  3. Un worker jni.
  4. Un worker lb que balancea la carga de los workers ajp12 y ajp13.

Las definicioens de los workers ajp12, ajp13 y lb pueden funcionar sin modificar el fichero. Sin embargo, para hacer que funcione el worker jni deberemos configurar las siguientes configuraciones en el fichero:

  • workers.tomcat_home
    - tiene que apuntar a nuestro tomcat_home.
  • workers.java_home
    - tiene que apuntar a donde tengamos situado el JDK.
  • ps
    - tiene que apuntar al separador de ficheros de nuestro sistema operativo.

Cuando hagamos esto, el worker jni por defecto, deber�a funcionar.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR