3-4 - Acoplamento Fraco

SOA se aplica aos grandes sistemas distribuídos. A escalabilidade e a tolerância a falhas são as chaves para a manutenibilidade desses sistemas. Adicionalmente é necessário minimizar o impacto das modificações e das falhas dentro do cenário do sistema como um todo. É por esta razão que o acoplamento fraco é um conceito chave de SOA.

 

A Necessidade de Tolerância a Falhas

O mercado demanda soluções rápidas, flexíveis e baratas, o que conflita com serem bem projetadas e robustas. Problemas irão ocorrer, mas é importante minimizar seus efeitos e consequências.

 

Formas de Acoplamento Fraco

O modo de obter acoplamento fraco é minimizar dependências. A introdução de acoplamento fraco deve ser feita na medida certa para satisfazer os requisitos de escalabilidade, flexibilidade e tolerância a falhas, uma vez que há um preço a ser pago em termos de complexidade (acarreta mais desenvolvimento e/ou esforços de manutenção).

 

 

Acoplamento Forte

Acoplamento Fraco

Conexões físicas

Ponto a ponto

Via mediador

Estilo da comunicação

Síncrona

Assíncrona

Modelo de dados

Tipos complexos comuns

Apenas tipos comuns simples

Sistema de tipagem

Forte

Fraco

Padrão de interação

Navegação através de árvores de objetos complexas

Mensagens autocontidas centradadas em dados

Controle da lógica de processo

Controle central

Controle distribuído

Binding (ligação)

Estática

Dinâmica

Plataforma

Forte dependência

Independência

Transações

2PC (two-phase commit)

Compensação

Deployment

Simultâneo

Em tempos diferentes

Versioning (controle de versões)

Atualizações explícitas

Atualizações implícitas

 

Comunicação Assincrona

Significa que o remetente e o destinatário não estão sincronizados. Depois que um envia sua mensagem pode continuar seu trabalho enquanto espera resposta. O destinatário pode ou não estar disponível no momento do envio. Quando ele se conecta, a mensagem é recebida. Ele precisa processá-la e enviar sua resposta, se necessário. Quem aguarda a resposta não precisa estar disponível quando ela é enviada. Se uma resposta é requerida, longos tempos de resposta não bloqueiam o consumidor de serviço.

 

Tipos de Dados Heterogêneos

A harmonização de tipos de dados não é viável para grandes sistemas distribuídos, pois conduz à "paralisação da análise" (ao se tentar obter a perfeição, analisando todos os requisitos, o trabalho nunca termina). Uma das causas é que as visões e interesses envolvidos são variados demais. Outra causa fundamental é que sistemas diferentes se expandem de formas diferentes. Em suma, a harmonização é cara demais em termos de tempo e dinheiro.

 

Mediadores

Uma chamada de serviço do tipo ponto a ponto (tal como Web Service) introduz acoplamento forte, pois o consumidor precisa enviar sua requisição para um sistema físico específico usando seu endereço físico. Torna-se necessário haver um mediador para minimizar esta dependência.

 

Há dois tipos de mediadores:

 

Verificação Fraca de Tipos

Linguagens de programação fortemente tipadas favorecem a detecção precoce de erros, antecipando para o momento da compilação a identificação de problemas que de outra forma seriam detectados apenas em tempo de execução. Se este conceito fosse estendido aos tipos de dados das requisições de serviço, isto iria prejudicar o desempenho e criar forte acoplamento. A infraestrutura (ESB) iria precisar dispor dos arquivos de XML schema que definem todos os tipos utilizados e precisaria de um tempo extra para realizar validações de tipos para cada requisição e para cada resposta. Qualquer modificação nos tipos de dados não envolveria apenas fornecedores e consumidores, mas também a infraestrutura. O ideal é que as mudanças das interfaces afetem apenas aqueles que as utilizam por contrato e não aqueles que transferem os dados correspondentes. Por estas razões é necessário usar interfaces genéricas e deixar as validações à cargo apenas dos sistemas onde os dados forem processados.

 

Binding (ligações)

É uma forma de acoplamento fraco similar à verificação fraca de tipos. Binding é a tarefa de correlacionar símbolos de diferentes módulos ou unidades de tradução. Há a opção de binding anterior (cuja verificação é em tempo de compilação) e binding posterior (cuja a verificação é em tempo de execução).

 

Dependências de Plataforma

Uma forma de acoplamento forte consiste de soluções que apresentam restrições quanto a plataforma. Soluções independentes de plataforma aumentam a liberdade de escolha. Uma outra forma de dependência de plataforma tem a ver com padrões de interação.

 

Padrões de Interação

Os padrões de interação são os paradigmas de programação empregados para modelar as interfaces dos serviços (englobando os tipos de dados fundamentais e suas possíveis combinações). Quanto mais complexas as construções programáticas, maior será a abstração que poderá ser adotada na programação. No entanto, haverá problemas para mapear os dados para plataformas que não possuam suporte nativo para uma construção particular.

 

Compensação

É uma forma de acoplamento fraco, relacionada à segurança da transação. A compensação elimina o incoveniente do 2PC (two-phase commit; completamento em duas fases): o 2PC exige que todos os sistemas atualizados por uma transação estejam online e provendo recursos até que a atualização seja completada no último sistema. Isso pode levar a atrasos e a deadlocks. A compensação é uma abordagem para a qual as atualizações não precisam ser feitas em sincronia. Para manter consistência, na caso de falha em algum sistema é feita a reversão das modificações nos demais sistemas em que elas foram completadas com sucesso.

 

Controle da Lógica de Processo

Um controle de processos descentralizado e distribuído evita gargalos e permite que caso alguns sistemas falhem os demais ainda possam continuar trabalhando.

 

Deployment

Requerer atualizações simultâneas de sistemas cria acoplamento forte. Para minimizar dependências é necessário permitir que as migrações possam ocorrer gradualmente. Para tanto é necessário haver um controle de versões.

 

Controle de Versões

Com uma foma de controle de versões mais fracamente acoplada, o consumidor não terá que fazer nada enquanto as modificações feitas pelo fornecedor forem compatíveis com versões anteriores.

 

Lidar com Acoplamento Fraco

Existem diferentes formas de acoplamento fraco, mas qualquer uma delas tem suas desvantagens. É, portanto, necessário encontrar o equilíbrio correto entre acoplamento fraco e forte para cada contexto e projeto específicos.