5.3 Modelo Dinâmico
5.3.4 Escalonamento e Execução de Processos
Os processos têm os seus elementos escalonados e executados paralelamente e recursiva- mente. Em cada elemento da árvore hierárquica que dene o processo, os seus elementos lhos são escalonados em paralelo e recursivamente e depois executados recursivamente, em forma de um pipeline de processamento de elementos, por elemento pai, compreendido de várias etapas: denição de prioridades de execução dos elementos lhos; escolha dos
140 Capítulo 5. Middleware para a Execução de Processos Estruturados elementos lhos a alocar; seleção e alocação de servidores nó para executar cada elemento lho, seja ele controlador, atividade ou processo; envio dos parâmetros iniciais; atualização dos arquivos de denição da aplicação; seleção do elemento para execução pelo gerenci- ador de grupo do servidor nó; execução; envio de resultados ou exceção; continuação da execução, se necessário pelo tratamento da falha ou erro; e remoção da alocação.
Invocação de Processos Um processo é invocado por um usuário por meio da utili- zação do gerenciador de cliente (CM), que requisita ao gerenciador de grupo a alocação de nó para a execução do processo. Para invocar um processo, o usuário deve se referir ao grupo e domínio da aplicação e ao nome do tipo do processo a ser instanciado. Depois de alocar o servidor nó para executar o processo, o gerenciador de grupo retorna uma re- ferência ao gerenciador de nó associado. Com a referência, o gerenciador de cliente passa os valores dos parâmetros iniciais a serem utilizados por essa instância do processo, por meio de uma mensagem, ao gerenciador de nó alocado. No nal da execução do processo, o gerenciador de nó que executou o processo retorna uma mensagem com os valores dos parâmetros de saída do processo ou uma exceção. Finalmente, o gerenciador de cliente requisita ao gerenciador de grupo a remoção da alocação do processo.
O gerenciador de cliente monitora o estado de execução do processo e do gerenciador de nó alocado. Se houver uma realocação, por falha no servidor nó inicial ou balancea- mento de carga, o gerenciador de grupo repassa a referência ao novo gerenciador de nó alocado, para o gerenciador de cliente, e o gerenciador de cliente reenvia a mensagem com os valores de parâmetros de entrada para o novo gerenciador de nó. O gerenciador de cliente armazena os parâmetros de entrada e os resultados dos processos no repositório compartilhado para se recuperar de falhas na máquina cliente.
Etapas Prévias para a Execução de Processos No lado do gerenciador de nó, existe um protocolo que é seguido na execução de processos. Primeiro, como foi explicado acima, o processo deve ser alocado no servidor nó, se houver disponibilidade, por meio do uso de gerenciadores de grupo. Depois de alocado, o arquivo em XSPL da aplicação, que contém o processo, é atualizado no servidor nó, assincronamente à execução do processo, de forma a evitar o aumento do tempo para a execução do elemento e diluir o custo de transferência de dados. Simultaneamente, o gerenciador de nó pode receber a mensagem com os valores dos parâmetros de entrada e armazená-la no repositório compartilhado. Uma vez carregado o arquivo do processo, e os auxiliares, e recebidos os parâmetros iniciais, o processo está pronto para ser executado. A partir desse momento, o gerenciador de grupo é noticado do estado pronto do processo. Ele invoca a execução do processo no tempo previsto de início do processo na agenda de processos mantida para esse servidor nó no próprio gerenciador de grupo. A execução do processo será descrita em detalhes na
Seção 6.1, sendo dividida em fases de escalonamento, alocação e invocação dos elementos do processo, de forma paralela, em um pipeline determinado pela dependência entre esses elementos. O resultado do processo, obtido no nal de sua execução, é retornado em forma de uma mensagem ao gerenciador de cliente, seja por noticação ou por requisição. Todos os passos dessa execução são armazenados em meio persistente para posterior recuperação em caso de falhas do servidor de processos, como será visto na Seção 6.3, de tolerância a falhas.
Escalonamento de Elementos de Processos No escalonamento dos elementos de um processo, são atribuídas prioridades para os elementos, eles são escolhidos de acordo com a ordem de execução, e servidores nó são selecionados e alocados para cada elemento. A alocação dos servidores nó para executar cada elemento é realizada pelo gerenciador de grupo. Mais detalhadamente, o processo é visto de forma hierárquica, com o próprio processo principal como raiz, controladores nos nós intermediários, e invocações a ativi- dades e processos nas folhas. Nessa hierarquia, cada elemento escalona os seus elementos lhos imediatos, fornecendo prioridades e requisitando a alocação de servidores nó para executá-los. O escalonamento interno a um controlador ou processo pode se iniciar assim que este for alocado. Na alocação é considerada a prioridade absoluta, da aplicação, e a relativa, do elemento em relação a outros elementos da aplicação: elementos de maior prioridade são alocados para executar antes de elementos de menor prioridade na mesma agenda de elementos, mesmo que a sua alocação seja requisitada posteriormente. Por isso o escalonamento de vários elementos pode ser executado em paralelo, tanto internamente, quanto entre elementos de níveis distintos. Ademais, pode-se escalonar alguns elementos lhos de um controlador ou processo, até um número limite, e depois escalonar o restante por requisição da execução do elemento. Para cada elemento escolhido, é selecionado o melhor recurso para executá-lo, de acordo com uma heurística, e este é alocado.
Execução de Elementos de Processos Depois do escalonamento de um elemento de processo, ele pode ser executado. O middleware escalona e executa os elementos de um processo, ou controlador, em forma de pipeline: ao mesmo tempo que elementos são esca- lonados, os já escalonados podem ser executados. A execução é realizada pela invocação dos elementos do processo, ou controlador, por meio da passagem da mensagem inicial correspondente para cada elemento. Essas invocações respeitam a ordem seqüencial, se forem elementos lhos imediatos de um processo, ou respeitam a ordem imposta pelos controladores, de acordo com o seu tipo. O tipo do controlador determina quais elemen- tos deve ser invocados após o término do anterior, denindo, assim, o uxo de controle e de dados entre os seus elementos lhos imediatos. Para cada invocação ou recebimento de resultados (ou exceção) dos elementos lhos invocados, são armazenados no repositó-
142 Capítulo 5. Middleware para a Execução de Processos Estruturados rio compartilhado o valor das variáveis internas modicadas e os valores dos parâmetros iniciais enviados ou os resultados obtidos, para posterior recuperação em caso de falha do servidor nó executor do elemento.