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)
0 comentarios:
Publicar un comentario