Aqui jaz o último post da série “Equilíbrio e Granularidade de Serviços”. No post anterior da série os conceitos de granularidade fina e grossa foram expostos, bem como seus benefícios e desafios. Agora o objetivo é entender e saber quais forças atingem a granularidade de um serviços.
Assim como muitas decisões de design de software, as decisões tomadas acerca da definição da granularidade de serviços, na prática, freqüentemente são baseadas em heurísticas. Para facilitar este caminho, existem aspectos dos quais arquitetos e projetistas podem considerar para chegar à granularidade quase correta dos serviços em uma arquitetura SOA. É uma tentativa de deixar o problema menos empírico. Digo “quase correta” pois não existe granularidade correta ou errada, o que existe, é a granularidade boa para atender alguns aspectos em uma estratégia SOA em determinado contexto.
Um serviço pode ser projetado visando um ou mais dos seguintes aspectos:
- Funcionalidade
- Flexibilidade
- Reúso
- Complexidade
- Independência de Contexto
- Desempenho
- Generalidade
- Fornecimento
Para exemplificarmos: imagine-se na visão de um projetista de serviços, quando ele pensa em um desejo sobre um serviço que ele está projetando, algo como: “gostaria que o meu serviço fosse altamente reutilizado.” O que isso implica? Quais são os efeitos colaterais?
O aspecto de reúso quase sempre resulta em serviços pequenos com capacidades funcionais reduzidas, ou seja, serviços de alta granularidade (fine-grained), em contrapartida, os serviços acabam possuindo uma baixa complexidade cognitiva. Pensando no serviço a ser projetado pelo projetista, se ele carregá-lo com muita capacidade funcional específica o serviço só poderá ser reutilizado em um ou poucos contextos de negócio, nisto perde-se em reusabilidade. Também, como são gerados vários pequenos serviços tende-se a impactar no desempenho, aumentando a latência de rede com composições desses pequenos incrementos para resolver a necessidades funcionais.
Veja apenas pela descrição acima que, projetar serviços para o reúso produz efeito direto em outros aspectos como: funcionalidade, complexidade, desempenho. Além disso existe um relação direta entre a granularidade do serviço e sua capacidade de reúso, onde quanto mais fina a granularidade maior a capacidade de reúso.
Então, qual a medida de reúso que o projetista deve usar para ter a granularidade correta? Como vimos nos outros posts da série, não existe uma medida absoluta para a granularidade, o que existe é uma análise de equilíbrio (trade-off) que o projetista ou arquiteto deve fazer ao projetar os serviços, considerando os aspectos citados acima e sabendo que eles influenciam uns aos outros e com alguma relação com a granularidade.
Outros links de referência:
http://www.ibm.com/developerworks/library/ws-soa-design1/
http://www-128.ibm.com/developerworks/webservices/library/ws-soa-granularity/
http://www.zapthink.com/report.html?id=ZAPFLASH-200783
http://msdn2.microsoft.com/en-us/library/bb245664.aspx
- Fábio Rosato
Enviado por: Fábio Rosato
Posts relacionados:
Categorias:
Divulgue esse post:
LinkTo