Quando os dados de um fluxo de trabalho passam por vários estados, cada estado recebe a saída do estado anterior como entrada. A transferência de variáveis estado a estado torna complexa a passagem de dados entre estados não adjacentes. O CloudFlow oferece um mecanismo de variáveis globais para simplificar esse processo e aumentar a eficiência.
Limites
Se esses limites não atenderem às suas necessidades, você pode envie um ticket.
|
Item |
Valor máximo |
|
Tamanho da chave da variável |
128 Bytes |
|
Tamanho do valor da variável |
256 KiB |
Observações
O elemento
$OutputemGlobalConstructorrefere-se à saída bruta do estado Task, e não ao resultado da construção feita porOutputConstructor.O elemento
$GlobalemOutputConstructorrefere-se ao valor bruto antes da construção realizada porGlobalConstructor.
Limites no tamanho do contexto
Ao transferir dados com $Global, as saídas de InputConstructor e OutputConstructor devem respeitar o limite de 64 KiB para o tamanho do contexto.
Condição de corrida
As variáveis globais fornecem um espaço de armazenamento chave-valor no nível da execução, acessível para leitura e escrita em todos os estados durante todo o ciclo de vida da execução. Quando há lógica paralela no fluxo, como map e parallel, os dados podem ser sobrescritos entre diferentes estados. Siga estas recomendações:
Utilize chaves distintas para gravar variáveis globais em ramificações diferentes dos estados Parallel.
Evite gravar variáveis globais em estados Map. Como todas as definições de iteração do Map são idênticas, os nomes das variáveis no GlobalConstructor também serão iguais. Nomes idênticos gravados a partir de ramificações diferentes se sobrescrevem mutuamente.
Uma execução filha no modo distribuído não consegue acessar as variáveis globais da execução pai, pois os níveis de
Executiondas execuções filha e pai são diferentes.
Uso de variáveis globais para transferência de dados
As variáveis globais oferecem um espaço de armazenamento chave-valor no nível da execução. Qualquer estado de um fluxo de trabalho pode gravar dados na variável global ao final de sua execução, permitindo que outros estados consumam essas informações.
Na figura anterior, o Estado A utiliza GlobalConstructor para armazenar os dados correspondentes a $Input.key_a, provenientes da entrada upstream, na chave variable_a das variáveis globais. O Estado A também usa GlobalConstructor para salvar os dados correspondentes a $Output.key_b, presentes em sua própria saída, na chave variable_b das variáveis globais. O fluxo de trabalho emprega InputConstructor para extrair os valores de variable_a e variable_b do armazenamento global e os repassa ao Estado Z como entradas. Dessa forma, ocorre a transferência de dados entre estados.
As entradas e saídas dos fluxos de trabalho do CloudFlow servem para transferir dados explicitamente entre tarefas, garantindo independência e clareza. Já as variáveis globais mantêm estados compartilhados entre tarefas ou configurações globais de recursos. A combinação de entradas, saídas e variáveis globais permite crie um design de sistema eficiente e flexível. A figura acima compara InputConstructor, OutputConstructor e GlobalConstructor. Descrição:
As expressões
InputConstructor($Context,$Global),OutputConstructor($Context,$Global)eGlobalConstructor($Context,$Global)indicam que InputConstructor, OutputConstructor e GlobalConstructor podem referenciar$Contexte$Globalpara extrair informações.A expressão
$Global=Merge($Global,GlobalConstructor($Context,$Global))mostra que as variáveis construídas pelo construtor global são mescladas com as variáveis existentes em$Global. Em seguida, todas as variáveis são salvas em$Globalpara atualize as variáveis globais compartilhadas.O elemento
$Outputrepresenta o resultado da chamada da Task. Se a chamada for iniciada no modo de callback assíncrono, o valor de$Outputcorresponderá ao resultado desse callback.No diagrama,
$Globalrepresenta as variáveis globais, acessíveis durante toda a execução do fluxo de trabalho.
Crie e atualize de variáveis globais
A crie e a atualize de variáveis globais ocorrem por meio de GlobalConstructor. Quando a execução de um estado termina, o sistema executa GlobalConstructor. A definição de máquina de estados a seguir demonstra como usar o 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
A estrutura de dados de
GlobalConstructoré Map[String]Any.As definições
InvokeFunctionResultHeader.$: $Output. HeadereInvokeFunctionResultBody.$: $Output. Bodyindicam que o cabeçalho e o corpo do valor retornado pela função são armazenados separadamente nas chaves InvokeFunctionResultHeader e InvokeFunctionResultBody das variáveis globais.
Leitura de variáveis globais
O CloudFlow define a palavra-chave $Global para ler variáveis globais. Em todos os cenários que aceitam construção de expressões, é possível acessar o espaço de armazenamento global da execução atual usando $Global. Os estados extraem valores desse espaço de armazenamento global por meio de chaves explícitas. A definição de máquina de estados abaixo ilustra o uso de $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
Durante a execução de um estado, a função
InvokeFunctionroda oGlobalConstructorpara salvar o corpo do valor retornado porInvokeFunction1na chaveInvokeFunctionPayloaddas variáveis globais.O estado
InvokeFunctionutiliza a expressão$Global.InvokeFunctionPayloaddentro deParameterspara recuperar o valor da chaveInvokeFunctionPayloaddo armazenamento global. Esse valor é então passado como campobodypara o estadoTaskexecutar.O estado
InvokeFunctionempregaOutputConstructorpara visualize os valores em$Global. Após a conclusão da execução, o painel de saída do fluxo de trabalho exibe o valor deInvokeFunctionPayloadcomo"hello world\n", confirmando a leitura bem-sucedida da variável global.