La evolución de los sistemas de cómputo, tanto en hardware como en software, ha marcado la tendencia en el mercado, esto ha causado insatisfacción en los usuarios en cuanto a la capacidad de procesamiento y almacenamiento, “Nunca se tiene demasiado”.

Esta tendencia nos lleva a preguntarnos: ¿Cuándo vamos a estar satisfechos con la capacidad y la velocidad de procesamiento con que cuentan nuestras máquinas?

Ése afán por encontrar mayor agilidad y eficacia en procesamiento de datos en un sistema de cómputo es el que ha definido una gran cantidad de métodos recursivos, con los cuales se puede conseguir un incremento considerable en la capacidad y velocidad utilizando más de un solo computador (procesamiento en paralelo).

En este artículo describiré la arquitectura  básica de JPPF (JAVA PARALLEL PROCESSING FRAMEWORK)  para un procesamiento avanzado de datos; esto, pasando por la definición y forma de trabajo de un Clúster o un Grid y de cómo se llega al pensamiento del procesamiento en paralelo. Con ello partimos hacia el conocimiento de una excelente herramienta que permite desarrollar tal tipo de aplicaciones aprovechando al máximo los recursos disponibles.

  1. ¿Qué es JPPF?

JPPF es un framework que basa su funcionamiento en la máquina virtual de JAVA, de ahí radica una de sus ventajas, que es la oportunidad de poder ejecutarse en cualquier sistema operativo permitiendo así integraciones nativas con lenguajes como .net, android y por supuesto Java; está compuesto por módulos que pueden ser ejecutados de forma independiente. Es decir, pueden ser ejecutados o implementados en máquinas separadas.

Este framework está subdividido principalmente en los siguientes  módulos (estos solo son el principal adicional tiene otros módulos que  pueden ser de utilidad):

  • Aplication tamplate: Este componente es uno de los más importantes de JPPF ya que integra el modelo base a seguir de un cliente que consuma el framework. Es importante entender el funcionamiento de este componente para iniciar con una integración.
  • Server o Driver: Componente cuya misión principal es la comunicación entre el cliente y los nodos que realizan la operación.
  • Node: Son los encargados de procesar los trabajos y las tareas que le sean asignados.
  • Administrator: JPPF brinda una herramienta que permite monitorear los diferentes componentes del framework, así como los trabajos y tareas que en él se procesan.

Aquí intento describir como seria interconexión entre los diferentes módulos.

1.      ¿Cómo funciona JPPF?

Las siguientes son las partes a tomar en cuenta para iniciar un desarrollo con este framework:

  •  Tareas (task)

Una tarea JPPF es la unidad más pequeña de código que se puede ejecutar en una grid  JPPF. Desde una perspectiva JPPF, se define así como una unidad de código atómica. Una tarea siempre se define como una implementación del Grupo interface. Las tareas extienden de la interfaz Runnable. La parte de una tarea que se ejecutará es lo que está escrito en su método run(). Crear una tarea tiene dos pasos muy importantes que son: la implementación de Task y la implementación del método run().

  • Trabajo (Job)

Un trabajo es una agrupación de tareas con un conjunto común de características y un SLA común. Estas características incluyen:

  • Datos comunes
  • Prioridad
  • Número máximos de nodos
  • Políticas de ejecución
  • Indicador de suspensión
  • Un Job se representa como una instancia de la clase JPPFJob

1.      Procesamiento Paralelo

Mencionado todo lo anterior llegamos a la parte que nos interesa, el procesamiento en paralelo de JPPF. Esta es la  gran virtud de JPPF.

Para poder ejecutar tareas en paralelo es necesario contar con una arquitectura de múltiples servidores, de esta manera tener a disposición varios nodos a los cuales podamos asignarles múltiples tareas.

JPPF tiene tres formas de implementar el procesamiento en paralelo:

  • Trabajos (job) en varios sub-procesos: Este patrón explota como empleo concurrente la instancia de JPPFClient. En este modelo se utilizan trabajos (job) bloqueados, los cuales aseguran que cada trabajo conste de su propio hilo.
  • Múltiples trabajos desbloqueados en un solo hilo: En este modelo se aprovecha la naturaleza de sincronía de los trabajos (job) lo cual facilita el trabajo de ejecución.
  • Procesamiento totalmente asíncrono: En este modelo se implementa la clase JobListener para la recuperación de resultado de los trabajos (job) se encapsula todo el funcionamiento del paralelismo en una clase principal.

 

Debido a la forma que trabaja la arquitectura de JPPF, se puede dar el caso de que una tarea (task) enviada a un nodo para ser trabajado sea demasiado grande y por tal razón no pueda terminar de forma correcta la realización del trabajo, para dar solución a esto el framework nos provee de un mecanismo llamado proveedor de datos, que no es más que una interfaz que permite compartir tareas específicas entre varios nodos. A sabiendas de esto los SLA se vuelven parte importante en el procesamiento de una aplicación diseñada con JPPF, con los SLA se definen términos y condiciones por medio de los cuales se ejecutarán las diferentes tareas.

En JPPF un trabajo lleva dos SLA; uno que define el contrato entre el trabajo y servidor y el otro que define el contrato entre el trabajo y el cliente. Los aspectos importantes a seguir entre servidor y cliente son:

  • Política de la ejecución del trabajo
  • El momento en que se programa un trabajo para comenzar
  • Una fecha de caducidad para el trabajo.

Aspectos importantes de los SLA del lado del servidor:

  • La prioridad de un trabajo
  • Si se presenta en estado de suspensión
  • El número máximo de nodos que se puede ejecutar.
  • Si el trabajo es un trabajo estándar o de difusión
  • Si el servidor debe cancelar inmediatamente el trabajo, si el cliente que presentó está desconectado.

Aplicando los conceptos básicos de JPPF podremos lograr arquitecturas mucho más complejas de tal forma que podríamos lograr enlazar dos topologías diferentes, con el fin de optimizar la utilización de los diferentes recursos.

Para tener más detalle de estas descripciones referirse a http://jppf.org

JPPF tiene muchas más cualidades, además de una comunidad que constantemente colabora con los creadores, y le permiten evolucionar e ir incrementando funcionabilidades al framework, lamentablemente es demasiado extenso para poder resaltar cada cualidad del framework en un solo post, por tal motivo estaré subiendo una parte dos de este articulo donde mostraremos como se implementa una arquitectura y mostraremos como utilizar el monitor que nos  ofrece JPPF.

Share: