• Nenhum resultado encontrado

2.3 PEWS

2.3.2 Máquina de Redução de Grafos

2.3.2.2 Regras de Redução

Tendo traduzido a gramática de PEWS para uma notação de grafos, regras de avaliação podem ser aplicadas aos vértices para reduzir o grafo original, produzido pelas regras de tradução. Segundo [8], a máquina abstrata que corresponde ao estado inicial do grafo logo após a transformação PEWS tem a seguinte conĄguração:

hhV, Ac, Adi , ρ, I, Oi

A expressão hV, Ac, Adi faz referência aos vértices, arestas de controle e arestas de dependência do grafo. São acrescentados mais três elementos:

Um ambiente ρ, responsável por manter a consistência e durabilidade das variáveis, representado por um identiĄcador, o vértice que lhe atribuiu um valor, e o respectivo valor. Uma expressão ρ[x,v,k] indica que a variável x é um identiĄcador cujo valor é

k e esse valor foi atribuído pelo vértice v;

Um bufer de parâmetros de entrada I, composto por uma operação, um vértice e uma lista de valores. Uma expressão I [S,v,¯t] indica que o serviço S enviou uma lista de valores ¯t para ser utilizada pelo vértice v;

Um bufer de parâmetros de saida O, composto também por uma operação, um vértice e uma lista de valores. Uma expressão O[S,v,¯t] indica que o serviço S recebeu

2.3. PEWS 43 e irá avaliar uma lista de valores ¯t e, posteriormente, enviará o resultado para ser utilizado pelo vértice v;

Os vértices candidatos a serem reduzidos inicialmente são: chamadas e retornos de serviços (S! ¯I e S? ¯O), escolhas não-determinísitcas Ş+Ť (que comporta também os

condicionais) e o vértice de repetição.

Uma chamada de serviço é deĄnida por D

V[v1 : S! ¯I, v2 : S? ¯O], Ac[v1 7→ v2], Ad

E . Essa representação corresponde ao primeiro elemento da máquina abstrata. A avaliação dessa entrada é a seguinte:

DD V[v1 : S! ¯I, v2 : S? ¯O], Ac[v1 7→ v2], Ad E , ρ, I, OE =⇒ DD V[v2 : S? ¯O], Ac, Ad E , ρ, I, O[S, v2, Eval( ¯I)] E , onde indegree(v1) = 0

Como vemos acima, Ąca explícito o fato de que nenhuma aresta está chegando no vértice v1, estando o mesmo pronto para ser avaliado, além de que o vértice v2 receberá a

resposta da chamada S! ¯I. Na redução, as variáveis de entrada presentes em ¯Isão avaliadas através de Eval( ¯I). O vértice v2 receberá o resultado da avaliação das entradas realiza-

das por v1 e, portanto aparecerá dentro do parâmetro O. Com a avaliação feita, tanto

o vértice avaliado quanto as arestas que saem desse vértice do grafo são retirados deste. Seguindo o mesmo raciocínio, vemos abaixo a avaliação da respectiva saída de serviço e a representação gráĄca na Ągura 9.

DD V[v2 : S? ¯O], Ac, Ad E , ρ, I[S, v1, t], O E =⇒ hhV, Ac− {v2 7→c v|v∈ V }, Ad− {v2 7→dv|v∈ V }i , ρ, I, Oi, onde indegree(v2) = 0 ρ= ρ[(x i, v2, ki | 1 ≤ i ≤ n)], ¯ O =< x1, ..., xn >, ¯t=< k1, ..., kn >

A conĄguração usada na saída de S! ¯I é utilizada na entrada de S? ¯O. O parâmetro I contém o serviço S, o vértice que está atribuindo esses valores à saída (v1) e a avaliação

dos valores de v1 (Eval( ¯I)), que se transformaram numa tupla de variáveis ¯t. Com esses

dados, é possível avaliar a saída de serviço S? ¯O. Como resultado, temos: todos os vértices do grafo V ; todas as arestas de controle e de dependência, com a exclusão das arestas que saíam do vértice v2; um novo ambiente de variáveis ρ′, que contém as variáveis de saída

¯

de ¯O(k1, ...kn, que correspondem respectivamente a x1, ...xn).

Figura 9 Ű Transformação de entrada e saída de serviços

Na avaliação de uma escolha não-determinística, necessitamos avaliar as expres- sões de guarda dos predicados. Na máquina de redução, se uma guarda retorna true, não é necessário a avaliação da outra guarda. A avaliação é feita considerando a seguinte ordem:

(i) a primeira guarda retorna true; (ii) a primeira guarda retorna false; (iii) a segunda

guarda retorna true; e (iv) a segunda guarda retorna false. Em um primeiro momento, temos a seguinte situação:

hhV[v1 : +, v2 : E2, v3 : E3], Ac[v1 7→ v2, v1 7→ v3], Adi , ρ, I, Oi

=⇒

hhV[v1 : +, v2 : Eval(E2), v3 : E3], Ac[v1 7→ v2, v1 7→ v3], Adi , ρ, I, Oi, onde

indegree(v1) = 0,

indegreec(v2) = 1,

indegreed(v2) = 0

O indegree(v1) é 0, ou seja, não existem arestas chegando nele. Além disso, a única

aresta que chega a v2 é a aresta correspondente a v1. Um fato a ser observado é que o

vértice Ş+Ťnão é retirado do grafo, pois ele pode ser utilizado novamente. Na avaliação mostrada acima, E2 assume um valor booleano, ou seja, true ou false. Considerando o

passo (i), se E2 é true, os seguintes vértices e arestas são retirados do grafo: os vértices

v1, v2 e v3; as arestas de controle do vértice v2; e todos os descendentes de v3. Neste caso,

temos: hhV[v1 : +, v2 : true, v3 : E3], Ac[v1 7→ v2, v1 7→ v3], Adi , ρ, I, Oi =⇒ hhV, Ac, Adi , ρ, I, Oionde, indegree(v1) = 0, V= V \{w ∈ V | v 3 7→∗c w},

2.3. PEWS 45

A

c = Ac\{v2 7→∗ w | w ∈ V }

Na situação (ii), E2 é avaliado como false. Retiramos todos os vértices Ąlhos de

v2, assim como o próprio v2 e nos preparamos para avaliar a segunda guarda, v3. Dessa

forma, temos: hhV[v1 : +, v2 : false, v3 : E3], Ac[v1 7→ v2, v1 7→ v3], Adi , ρ, I, Oi =⇒ hhV[v 1 : +, v3 : E3], Ac[v1 7→ v3], Adi , p, I, Oi onde, indegree(v1) = 0, V= V \{w ∈ V | v 2 7→∗c w}, Ac = Ac\{v2 7→∗ w | w ∈ V }

Na realização de (ii), permanecemos com uma guarda disponível para avaliação. Realizando o passo (iii), E3 é avaliado como true. Assim, retiramos o vértice v1:+, o vér-

tice v3 e as arestas de seus Ąlhos, correspondendo a seguinte situação:

hhV[v1 : +, v3 : true], Ac[v1 7→ v3], Adi , ρ, I, Oi =⇒ hhV, Ac, Adi , ρ, I, Oi, onde indegree(v1) = 0, Ac = Ac\{v3 7→∗ w | w ∈ V }

Da mesma forma, se temos v3 : E3 avaliado como false (o que corresponde ao

passo (iv)), retiramos o vértice, suas arestas e seus Ąlhos da mesma forma como Ązemos no segundo passo. A Ągura 10 mostra a sequência desses passos, onde (iii) e (iv) tem as mesmas características da da avaliação do condicional simples (ŞIFŤ).

Na avaliação de repetições, utilizamos o vértice µ. Sendo este um vértice mínimo, todos os vértices unfold relacionados a este vértice são substituidos por uma cópia do subgrafo que está dentro do âmbito do µ, ou seja, todos os vértices de Unfolding P. Seja

G um grafo formado por um conjunto de vértices V , adicionando-se um vértice v : µ, pai

de todos os outros vértices de V , e seja também w um vértice unfold correspondente ao vértice v : µ. Temos que G = hV [v : µ, w : unfold], Ac, Adi. Observemos abaixo a seguinte transformação:

Figura 10 Ű Transformação de uma escolha não-determinística hG, ρ, I, Oi =⇒ hhG[w/Gw]\{v}, ∅, ∅i , ρ, I, Oi, onde indegree(v) = 0, Gw = hVw, Aw c, Awdi

Na transformação acima, temos o grafo G e a ocorrência de w/Gw , sendo w o vértice unfold e Gw uma cópia do grafo G a partir do vértice v. O símbolo Ş\Ť indica que, quando o vértice w for um vértice mínimo, ele deve ser substituído pelo grafo Gw. GraĄcamente, teríamos situação mostrada na Ągura 11.

47

3 RECUPERAÇÃO DE FALHAS EM PEWS-

AM

Neste capítulo, descrevemos os métodos de recuperação de falhas no contexto da máquina de redução de grafos PEWS-AM. Além disso, mostraremos também as alterações que serão necessárias para que esses métodos sejam suportados, ou seja, a extensão da gramática de PEWS e a mudança e inserção de novas regras de tradução e de redução de grafos.

3.1 ClassiĄcação de Falhas

Serviços Web são utilizados num ambiente extremamente dinâmico, que é a Web. Em virtude disso, existem grandes possibilidades de serviços Ącarem indisponíveis por algum tempo, às vezes no momento em que são requisitados. Uma composição de ser- viços deve estar apta a se recuperar deste tipo de falha, pois sem o devido tratamento, esta ocorrência pode acarretar na perda de todo o processamento anteriormente realizado. Adotamos neste trabalho o tratamento de falhas de disponibilidade de serviços, em virtude da delimitação do escopo deste trabalho. Falhas de disponibilidade incluem Time-outs e

Service not-found, causados respectivamente pela demora na resposta à solicitação e pela

ação má sucedida na busca do serviço solicitado. Ambos ocorrem quando um solicitante tenta realizar uma comunicação com um serviço, não obtendo uma resposta. Isso pode ocorrer por diversos motivos, dentre eles destacamos três: queda do serviço, sobrecarga

de serviço e inexistência de serviço. Nos dois primeiros casos, as falhas podem acontecer

momentaneamente, ou seja, após algum tempo, o serviço pode voltar a funcionar normal- mente. Já na inexistência de serviço, ou o serviço não existe ou mudou a forma de sua comunicação. O tratamento de falhas de disponibilidade dá possibilidades à composição de serviços de não abortar sua execução e evitar perdas de processamento. Dessa forma, adotaremos o tempo de resposta como critério de detecção de falhas, onde deĄniremos um espaço de tempo para que possamos veriĄcar se houve ou não uma falha na execução do serviço.

Em [5], vimos a proposta de duas abordagens para tratamento de falhas: DPD (Design Defensive Project), onde a composição é construída de forma que as soluções já estivessem embutidas no próprio código de composição; e SRTM (Service Run-Time

Monitoring), onde soluções são tomadas no momento em que a execução da composição

falha. No nosso trabalho, utilizaremos a técnica DPD. Construiremos composições de serviços onde iremos prever situações errôneas e descrever mecanismos de tratamento para

que a mesma volte a um estado válido, ou seja, volte a um estado onde a continuação da execução seja possível. Apesar de dar suporte à recuperação da execução, a máquina não dá suporte ao rollback do processamento realizado, ou seja, não é possível desfazer as ações que foram realizadas antes da ocorrência de uma falha.

Para o tratamento de falhas de disponibilidade, utilizaremos os mecanismos pro- postos em [5]. Os três mecanismos propostos para recuperação de falhas de disponibilidade são: Reinvocação do Serviço (Retry), Substituição de Serviço (Rebinding) e Reor-

ganização do Processo (Restructure). Os mecanismos deste trabalho foram escolhidos

como base por demonstrarem sua idéia geral de forma clara e pela baixo custo do esforço na adaptação da implementação em PEWS-AM.

Nas seções seguintes, apresentamos a descrição de cada método e como eles são adaptados para o funcionamento na máquina de redução de grafos.