• Sonuç bulunamadı

Geleneksel Yozgat evlerinin özellikleri

Belgede Geleneksel Yozgat evleri (sayfa 186-191)

4. DEĞERLENDİRME

4.1. Geleneksel Yozgat evlerinin özellikleri

Para que a gramática de PEWS dê suporte ao Restructure, precisamos criar uma nova regra na gramática, a Ąm de diferenciarmos os trechos normais dos trechos redun-

dantes. Mostraremos abaixo as regras a serem acrescentadas: P ::= ... | Ś{Š P CAlt | ...

CAlt ::= Ś%Š P CAlt | Ś}Š

Como podemos observar, além da criação de uma nova regra, criamos também um novo símbolo não-terminal, denominado CAlt, em alusão ao termo ŞComposições Alter- nativasŤ. Isto nos permite criar um número ilimitado de composições alternativas, sendo as mesmas separadas pelo símbolo Ś%Š. Além disso, a delimitação de um trecho redundante é feita com a utilização de um conjunto de chaves (símbolos Š{Š e Š}Š). A nova gramática, após a inserção do Restructure, apresenta-se da seguinte forma (as novas inserções con- tém um sublinhado):

C ::= ŚRETRYŠ Ś(Š TE Ś,Š NM T Ś)Š P | P

P ::= Ś@Š S( ¯I, ¯O) SAlt | S( ¯I, ¯O) | P1 || P2 | P1 ; P2 | [E1]P1 + [E2]P2

| if[E1]P1 | unfold | unfolding P1 | Š{Š P CAlt

E ::= id | n | t | E1 + E2 | E1 - E2 | E1 * E2 | E1 / E2 | − E1

| E1 < E2

SAlt ::= Ś%Š S( ¯I, ¯O) SAlt | Ś@Š

CAlt ::= Ś%Š P CAlt | Ś}Š

3.4.2

Alterações na Máquina de Redução de Grafos

Utilizaremos a Ągura 18 para que nos mostrar o passo-a-passo da construção desse método.

Figura 18 Ű Exemplo de composição de serviços com caminhos alternativos

Inicialmente, temos um conjunto de vértices e de arestas. Existe um vértice Y , a partir do qual saem outras n arestas (arestas de cor vermelha). Estas arestas estão identiĄcadas por ci, com 1 ≤ i ≤ n, que delimita um trecho redundante, cujos vértices estão dentro de uma região de cor verde, e cada um desses caminhos representa uma subcomposição, identiĄcada por Pi, com 1 ≤ i ≤ n. Da mesma forma, ao Ąm de cada caminho, existe uma aresta que liga o último vértice a outro que está fora do trecho dos caminhos alternativos. Na lógica do Restructure, apenas um dos caminhos precisa ser executado. Surge então um problema estrutural, de acordo com a Ągura: com a redução do vértice Y , todos os vértices iniciais dos caminhos de c1 a cn seriam vértices mínimos, e não haveria nenhum impedimento para a execução deles. Portanto, caso não ocorresse nenhum problema, todos executariam, o que não estaria em conformidade com o que o

Restructure propõe.

A primeira solução proposta visava criar um vértice de sincronismo no início de um trecho redundante, onde este vértice só seria reduzido no caso de um caminho alternativo terminar a execução, porém essa solução não trazia resultados muito satisfatórios. Assim como no Rebinding, criamos um vértice composto do tipo pilha. A grande diferença é que esta não seria uma pilha de chamadas de serviços, e sim uma pilha de subcomposições, onde os elementos da pilha não são mais vértices simples, mas sim subcomposições. Utilizando

3.4. Reorganização do Processo 63 os termos já apresentados, a pilha corresponderia a um trecho redundante e cada elemento da pilha corresponderia a uma subcomposição alternativa. Isso é mostrado na Ągura 19.

Figura 19 Ű Aplicação do Restructure

De acordo com a Ągura 19, o vértice w é uma pilha de subcomposições que possui uma aresta de controle chegando de Y e possui uma aresta de controle para o vértice Z. Podemos inserir diversas subcomposições alternativas sem a criação de arestas adicionais, pois os vértices externos só enxergam a pilha. Tendo como base os fatos apresentados, veremos abaixo como é realizada a transformação de uma pilha de subcomposições alter- nativas:

T J{P1 % P2 % ... % Pn}K = h{w : [P1, P2, ..., Pn], ∅, ∅}i

Na transformação acima, criamos um vértice w, que representa a pilha de subcom- posições, onde a mesma contém os elementos P1, P2, ... Pn, que representam as subcom-

posições alternativas. Neste momento, não realizamos a transformação de cada uma das composições em vértices e arestas, deixando suas especiĄcações armazenadas na pilha de subcomposições.

A semântica de redução da pilha de subcomposições consiste nos seguintes passos: (i) observar a existência de composições alternativas na pilha; (ii) transformar a subcom- posição do topo da pilha em vértices e arestas; (iii) realizar n transições nos vértices dessa composição até que se chegue a uma situação onde não existam mais possibilidades de redução. Neste último caso, se não existirem mais possibilidades de redução pelo fato de não haver mais vértices disponíveis, concluimos que toda a subcomposição foi executada, não necessitando mais das outras subcomposições alternativas. Caso contrário, se não há mais possibilidades de execução, porém ainda há vértices disponíveis, concluímos que ocorreu uma falha que não pode ser tratada, fazendo com que o resto da subcomposi- ção seja descartada e outra subcomposição realize o mesmo processo de transformação e redução.

Dessa forma, a redução correspondente à primeira execução de uma pilha de sub- composições alternativas é mostrada abaixo:

hhV[w : [P1, . . .]]i , ρ, I, O, M, TE, NM Ti, sendo indegree(w) = 0 =⇒ hhV[w : [T JP1K, . . .]], Ac, Adi , ρ, I, O, M, TE, NM Ti, sendo T JP1K = hV1, Ac1, Ad1i, indegree(w) = 0

Realizada a transformação do topo da pilha em vértices e arestas, é preciso agora reduzir o conjunto de vértices V1 até que não haja mais possibilidade de execução. Isso é

feito através de n reduções, cujos detalhes das mesmas serão omitidos nesse momento. Se a redução dos vértices do conjunto V1 for total, ou seja, não existirem mais vértices nesse

conjunto, a execução da subcomposição foi realizada com sucesso e não necessitamos mais das outras subcomposições. Dessa forma, temos a seguinte redução para o caso de sucesso:

hhV[w : [T JP1K, . . .]], Ac, Adi , ρ, I, O, M, TE, NM Ti, sendo T JP1K = hV1, Ac1, Ad1i, hV1, Ac1, Ad1i =⇒∗ h∅, ∅, ∅i, indegree(w) = 0 =⇒ hhV, Ac, Adi , ρ, I, O, M, TE, NM Ti

Observamos a existência de um conjunto de vértice V , onde existe um vértice w que é uma pilha de subcomposições, sendo este um vértice mínimo, cujo topo é a subcom- posição P1. Sabendo que a transformação de P1 resulta no conjunto de vértices e arestas

hV1, Ac1, Ad1i e, após n transições, chegamos a h∅, ∅, ∅i, chegamos ao Ąm da execução da

subcomposição. Dessa forma, após a redução, excluímos a pilha de subcomposições (con- sequentemente, excluimos os vértices e arestas internos a ela) e retiramos as arestas que a mesma tinha em direção a outros vértices. Além disso, após a execução do topo da pilha, teremos a mudança de vários parâmetros da máquina (ρ, I, O, M′), alterados durante a

redução dos vértices pertencentes a V1.

Abaixo, realizamos a redução para o caso de ter ocorrido uma falha em determi- nado vértice do topo da pilha, onde esta falha não possui solução a ser tomada:

3.4. Reorganização do Processo 65 hhV[w : [T JP1K, P2, . . .]], Ac, Adi , ρ, I, O, M, TE, NM Ti, sendo T JP1K = hV1, Ac1, Ad1i, hV1, Ac1, Ad1i =⇒∗ hV, Ac1, Ad1i, V′ 6= ∅, indegree(w) = 0 =⇒ hhV[w : [T JP2K, . . .]], Ac, Adi , ρ, I, O, M, TE, NM Ti

Na redução, observamos a subcomposição P1 sendo o topo da pilha de subcom-

posições. Após n transições, chegamos a um ponto onde não há mais possibilidades de redução, entretanto, não temos um conjunto de vértices vazios em V′ (conjunto de vértices

após as reduções). Como não temos mais possibilidades de redução, descartamos o con- junto de vértices restantes relativos a subcomposição P1. Assim como no caso de sucesso,

vemos a alteração dos parâmetros da máquina. Um fator a ser observado é em relação ao ambiente de variáveis ρ′. Este ambiente pode ter sido alterado por determinados serviços

de V1 que tiveram sua execução realizada. Como a máquina de redução não realiza um

rollback das ações, podemos ter problemas quando à consistência dos dados.

No estudo desses métodos, observamos uma semelhança entre os métodos Rebin-

ding e Restructure. Após uma análise, chegamos à conclusão que o mecanismo Rebinding

pode ser representado pelo Restructure, onde podemos considerar subcomposições como sendo simplesmente chamadas de serviços. Dessa forma, surge o questionamento sobre a utilização do Rebinding: por que não utilizar apenas o Restructure? Utilizamos algumas métricas para mostrar que o Rebinding pode ser mais eĄciente que o Restrucutre, onde estas métricas englobam o número de vértices e o número de arestas criadas por cada uma das estruturas. Consideremos o caso onde temos apenas uma chamada de serviço. Tanto para o Rebinding quanto para o Restructure, criamos três vértices (entrada de serviços, saída de serviços e o vértice pilha) e uma aresta que liga o vértice de entrada ao vértice de saída. Neste caso, não temos aparentemente nenhuma vantagem na utilização do Re-

binding ao Restructure. Porém a medida que o número de serviços cresce, conseguimos

perceber a diferença entre estas soluções. Para n serviços alternativos, o Rebinding cria

n+ 2 vértices e apenas uma aresta. Já no Restructure, criamos 2n + 1 vértices e n arestas.

Em relação aos vértices, o crescimento de ambos é linear, porém o Restructure apresenta um valor maior de aumento de vértices à medida que o número de serviços alternativos au- menta. Em relação às arestas, o crescimento do Restructure é linear, enquanto o Rebinding cria apenas uma aresta, independente do número de serviços alternativos especiĄcados. Com isso, chegamos à conclusão de que o uso do Rebinding apresenta um maior nível de eĄciência com o aumento do número de serviços alternativos.

67

4 IMPLEMENTAÇÃO

Neste capítulo, apresentaremos a descrição da implementação de uma instância da máquina de redução de grafos com a aplicação dos métodos de detecção e recuperação de falhas a partir da máquina abstrata. Daremos uma visão geral sobre o ambiente de im- plementação e mostraremos a implementação da máquina de redução original, a máquina de redução estendida e a integração da máquina com a ferramenta GraphViz [13], usada para geração gráĄca do Ćuxo de uma composição de serviços.

Belgede Geleneksel Yozgat evleri (sayfa 186-191)

Benzer Belgeler