Cuando los datos de un flujo de trabajo pasan por varios estados, cada estado recibe como entrada la salida del estado anterior. Pasar variables de estado en estado complica la transferencia de datos entre estados. CloudFlow ofrece un mecanismo de variables globales para simplificar este proceso y mejorar la eficiencia.
Límites
Si estos límites no satisfacen sus requisitos, puede enviar un ticket.
|
Elemento |
Valor máximo |
|
Longitud de una clave de variable |
128 Bytes |
|
Longitud de un valor de variable |
256 KiB |
Notas
$OutputenGlobalConstructorhace referencia a la salida sin procesar del estado Task, no al resultado de construcción deOutputConstructor.$GlobalenOutputConstructorhace referencia al valor sin procesar previo a la construcción realizada porGlobalConstructor.
Límites en el tamaño del contexto
Cuando CloudFlow transfiere datos mediante $Global, las salidas de InputConstructor y OutputConstructor deben cumplir con el límite que establece que el tamaño del contexto no puede superar los 64 KiB.
Condición de carrera
Las variables globales proporcionan un espacio de almacenamiento clave-valor global a nivel de ejecución, con capacidades de lectura y escritura en todos los estados durante el ciclo de vida de la ejecución. Cuando existe lógica paralela en un flujo, como map o parallel, los datos pueden sobrescribirse entre distintos estados. Tenga en cuenta las siguientes recomendaciones:
Utilice claves diferentes para escribir variables globales en las distintas ramas de los estados Parallel.
No escriba variables globales en estados Map. Todas las definiciones de iteración de Map son idénticas; por lo tanto, los nombres de variables en GlobalConstructor también lo son. Los nombres de variable iguales escritos desde distintas ramas se sobrescriben mutuamente.
Una ejecución secundaria en modo distribuido no puede acceder a las variables globales de la ejecución principal porque los niveles de
Executionde las ejecuciones secundaria y principal son diferentes.
Uso de variables globales para transferir datos
Las variables globales proporcionan un espacio de almacenamiento clave-valor a nivel de ejecución. Cualquier estado de un flujo de trabajo puede escribir datos en la variable global al finalizar su ejecución para transferirlos a otros estados que los consuman.
En la figura anterior, el Estado A utiliza GlobalConstructor para almacenar en variable_a de las variables globales los datos correspondientes a $Input.key_a provenientes de la entrada ascendente. Asimismo, el Estado A usa GlobalConstructor para guardar en variable_b de las variables globales los datos correspondientes a $Output.key_b de su propia salida. El flujo de trabajo emplea InputConstructor para extraer los valores de variable_a y variable_b de las variables globales y pasarlos como entradas al Estado Z. De esta manera, se transfieren datos entre estados.
Las entradas y salidas de los flujos de trabajo de CloudFlow se utilizan para transferir datos explícitamente entre tareas, lo que garantiza la independencia y claridad de cada tarea. Las variables globales sirven para mantener estados compartidos entre tareas o configuraciones globales de recursos. El uso conjunto de entradas, salidas y variables globales permite lograr un diseño de sistema eficiente y flexible. La figura anterior compara InputConstructor, OutputConstructor y GlobalConstructor. Descripción:
InputConstructor($Context,$Global),OutputConstructor($Context,$Global)yGlobalConstructor($Context,$Global)indican que InputConstructor, OutputConstructor y GlobalConstructor pueden hacer referencia a$Contexty$Globalpara extraer información.$Global=Merge($Global,GlobalConstructor($Context,$Global))indica que las variables construidas por el constructor global se fusionan con las variables existentes en$Globaly, posteriormente, todas las variables se almacenan en$Globalpara actualizar las variables globales compartidas.$Outputes el resultado de la llamada a Task. Si la llamada se inicia en modo de devolución de llamada asíncrona, el valor de$Outputcorresponde al resultado de dicha devolución de llamada.En el diagrama,
$Globalrepresenta las variables globales, accesibles durante toda la ejecución del flujo de trabajo.
Creación y actualización de variables globales
Las variables globales se crean y actualizan mediante GlobalConstructor. Cuando finaliza la ejecución de un estado, se ejecuta GlobalConstructor. La siguiente definición de máquina de estados muestra cómo utilizar GlobalConstructor.
Type: StateMachine
Name: MyWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
- Type: Task
Name: InvokeFunction
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: >-
acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
invocationType: Sync
body.$: $Input
GlobalConstructor:
InvokeFunctionResultHeader.$: $Output.Header
InvokeFunctionResultBody.$: $Output.Body
End: true
La estructura de datos de
GlobalConstructores Map[String]Any.InvokeFunctionResultHeader.$: $Output. HeaderyInvokeFunctionResultBody.$: $Output. Bodyindican que el encabezado y el cuerpo del valor devuelto por la función se almacenan por separado en las claves InvokeFunctionResultHeader e InvokeFunctionResultBody dentro de las variables globales.
Lectura de variables globales
CloudFlow define la palabra clave $Global para leer variables globales. En todos los escenarios que admiten construcción de expresiones, se puede acceder al espacio de almacenamiento global de la ejecución actual mediante $Global. Los estados pueden extraer valores del espacio de almacenamiento global utilizando claves explícitas. La siguiente definición de máquina de estados muestra cómo usar $Global.
Type: StateMachine
Name: MyWorkFlow
SpecVersion: v1
StartAt: InvokeFunction1
States:
- Type: Task
Name: InvokeFunction1
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Sync
resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
GlobalConstructor:
InvokeFunctionPayload.$: $Output.Body
Next: InvokeFunction
- Type: Task
Name: InvokeFunction
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
invocationType: Sync
body.$: $Global.InvokeFunctionPayload
OutputConstructor:
demo.$: $Global
End: true
Al ejecutarse un estado, la función
InvokeFunctionejecutaGlobalConstructorpara almacenar el cuerpo del valor devuelto porInvokeFunction1en la claveInvokeFunctionPayloadde las variables globales.InvokeFunctionutiliza la expresión$Global.InvokeFunctionPayloadenParameterspara extraer el valor de la claveInvokeFunctionPayloaddel espacio de almacenamiento global y lo pasa como campobodyal estadoTaskpara su ejecución.El estado
InvokeFunctionusaOutputConstructorpara consultar los valores en$Global. Una vez completada la ejecución, el panel de salida del flujo de trabajo muestra el valor deInvokeFunctionPayloadcomo"hello world\n", lo que confirma que la variable global se leyó correctamente.