Paralelismo de procesos




Uno de los factores que tienen mayor peso en el tiempo que demora la carga de trabajo batch en completarse es el paralelismo o solapamiento de los procesos.

Para aumentar el grado de paralelismo tenemos que resolver los siguientes problemas:

  • Las dependencias entre aplicaciones que impiden que los procesos se solapen
  • Los ficheros que tienen que ser creados antes de que puedan ser leídos
  • Si una operación falla, tiene que poderse recuperar. Este requerimiento implica que la aplicación tiene que alcanzar un estado conocido, el cual quizás no pueda alcanzar si otras actividades se están ejecutando en paralelo
  • La ejecución simultánea de dos procesos en vez de uno tras otro, puede generar contención de recursos, tales como almacenamiento o capacidad de procesador

Para modelar el solapamiento de procesos, simplemente hay que cambiar las dependencias entre ellos para reflejar el cambio:



En este ejemplo tenemos cuatro procesos, donde B y C dependen de los datos producidos por A y D depende de los datos producidos por B y C.

Un enfoque secuencial es la ejecución de estos procesos uno detrás del otro en el orden A -> B -> C -> D o también A-> C-> B -> D (puesto que no hay dependencias entre B y C).

De esta manera nuestra ventana batch duraría la suma de los tiempos de proceso de cado de los procesos que tenemos que ejecutar.

Matemáticamente la duración sería:

Tventana = Tproceso-A + Tproceso-B + Tproceso-C + TprocesoD

Si los procesos son organizados en paralelo, cuando termina el proceso A, como los datos que necesitan B y C están disponibles, se ejecutan al mismo tiempo estos dos procesos y luego se ejecuta el proceso D.

Con este cambio la duración de la ventana sería:

Tventana = Tproceso-A + Max(Tproceso-B,Tproceso-C) + Tproceso-D

La máxima duración entre dos procesos B y C será siempre menor que la suma de la duración de ambos procesos.

Este mismo principio aplicado a procesos en una ventana batch, puede aplicarse a los pasos dentro de un mismo proceso.

La mayoría de los procesos tienen sus pasos serializados. No pueden ejecutarse dos pasos dentro del mismo proceso, aunque basándonos en la lógica de la aplicación, no hay ninguna razón por la cuál no puedan ejecutarse en paralelo.

Cuantos más pasos tenga un proceso, más probabilidad existe que alguno de sus pasos pueda ejecutarse en paralelo con otro.


En este ejemplo tenemos un proceso A con 5 pasos. El paso A2 depende de los datos del paso A1, el paso A3 depende de los datos del paso A2 y A4 depende de los datos del paso A3. Sin embargo el paso A5 solo depende de los datos del paso A2.

En este caso, lo más acertado es descomponer el proceso A en tres procesos A-1, A-2 y A-3, donde A-2 y A-3 pueden ejecutarse en paralelo perfectamente debido a su dependencia de datos.

La duración total del proceso A es la suma de los tiempos de cada uno de sus pasos.

TprocesoA = TpasoA1 + TpasoA2 + TpasoA3 + TpasoA4 + TpasoA5

La duración total del nuevo proceso que hemos diseñado es:

TprocesoA = TprocesoA-1 + Max(TprocesoA-2,TprocesoA-3)

Como en el caso anterior, la duración total del proceso es el tiempo del proceso A-1 más el tiempo máximo comparando el tiempo de cada uno de los procesos A-2 y A-3.

Clonar procesos


Imaginemos el siguiente escenario. Tenemos un proceso contable que realiza el balance contable mensual de una empresa que tiene tres filiales.

El proceso contable consta de 25 pasos y no es posible realizar en paralelo ninguno de ellos. Es un proceso estrictamente secuencial.

¿Habría alguna manera de reducir el tiempo de este proceso realizando procesamiento en paralelo?

La respuesta es muy simple: si, utilizando la clonación de procesos.

Ejemplo de clonación de procesos

Recibimos un fichero con los datos contables de cada una de las filiales. Este fichero lo consolidamos en un único fichero (un MERGE) en un único fichero que luego pasamos como entrada al proceso BALANCE:




En este escenario, en vez de consolidar todos los datos recibidos en un único fichero, para luego aplicar el proceso a varios miles o millones de registros (validaciones, cálculos, etc.), vamos a separar el proceso en dos partes: BALANCE-1 y BALANCE-2.

BALANCE-1 es solo para procesar los resultados contables que es donde consume casi el 90-95% del tiempo del proceso BALANCE.

BALANCE-2 es solo para con los datos procesados generar el informe con los resultados. En este punto solo se consume entre el 5-10% del tiempo total, ya que trabajamos con datos procesados, validados, etc. que solo tenemos que presentar.

Una vez separados los procesos vamos a clonar (copiar) el proceso BALANCE-1 en tres procesos idénticos en todo, menos en el nombre y el fichero de entrada.

En los procesos BALANCE-1-F1, BALANCE-1-F2 y BALANCE-1-F3 para cada una de las filiales de la empresa, cambiamos el fichero de entrada consolidado, por cada uno de los ficheros que recibimos por FTP de cado una de las empresas filiales.







En este caso hemos colocado en paralelo los procesos que más tiempo consumen a la hora de realizar el balance, agregando los datos del informe final con un MERGE.

En este esquema el tiempo total de ejecución del BALANCE será:

Tbalance = Max(Tbalance-1-f1,Tbalance-1-f2, Tbalance-1-f3) + Tbalance-2

Otra manera de ver los tiempos sería:



En la parte superior de la gráfica está nuestro proceso en paralelo. En la parte inferior nuestro proceso secuencial. Ambos ejes horizontales representan el tiempo.

Como la primera parte del proceso transcurre en paralelo, no podríamos comenzar la segunda parte hasta que no terminara el proceso de la Filial-1 (que es quién más registros tiene). Los procesos con menos registros, acabarían primero, como en el caso de las Filiales 1 y 2.

En este caso (y en la mayoría de los casos puesto que la Filial-1 es la mayor de las tres empresas) el tiempo de proceso sería la suma del tiempo de proceso de la Filial-1 más el tiempo necesario para generar los informes.

En el caso secuencial esta claro que el tiempo total es la suma de todos los tiempos.

Por último quisiera destacar que el clonado de procesos no solo implica tiempo en el análisis de la ventana de procesos sino que además esfuerzos extras de mantenimiento (modificar un proceso implica replicar las modificaciones en sus clones)

posted under , , |

0 comentarios:

Publicar un comentario

Entrada más reciente Entrada antigua Página principal