18 de July de 2008

Equilíbrio e Granularidade de Serviços (II)

No meu primeiro post da série “Equilíbrio e Granularidade de Serviços” foi abordada a importância deste tema em uma estratégia SOA. Agora vamos falar um pouco sobre granularidade fina e grossa e seus benefícios e desafios.

granularidade de serviços

Alguns autores de publicações sobre design de software, principalmente de serviços, referem-se à granularidade dividindo-a em duas grandes medidas: granularidade grossa, tecnicamente chamada de coarse-grained; e granularidade fina, tecnicamente chamada de fine-grained. É importante salientar que dizer: granularidade alta, não significa o mesmo que granularidade grossa, muito pelo contrário, o significado é antagônico. Como o termo granularidade refere-se aos grãos, granularidade alta indica uma maior quantidade de grãos e conseqüentemente a granularidade é fina. E contrariamente, poucos grãos implicam em grãos maiores, conseqüentemente indica granularidade grossa.

Assim, granularidade de serviço é o grau de modularidade dos serviços ou o escopo da funcionalidade exposto por um serviço. Um serviço de granularidade fina implica em mais flexibilidade, porque há mais, pequenos incrementos, pequenas unidades funcionais. Por outro lado, um serviço de granularidade grossa possui grandes pedaços de capacidade funcional.

É muito comum algumas referênica recomendarem que serviços sejam de granularidade grossa, principalmente os serviços de negócio. Deepak Alur’s em um post do seu blog chamado “SOA Service: Coarse or Fine, Must Make a Dime!”, afirma que os serviços de negócio podem ser tanto de granularidade grossa quanto de granularidade fina, ou ainda estar entre os dois. E que isto depende justamente das necessidades de negócio. Se fizer sentido para o negócio, provavelmente é um bom serviço a ser exposto.

Portanto, na minha opinião não há regras para dizer que todos os serviços de negócio devem ser ou de granularidade grossa ou de granularidade fina. O ideal é que eles tenham a granularidade correta para o cenário de uso específico. Digo: deve haver um equilíbrio. Mesmo por que, estes dois conceitos descritos não são termos absolutos, ou seja, são relativos. E não há uma medida simples para granularidade grossa ou fina. Para reforçar essa idéia, o próprio OASIS SOA Reference Model diz que o termo granularidade grossa é subjetivo e difícil de ser medido e, portanto deve ser considerado como relativo.

Benefícios e Desafios

Tipicamente serviços de granularidade fina correspondem a funções de negócio elementares e com alto potencial de reúso da lógica de negócio. Os benefícios dos serviços de granularidade fina incluem: a melhora da coesão; a redução no acoplamento e melhor clareza de design; as mensagens são pequenas contendo dados simples; como os serviços são individuais eles podem ser compostos em outros serviços (composability); alto desempenho. Por outro lado, os desafios são: recuperação de falhas na execução em composição de chamadas se a rede não estiver confiável; o consumidor necessita entender a exata seqüência das requisições de serviço e o processo completo em composições; descrição complexa em termos de seqüência, pré e pós condições; aumento do tráfego de rede e elevado custo de distribuição com requisições múltiplas do serviço.

Na outra mão, os serviços de granularidade grossa trazem os benefícios de: corresponderem ao processo de negócio, e tecnicamente quando implementados via Web Services reduzem a latência de rede e o número de chamadas através da rede; todo o dado pode ficar contido em uma única requisição; pode reduzir a necessidade de gerenciar estado como o transporte de mensagem com contexto completo; alto-descritivo e alto-contido. E seus desafios são: dado complexo; mensagem de grande tamanho; complexidade em lidar potencialmente com múltiplos erros de dados em diferentes partes da requisição do serviço; pode ser adequado na direção de um cenário de negócio específico e não reutilizado em outro.

Acho que é só isso, no próximo post vamos falar um pouco sobre os aspectos que influênciam na granularidade do serviço.

Links de referência:
http://msdn.microsoft.com/en-us/library/aa480028.aspx
http://blogs.sun.com/alur/entry/soa_service_coarse_or_fine
http://www.oasis-open.org/committees/download.php/19679/soa-rm-cs.pdf

- Fábio Rosato

Responses

[...] 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 [...]

[...] serviços que podem ser encontrados em muitas metodologias de adoção SOA. Esses serviços são de granularidade grossa (course-grained), e normalmente são identificados e definidos pelos usuários do negócio e [...]

[...] como supporting services – algo como serviços de suporte. Esses serviços possuem normalmente granularidade fina (fine-grained), e são associados a aplicações específicas. Em outras palavras possuem o escopo [...]

Leave a response

Your response: