terça-feira, 24 de maio de 2011

SOA Essentials, part 2

Dando sequencia a série de post SOA Essentials, vamos continuar nosso overview sobre SOA conceituando os componentes básicos da arquitetura.

Componentes básicos de SOA

* Service provider: cria o serviço e publica as interfaces para acesso. O provedor de serviços é livre para decidir quais serviços serão disponibilizados, esta avaliação leva em conta aspectos de negócio da empresa;

* Service registry: responsável por implementar o acesso as interfaces oferecidas;

* Service consumer: localiza e consume os serviços das empresas.


Podemos observar que nessa abordagem os componentes do sistema são provedores e/ou usuários de serviços. Esses serviços, por sua vez, são definidos como unidades lógicas de negócio, ou seja, uma funcionalidade do processo de negócio encapsulada como um componente de software.

No que diz respeito ao design dos componens, podemos destacar como características mais importantes:

* Baixo acoplamento e alta coesão: diminui custos de manutenção e impactos em mudanças do processo de negócio e reduz a dependência entre as aplicações;

* Encapsulamento: o acesso a serviços e dados deve ser feito por meio de uma interface bem definida, de forma a deixar transparente todas as manipulações de dados e complexidades de implementação que são irrelevantes ao service customer;

* Neutralidade de tecnologia: consumidores devem acessar os serviços a partir de qualquer tecnologia;

* Serviços stateless: visa diminuir o custo computacional dos componentes de negócio e aumentar o desempenho e disponibilidade dos serviços;

* Reuso: o sucesso na adesão de SOA depende (entre outros fatores) do entendimento dos conceitos de reuso e da criação de componentes reutilizáveis.

Camadas de abstração do modelo SOA

Para melhor compreender, organizar e dividir as necessidades em um ambiente SOA, podemos dividir o modelo de uma arquitetura orientada a serviço em cinco camadas, quais sejam:


1. Camada de aplicação: esta camada identifica e documenta os processos de negócio chave da empresa, os quais são essenciais para sua vantagem competitiva, e que, portanto devem ser acompanhados e monitorados de perto. O modelo mapeia também os processos de suporte, que podem ser delegados ou compartilhados com parceiros e clientes;

2. Camada de Processos: esta camada identifica e documenta os processos de negócio chave da empresa, os quais são essenciais para sua vantagem competitiva, e que, portanto devem ser acompanhados e monitorados de perto. O modelo mapeia também os processos de suporte, que podem ser delegados ou compartilhados com parceiros e clientes;

3. Camada de Serviços: responsável por mapear e expor os serviços que provêem as funcionalidades que dão suporte aos processos de negócio;

4. Camada de Componentes: mapeia os componentes que são utilizados pela camada de serviço. Componentes são os blocos de construção de serviços na arquitetura SOA e embora vários sejam construídos com esta finalidade, a maioria será reaproveitada a partir de aplicações já existentes, através de técnicas de encapsulamento. Grande parte desses componentes tem potencial para se transformarem em serviços;

5. Camada de sistema: onde os recursos como banco de dados, sistemas gerenciadores de filas ou (Manage Queue) estão alocados. Nesta camada, também podemos encontrar aplicações legadas e classes de objetos representando alguns modelos de dados.

Boas práticas de arquitetura

Em seu artigo Enterprise SOA adoption strategies, Steve Jones propõe algumas questionamentos a serem observadas na hora de definir os serviços.

* O quê: definir qual a função que o serviço realmente irá exercer e o escopo definir desse serviço;

* Quem: quem são os consumidores que utilizarão o serviço ou quais são os relacionamentos com outros serviços;

* Porquê: identificar o motivo pelo qual um serviço interage com outro e porque agentes externos interagem com esse serviço;

* Como: os detalhes sobre o processo que coordenará o serviço e também os pormenores sobre o modo como um serviço em si será implementado.

Nos próximos irei aprofundar sobre outros conceitos fundamentais da arquitetura SOA e aprofundar na discussão de boas práticas relacionadas ao SOA.

0/

domingo, 8 de maio de 2011

SOA ainda soa bem?

Semana passada (28/04/2011) fui ao 4th International SOA & Clound Computing Conference, evento muito interessante com várias autoridades internacionais no assunto. Já não é de hoje que escutamos várias coisas sobre o SOA, este modelo arquitetural já caiu no gosto de muitos e também já "traumatizou" outros tantos.

Nem todas as iniciativas para implementação de uma arquitetura SOA tiveram sucesso, muitas vezes pelo não entendimento correto dos princípios do modelo arquitetural ou por um overflow de tecnologias e/ou burocracias para sua implementação. Vou iniciar aqui uma série de post sobre SOA, trazendo à nossa mesa algumas reflexões sobre esse tema. Pretendo iniciar essa discussão definindo alguns aspectos importantes.

SOA essentials, parte 1.

De fato, SOA se tornou uma buzzword e suas idéias muitas vezes deturpadas. Entretanto, esse modelo representa uma mudança radical no modo como o software é criado, reutilizado, gerenciado e vendido.

Hoje, já conseguimos notar que uma parcela significativa de desenvolvedores e arquitetos de software já reconhecem que SOA é muito mais que Web Services. SOA é cada vez mais reconhecida como um elemento chave na transformação dos negócios e não apenas como tecnologia para facilitar integração de sistemas. A proposta desse modelo arquitetural está principalmente focada no retorno de investimento que a empresa irá obter, uma vez que os investimentos em TI são baseados nos objetivos do negócio.

O trabalho colaborativo entre as áreas de negócio e TI visa a criação de um ambiente capaz de suportar modelos de negócio ágeis e dinâmicos, oferecendo maior flexibilidade e permitindo ao "negócio tomar decisões de negócio suportadas pela tecnologia ao invés de tomar decisões de negócio determinadas ou limitadas pela tecnologia"[1].

A adoção desse modelo arquitetural, ao contrario do que muitos acreditam, não necessariamente implica em custos para a empresa. Adquirir uma infraestrutura tecnológica não é pré-requisito para o início da implantação do modelo orientado o serviço. É preferível que a empresa se preocupe primeiramente com planejamento e governança, pois o sucesso da adoção de SOA pode estar ligado a quebra de alguns paradigmas organizacionais.

Conceituando SOA

É importante entender e definir o termo antes de usá-lo. Arquitetura Orientada a Serviços (SOA) é um termo que descreve duas coisas: o primeiro termo se refere à estrutura e o design do software. Podemos definir arquitetura como "modelos e padrões que permitem documentar, facilitar o entendimento e direcionar as diversas dimensões da construção das aplicações"[1].

O segundo termo expressa uma metodologia para desenvolvimento de software: a orientação a serviço. "O termo serviço é usado para designar uma parte distinta de um sistema de computador que gerencia um conjunto de recursos relacionados e apresenta uma funcionalid para usuário e aplicativos" [2]. No contexto SOA, um serviço pode ser definido como tarefas que são repetidas dentro de um processo de negócio. Essas tarefas são potencialmente passíveis de decomposição. Por exemplo, capturar uma ordem de compra, essa tarefa pode ser decomposta em vários serviços menores, que por sua vez podem ser reutilizados em outros processos.

Vejamos algumas definições de SOA:

"Arquitetura orientada a serviços é uma arquitetura de software voltada para a construção de aplicações que implementam processos de negócio ou serviços utilizando um conjunto de componentes "caixa-preta", fracamente acoplados, e orquestrados para prover um nível de serviço bem definido."[3]

"Arquitetura orientada a serviços é uma estrutura (framework) para integrar processos de negócio e a infra-estrutura de TI que o suporta, na forma de componentes seguros e padronizados - serviços - que podem ser reutilizados e combinados para endereçar as mudanças de prioridade do negócio." [3]

"Arquitetura orientada a serviços é um paradigma para organizar e utilizar funcionalidades distribuídas que podem estar sob controle de diferentes domínios de propriedade."[1]


As definições de SOA podem ser adaptadas ao público alvo, ou seja, para o pessoal de negócio, deve-se enfatizar a flexibilidade na disponibilização de novos negócios, baseados em processos e serviços bem definidos. Para o pessoal de tecnologia, deve-se detalhar um pouco os aspectos tecnológicos, para não tornar a definição abstrata ou abrangente demais.

SOA do ponto de vista do negócio: é uma maneira de implementar os processos de negócio da empresa na forma de funções bem definidas, flexíveis e reutilizáveis chamadas de serviços.

SOA do ponto de vista de TI: é uma arquitetura que permite a automação dos processos de negócio da empresa através da orquestração (gerenciamento) de diversos componentes com funções bem definidas, chamados de serviços. SOA se baseia em diversas tecnologias, como Web Services e BPM, priorizando características como aderência a padrões, agilidade, flexibilidade, reutilização, interoperabilidade e alinhamento ao negócio.

Daremos sequência a série de posts "SOA Essentials", onde retomarei a discussão sobre conceitos e práticas relacionadas ao SOA, espero que gostem :D

[1] JUNIOR, Antonio Carlos Benete. Roteiro para a definição de uma arquitetura SOA utilizando BPM. Monografia de MBA em Tecnologia da Informação apresentada a Politécnica da Universidade de São Paulo. Documento digital em formato PDF disponível em: www.pece.org.br/cursos/TI/monografias/MBA-MONO-AntonioCarlosJr.pdf . Acessado em 13 mar, 2009.

[2] Diversos autores. Sistemas distribuídos, Conceitos e Projeto. 4 ed. São Paulo: Bookman, 2007.

[3] Diversos autores. Service Oriented Architecture For Dummies. 1 ed. USA: Wiley Publishing. Inc, 2007.

Let's get it started

Há um bom tempo venho pensando em criar um blog mais "técnico", neste blog pretendo escrever sobre minhas experiências e interesses no mundo da engenharia de software, inovação aberta e empreendedorismo.

Espero que eu traga bons assuntos para serem discutidos aqui.

Seja bem vindo e boa leitura! :D