Baixe o app para aproveitar ainda mais
Prévia do material em texto
SOA — Modelagem, Análise e Design Henrique Shoiti Fugita Kechi Hirama 2012 2 Sumário Capa Folha de rosto Cadastro Copyright Agradecimentos Prefácio Público-Alvo Organização Do Livro Recomendações Ao Leitor 1. Introdução Objetivo 1.1 Visão Geral 1.2 Perguntas Mais Frequentes 2. Entendendo SOA Objetivo 2.1 Definições 2.2 Conceitos Relacionados A SOA 2.3 Princípios De Orientação A Serviços 3 2.4 Solução Orientada A Serviços 2.5 Benefícios E Desafios 2.6 Relação Com Outros Paradigmas 2.7 Considerações Do Capítulo 3. Ciclo de vida SOA Objetivo 3.1 Boas Práticas 3.2 Ciclo De Vida SOA 3.3 Modelagem, Análise E Design 3.4 Papéis 3.5 Artefatos 3.6 Ciclo De Vida Iterativo 3.7 Considerações Do Capítulo 4. Modelagem Objetivo 4.1 Modelagem De Processo As-Is 4.2 Modelagem De Processo To-Be 4.3 Especificação De Requisitos 4.4 Considerações Do Capítulo 5. Análise Objetivo 5.1 Identificação De Serviços Candidatos 5.2 Análise De Gap 5.3 Análise De Realização 5.4 Considerações Do Capítulo 6. Design Objetivo 6.1 Especificação De Contrato De Serviços 4 6.2 Especificação De Realização De Serviços 6.3 Verificação De Princípios 6.4 Considerações Do Capítulo 7. Fases complementares Objetivo 7.1 Construção 7.2 Implantação E Gerenciamento 7.3 Considerações Do Capítulo 8. Considerações finais Objetivo 8.1 Algumas Considerações Referências Bibliografia complementar Apêndice A. Elementos gráficos usados no livro Apêndice B. Estudo de caso B.1 Contexto Do Estudo De Caso B.2 Modelagem B.3 Análise B.4 Design B.5 Fases Complementares Glossário Índice Remissivo 5 Cadastro Preencha a ficha de cadastro no final deste livro E receba gratuitamente informações sobre os lançamentos e as promoções da Elsevier. Consulte também nosso catálogo completo, últimos lançamentos e serviços exclusivos no site www.elsevier.com.br 6 http://www.elsevier.com.br Copyright © 2012, Elsevier Editora Ltda. Todos os direitos reservados e protegidos pela Lei n° 9.610, de 19/02/1998. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônicos, mecânicos, fotográficos, gravação ou quaisquer outros. Copidesque: Ana Paula Bezerra Preparação: Pamela Andrade Revisão: Lara Alves Editoração Eletrônica: Thomson Digital Elsevier Editora Ltda. Conhecimento sem Fronteiras Rua Sete de Setembro, 111 – 16° andar 20050-006 – Centro – Rio de Janeiro – RJ – Brasil Rua Quintana, 753 – 8° andar 04569-011 – Brooklin – São Paulo – SP Serviço de Atendimento ao Cliente 0800-0265340 sac@elsevier.com.br ISBN: 978-85-352-5340-5 ISBN (versão eletrônica): 978-85-352-5460-0 Nota: Muito zelo e técnica foram empregados na edição desta obra. No entanto, podem ocorrer erros de digitação, impressão ou dúvida conceitual. Em qualquer das hipóteses, solicitamos a comunicação ao nosso Serviço de Atendimento ao Cliente, para que possamos esclarecer ou encaminhar a questão. Nem a editora nem o autor assumem qualquer responsabilidade por eventuais danos ou perdas a pessoas ou bens originados do uso desta publicação. 7 mailto:sac@elsevier.com.br CIP-BRASIL. CATALOGAÇÃO-NA-FONTE SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ F969s Fugita, Henrique Shoiti SOA : modelagem, análise e design / Henrique Shoiti Fugita, Kechi Hirama. - Rio de Janeiro : Elsevier, 2012. Apêndices Inclui bibliografia e índice Contém glossário ISBN 978-85-352-5340-5 1. Arquitetura de computador. 2. Tecnologia da informação. 3. Software - Desenvolvimento. 4. Projeto de sistemas. I. Hirama, Kechi. I. Título. 12-2643. CDD: 004.22 CDU: 004.2 8 Agradecimentos Agradeço à minha esposa, a meus pais e irmãos pelo apoio incondicional. Henrique Shoiti Fugita Agradeço aos meus pais (in memoriam), filhos, irmãos, cunhados e sobrinhos pelas alegrias vividas. Kechi Hirama 9 Prefácio O cenário de aplicações de software tem evoluído muito nos últimos anos, acompanhando a crescente necessidade de novas aplicações e de manutenção de soluções existentes. Porém, isso tem exigido novas abordagens de desenvolvimento de software, deixando os paradigmas tradicionais, como a orientação a objetos, insuficientes em entregar soluções adequadas no contexto atual. O que se observa claramente é que cada vez mais o software precisa ser concebido em alto nível de abstração para dar conta de inúmeros requisitos que devem ser atendidos. Se observarmos também a evolução do software juntamente com as abordagens de seu desenvolvimento, poderemos verificar que, no início, nas décadas de 1960 e 1970, o software era apenas uma ferramenta para apoiar alguma rotina de atividade do dia a dia, por exemplo, emissão de relatórios. Visto apenas como uma ferramenta, o software estava desacoplado de uma visão mais ampla da organização. E, assim, progressivamente foi sendo desenvolvido e se proliferando, gerando altos custos de manutenção. Os paradigmas de desenvolvimento de software, notadamente a estruturada e orientação a objetos, surgiram para disciplinar e minimizar seus impactos na organização, ao longo de seu ciclo de vida. Porém, a distância entre as necessidades da organização, ou de negócio, ainda mais exigentes, e as soluções propostas se tornavam maiores. Isto levou à discussão de novas abordagens de desenvolvimento de software. Atualmente fala-se muito em necessidade de alinhamento da Tecnologia da Informação (TI) com as estratégias de negócio, e o paradigma de orientação a serviços tornou-se a forma mais adequada e aceita para esse alinhamento, preservando investimentos através de reuso de aplicações de software. Este livro trata basicamente de tornar esse alinhamento mais simples e produtivo. Para isso, adotou-se uma forma didática para abordar o assunto, desde a conceituação básica de serviço até a sua implementação como um software. O livro traz como tema central a modelagem, a análise e o design, provendo um caminho completo desde a modelagem de negócio até a especificação de serviços, complementado por construção, implantação e gerenciamento de serviços. Esse caminho é um diferencial deste livro em relação às outras publicações semelhantes. Além disso, como o paradigma de orientação a serviços carece de uma padronização, pensamos em prover uma maneira bem embasada e enriquecida de ilustrações para que um leitor, 10 mesmo não experiente em orientação a serviços, possa acompanhar os conceitos e exemplos do livro. A modelagem, a análise e o design são frutos de diversas pesquisas acumuladas em engenharia de software e, mais especificamente, pesquisas que foram feitas ao longo de três anos em orientação a serviços até resultar em uma dissertação de mestrado e dois artigos publicados, sendo um deles publicado em evento nos Estados Unidos (Fugita e Hirama, 2008a e 2008b). Público-alvo Este livro é destinado a estudantes de graduação dos cursos de Engenharia de Computação, Ciência de Computação, Tecnologia de Informação, Sistemas de Informação e outros cursos similares. Para os docentes destes cursos, o livro pode ser usado para aulas teóricas e práticas aproveitando os exemplos ou adaptando os casos desenvolvidos. Outro público que também pode se beneficiar do livro é constituído de gerentes e desenvolvedores de software de empresas de software, que estão realizando projetos com Arquitetura Orientada a Serviços (SOA – Service Oriented Architecture). Organização do livro Este livro está organizado em oito capítulos, mais referências, apêndices e glossário. O Capítulo 1, Introdução, apresenta uma contextualização da modelagem, da análise e do design, e perguntas mais frequentes. No Capítulo 2, Entendendo SOA, é feita uma caracterização do conceito de SOA, necessária para o bom entendimento das fases de modelagem, análise e design. O Capítulo 3, Ciclo de vida SOA, apresenta boas práticas em modelagem, análise e design e uma descrição de ciclo de vida e papéis e artefatos envolvidos. O Capítulo 4, Modelagem, apresentaas atividades de modelagem de processo as-is e to- be e especificação de requisitos de serviços. O Capítulo 5, Análise, apresenta as atividades de identificação de serviços candidatos, análise de gap e análise de realização de serviços. O Capítulo 6, Design, apresenta a especificação de contrato, especificação de realização, verificação dos princípios e revisão dos serviços. O Capítulo 7, Fases complementares, apresenta uma descrição complementar do ciclo de vida SOA para as fases de construção e de implantação e gerenciamento de serviços. O Capítulo 8, Considerações finais, apresenta algumas considerações quanto aos aspectos importantes do livro. Na seção Referências, são apresentadas as referências usadas para a elaboração do livro. Na seção Bibliografia complementar, são apresentadas fontes de leitura interessantes 11 àqueles que queiram se aprofundar no assunto tratado no livro. Na seção Apêndice, são apresentados o Apêndice A – os elementos gráficos usados no livro, e o Apêndice B – um estudo de caso referente a uma instituição bancária, em que as fases descritas no livro podem ser acompanhadas. Na seção Glossário, é apresentada uma lista de termos que são familiares ao assunto do livro. Recomendações ao leitor O livro está organizado de maneira a atender aos diversos tipos de leitores. No entanto, a leitura ficará mais acessível àqueles que tenham noções de orientação a objetos e que tenham alguma familiaridade com o processo de desenvolvimento de software. Aos iniciantes, recomendamos fortemente a leitura desde o início, sem alternar os capítulos. Àqueles que já dominam os conceitos básicos de orientação a serviços, pode-se iniciar pelo Capítulo 3, no qual o ciclo de vida SOA é descrito. À medida que os conceitos estejam bem assimilados, o estudo de caso do Apêndice B pode ser usado para orientar um projeto real de software orientado a serviços em que você esteja envolvido. 12 1 Introdução CONTEÚDO 1.1 Visão geral 1.2 Perguntas mais frequentes Objetivo O objetivo deste capítulo é apresentar uma visão geral sobre o novo paradigma de desenvolvimento de software baseado no conceito de SOA (Service Oriented Architecture) para atender às demandas atuais de novas soluções de forma flexível e com reuso de capacidades de sistemas existentes. Além disso, algumas perguntas mais frequentes da área são respondidas. A TI (Tecnologia da Informação) é a área mais impactante na vida das pessoas e das organizações. O sucesso e o bem-estar de todos dependem das soluções providas pela TI. Então, conhecê-la é importante para estarmos preparados para as novas necessidades que surgem a cada dia. Velhos conceitos e técnicas podem não ser suficientes em face deste cenário. No estágio atual, o paradigma de orientação a serviços traz muitos benefícios e desafios. 1.1 Visão geral Atualmente, cada vez mais as empresas pertencentes às diversas áreas fazem uso da TI para conduzir seus negócios. Por outro lado, devido ao avanço da Internet e das tecnologias de integração e comunicação, é comum as organizações fazerem uso do meio eletrônico para realizar seus negócios com clientes, fornecedores e parceiros. As empresas vêm empregando com mais frequência sistemas de TI no suporte aos seus processos de negócio, com o intuito de automatizar atividades e aumentar a produtividade. As empresas utilizam sistemas de TI como ERP (Enterprise Resource Planning) para controlar sua operação, CRM (Customer Relationship Management) para 13 gerenciar informações sobre o relacionamento com seus clientes, SCM (Supply Chain Management) para gerenciar interações com parceiros, fornecedores e consumidores. Dentro desta infraestrutura de TI, cada sistema possui um conjunto de dados e informações próprio. Devido ao fato de os processos de negócio envolverem diversas áreas da organização, eles passam a demandar funções de mais de um sistema e tornam necessária a troca de informações entre estes sistemas. Principalmente nas organizações de maior porte, esses sistemas de TI constituem ambientes extremamente complexos e heterogêneos, onde as aplicações geralmente fazem uso de diferentes tecnologias, linguagens e protocolos. É comum encontrar em um mesmo ambiente aplicações desenvolvidas com tecnologia Web, softwares de prateleira (COTS – Commercial Off-The-Shelf), proprietários e aplicações legadas em mainframes. Para suportar a comunicação entre elas, são utilizados adaptadores, conectores e middlewares de integração. Os negócios têm se tornado mais dinâmicos, exigindo mais agilidade por parte das organizações e, consequentemente, de suas áreas de TI. É necessário que os sistemas sejam capazes de se adaptar rapidamente às necessidades de negócio, em constante mudança. No entanto, em um ambiente de TI heterogêneo este tipo de mudança é difícil de realizar. Dentro desse cenário, vem se desenvolvendo e sendo aceito o conceito de Arquitetura Orientada a Serviços (SOA). O modelo de referência do OASIS (OASIS, 2006) define SOA como um paradigma para organizar e utilizar competências distribuídas entre vários domínios. Trata-se de um modo de estruturar as aplicações de software em elementos chamados serviços. Com SOA, os sistemas podem ser vistos de forma mais próxima ao negócio da organização. Isto facilita o modo como os sistemas são desenvolvidos e mantidos. A linguagem passa a ser menos técnica, sendo o termo “serviço” a ponte entre os processos de negócio e as funções do sistema de software. Para se trabalhar com SOA não bastam ter conceitos, boas práticas e ferramentas, mas estes devem ser orientados por métodos que permitam atender eficazmente às necessidades da organização. Por outro lado, seguindo os fundamentos de Engenharia de Software, para se desenvolver um serviço, antes de tudo, deve-se fazer uma análise de o quê realmente se pretende automatizar no âmbito do negócio. Assim, para se projetar aplicações que efetivamente sigam o paradigma de orientação a serviços, e para que elas realmente façam uso dos benefícios trazidos pelo paradigma, é necessário haver uma atenção especial na identificação e especificação dos serviços que as compõem. Os serviços que apoiarão os processos de negócio e atenderão aos seus requisitos devem ser definidos de forma adequada, para que apresentem atributos como reusabilidade e flexibilidade e estejam alinhados com as metas de negócio. Além disso, os serviços devem ser especificados de modo a fazer parte de um repositório de serviços reusáveis, que possam ser orquestrados (compostos) em sistemas para apoiar os processos de negócio. Assim, é necessário haver alguma abordagem para, a partir dos requisitos e metas de 14 negócio, identificar e modelar processos relevantes que façam uso de serviços disponíveis na infraestrutura de TI ou de novos serviços a serem desenvolvidos. No caso de novos serviços, esta abordagem deve ser feita por meio de atividades para especificá-los de modo que eles possam ser implementados utilizando técnicas existentes e consolidadas. Tal abordagem deve ser previsível e repetível, conduzindo de maneira consistente as atividades de análise e especificação. De preferência, esse método deve fazer uso de ferramentas e notações amplamente conhecidas para a modelagem e representação das informações e para a geração de artefatos. Assim, a adoção desta abordagem seria facilitada e traria menos impactos aos processos de desenvolvimento já existentes na organização. Portanto, o objetivo deste livro é apresentar a modelagem, a análise e o design de aplicações orientadas a serviços. Tem como propósito disciplinar o procedimento de identificação, análise e especificação de um conjunto de serviços alinhados aos requisitos de negócio e aderentes aos princípios de orientação a serviços. A aplicação destas atividades tem como resultado um grupo de especificações de serviços, que pode ser então implementado utilizando-se técnicas de desenvolvimento convencionais. Tem como atividades a modelagem de negócio, na forma de casos de uso ou modelos de processo de negócio,passando pela identificação e especificação dos serviços que compõem a solução, e tem como produto final os artefatos que compõem a especificação de cada serviço, incluindo sua interface, suas operações e mensagens, e seus requisitos funcionais e não funcionais. Considerando-se o ciclo de vida dos processos de negócio e o ciclo de vida dos sistemas como dois processos distintos, geram-se especificações de serviços a partir dos processos de negócio modelados. Os serviços seriam os elementos responsáveis por realizar a ligação entre negócio e TI, por possuírem características de elementos desenvolvidos pela TI para prover funções de negócio. Há alguns poucos estudos na área de metodologias de desenvolvimento voltados para SOA. Papazoglou e Van Den Heuvel (2006) descrevem as atividades do ciclo de vida dos serviços, que consiste num processo cíclico e iterativo, que passa por modelagem de processos, análise, design, implementação e execução e monitoria. Papazoglou e Van Den Heuvel utilizam a tecnologia de Web Services para especificar e implementar os serviços. A empresa IBM (2007) possui uma contribuição, que é um plugin a ser aplicado ao RUP (Rational Unified Process) para o desenvolvimento de aplicações orientadas a serviços. Este plugin acrescenta uma série de tarefas, papéis e artefatos ao RUP, de modo a adaptá-lo para projetos de aplicações orientadas a serviços. Erl (2005), por sua vez, descreve um método de análise e design de serviços baseado nos princípios da orientação a serviços. Marks e Bell (2006) também propõem um método de desenvolvimento de serviços, focando nas etapas de análise e design. Ainda não existe uma convergência das diversas propostas de métodos em direção a uma padronização, o que deixa o terreno aberto para discussão e apresentação de novas propostas (Ramollari, Dranidis e Simons, 2007). 15 A modelagem, a análise e o design apresentados aqui contêm atividades, papéis e artefatos definidos. Além da descrição das atividades, são apresentados exemplos que auxiliam na sua aplicação. As atividades são apoiadas em ciclo de vida orientado a serviços similar ao de um ciclo de vida de software. Assim, as atividades são inspiradas nas disciplinas de um ciclo de vida de software como o RUP, ou seja, modelagem de negócio, requisitos, análise & design, implementação, testes e implantação. Para isso, adotou-se um ciclo de vida SOA, conforme descrito no Capítulo 3. As atividades de modelagem, análise e design estão embutidas neste ciclo e usam o termo “fase”, que engloba um conjunto de atividades em vez de “disciplina”. As atividades podem ser aplicadas de forma iterativa como no RUP. É importante destacarmos por que modelagem, análise e design são tão importantes em SOA. No ciclo de vida de uma solução orientada a serviços, tudo começa na modelagem de negócio, seja na forma de processos ou mesmo em casos de uso. Modelagem de processos, modelagem de casos de uso e elicitação de requisitos são áreas amplamente exploradas na literatura. Já existem diversas abordagens e técnicas desenvolvidas, mas certas particularidades devem ser consideradas no contexto do ciclo de vida SOA. O mesmo vale para implementação, testes e implantação. No caso de testes, ela requer novas abordagens e técnicas. Atualmente, já existem diversas tecnologias (Web Services, REST, SCA) que orientam a implementação de serviços e ferramentas que tratam da complexidade destas tecnologias. Plataformas e ferramentas atuais permitem, a partir de um contrato formal de serviço, gerar automaticamente um “esqueleto” de código fonte, resumindo a implementação de um serviço à “clássica” codificação da lógica de negócio, podendo ser empregadas técnicas amplamente conhecidas. Diante disso, pode-se dizer que modelar processos e casos de uso é conhecido. O mesmo pode-se dizer também quanto a como implementar serviços a partir de especificações. Porém, resta um “gap” a ser resolvido, que pode ser resumido na seguinte questão: “Como um modelo de negócio deve ser definido e como, a partir dele, chegar a um conjunto de especificações de serviços coeso que seja aderente aos princípios da orientação a serviços?” A resposta está nas fases de modelagem, análise e design, que devem levar em conta que uma solução orientada a serviços exige considerações específicas. Por este motivo, este livro foca nestas fases, apresentando a modelagem, a análise e o design de serviços que partem de um modelo de negócios e entrega como resultado um conjunto de especificações de serviços. 1.2 Perguntas mais frequentes O que é Serviço? É um mecanismo que possibilita o acesso a uma ou mais capacidades de um sistema, onde este acesso é fornecido usando uma interface definida e exercitada de acordo com restrições e políticas, conforme especificado pela descrição do serviço (OASIS, 2006). 16 O que é Orientação a Serviços? É um paradigma de desenvolvimento de sistemas de software que permite o acesso a diversas informações disponíveis em computadores ligados na Internet (Sommerville, 2011). O que é Arquitetura Orientada a Serviços (SOA – Service Oriented Architecture)? É um paradigma para organizar e usar competências distribuídas que podem estar sob controle de domínios diferentes (OASIS, 2006). O que é ciclo de vida de software? É o período de tempo que inicia quando um produto de software é concebido e termina quando o software não é mais disponível para o uso. O ciclo de vida de software tipicamente inclui as fases de concepção, requisitos, design, implementação, teste, instalação e verificação, operação e manutenção e, algumas vezes, retirada de operação (IEEE, 1994). Qual é a diferença entre serviço e objeto de software? Tanto o serviço como o objeto tem propósitos semelhantes. Ambos podem ser acionados para obter dados. Ambos podem ser integrados para compor uma função ou sistema de software. O que difere um do outro é a sua abrangência. O serviço está mais próximo das necessidades de negócio e lida com sistemas de grande porte. O serviço pode ser implementado por objetos ou componentes de software (OASIS, 2006). Qual é a diferença entre SOA e Web Services? SOA é um estilo arquitetural em que sistemas consistem de usuários e provedores de serviços, e Web Services é uma tecnologia que pode ser usada para implementar SOA (Bianco, Kotermanski e Merson, 2007). 17 2 Entendendo SOA CONTEÚDO 2.1 Definições 2.2 Conceitos relacionados a SOA 2.3 Princípios de orientação a serviços 2.4 Solução orientada a serviços 2.5 Benefícios e desafios 2.6 Relação com outros paradigmas 2.7 Considerações do capítulo Objetivo O objetivo deste capítulo é apresentar uma visão geral sobre SOA, as suas características e a visão de alguns autores importantes. São apresentados alguns princípios, solução e benefícios e desafios para trabalhar com este paradigma. Também é apresentada a relação do SOA com outras abordagens. Para falar sobre o paradigma de orientação a serviços, é necessário um entendimento claro do que é SOA e do próprio conceito de serviço em si. Por ser um tema novo que tem ganhado relevância recentemente, não existe ainda um consenso definitivo sobre tais conceitos. Por meio da análise das características do paradigma e das interpretações de alguns autores, este capítulo busca estabelecer um entendimento sobre sua definição. 2.1 Definições Antes de discutirmos a definição de SOA, ou Arquitetura Orientada a Serviços, é necessário compreender o que é a orientação a serviços. Basicamente, a orientação a serviços é um paradigma de construção e integração de soluções de software compostas por elementos modulares chamados serviços. O paradigma baseia-se nos princípios de 18 orientação a serviços, que serão descritos nas próximas seções (Erl, 2007). 2.1.1 O Que É Um Serviço? A palavra serviço pode ser definida como a execução de um trabalho ou realização de uma função de um prestador para um requisitante. No contexto específico de arquitetura de software, o conceito de serviço está ligado à capacidade de um sistema executar umafunção para outro. No contexto de SOA, um serviço tem significado semelhante, já que consiste em um módulo de software capaz de realizar uma função específica quando solicitado por seus consumidores. O serviço, unidade fundamental de uma arquitetura SOA, é uma unidade de software que tem como propósito desempenhar uma função específica e que pode ser fornecido por um provedor e utilizado por um consumidor. Para ser considerado um serviço, uma unidade de software deve apresentar características de design aderentes ao paradigma de orientação a serviços. Um exemplo de serviço é o controle de crédito disponibilizado por uma entidade do tipo SERASA e SPC. Ela pode fornecer informações sobre crédito de pessoas físicas e jurídicas a clientes do tipo bancos. Os bancos podem implementar aplicações de concessões de crédito somente chamando o serviço para receber estas informações. Um serviço é composto por diversas operações. Fazendo uma analogia com a orientação a objetos, as operações estão para um serviço assim como os métodos estão para uma classe. Um exemplo de serviço com suas operações e respectivas entradas (inputs) e saídas (outputs) pode ser visto na Figura 2.1. As operações são invocadas por meio de mensagens. Um cliente envia uma mensagem como parâmetro de entrada para uma operação, a fim de invocá-la. O serviço (por meio de seu provedor/realização) executa a lógica definida em seu contrato e retorna ao cliente uma mensagem de saída com o resultado da lógica executada. Assim, um processo de negócio é um agregado de diversos serviços, conforme pode ser visto na Figura 2.2. As instâncias de um processo executam uma série de operações. Um serviço é composto de um conjunto de operações relacionadas. Uma operação processa os dados recebidos. As mensagens são responsáveis por conduzir os dados necessários de (e para) operações. 19 FIGURA 2.1 Serviço “Funcionário” com suas operações. Observação: Alguns autores utilizam o termo “competência” ou “capacidade” para se referir ao conceito de operação. 20 FIGURA 2.2 Relacionamentos entre os componentes de uma arquitetura SOA. (Erl, 2005) O conceito de serviço é adequado para representar transações que a área de TI (Tecnologia da Informação) oferece para seus clientes e usuários de negócio. Serviço é um conceito facilmente compreendido pela perspectiva de TI e pela de negócio, além de possuir a granularidade apropriada para ser mapeado para atividades automatizadas de um processo de negócio (Marks e Bell, 2005). Devido à sua natureza, os serviços estabelecem um termo comum às linguagens de negócio e de TI, podendo, assim, facilitar a comunicação e o alinhamento entre a área de TI e os usuários/clientes de negócio durante a análise e o design de serviços. Por ser a unidade fundamental de análise do SOA e por possuir correspondência direta com o conceito de processo de negócio, o serviço possibilita uma melhoria na identificação de requisitos de negócio e promove o alinhamento entre as áreas de negócio e de TI. 2.1.2 SOA: Estilo Arquitetural E Arquitetura Já o termo SOA pode ser definido como um estilo arquitetural de software que se baseia no paradigma de orientação a serviços. Segundo esta definição, SOA é um estilo arquitetural que suporta o paradigma de orientação a serviços. Estilo arquitetural é definido como a combinação de características distintas sobre a qual uma arquitetura é realizada ou expressada. Comumente, utiliza-se também o termo arquitetura SOA para designar uma arquitetura de software que segue o estilo arquitetural SOA. Dessa maneira, uma arquitetura SOA possibilita a obtenção de uma infraestrutura para computação distribuída, por meio de serviços que podem ser fornecidos e 21 consumidos dentro de uma organização e entre organizações, por meio de redes de comunicação como a Internet, conforme pode ser visto na Figura 2.3. FIGURA 2.3 Infraestrutura geral criada para fornecimento e consumo de serviços. Para que essa infraestrutura funcione, se existem provedores e clientes de serviços, deve haver uma maneira padronizada para que estes se conheçam. Uma arquitetura SOA é caracterizada pelas interações entre três tipos de agentes de software: os provedores de serviço, os consumidores (ou clientes) de serviço e o registro de serviço (Huhns e Singh, 2005). As interações entre estes agentes podem ser visualizadas na Figura 2.4. 22 FIGURA 2.4 Agentes de uma arquitetura SOA. (Papazoglou, 2003) Assim, os serviços são oferecidos pelos provedores de serviço, agentes responsáveis por desenvolver suas implementações, fornecer suas descrições e prestar suporte técnico e de negócio. De modo geral, os provedores disponibilizam módulos de software (as implementações dos serviços) que podem ser acessados através de uma rede e que publicam suas descrições em um registro de serviços – agente que abriga informações sobre as funções oferecidas, os requisitos para se utilizar o serviço e orientações sobre como realizar a interação com o provedor de serviço. É o registro de serviços que torna estas informações disponíveis para serem consultadas por consumidores em potencial. Por sua vez, os consumidores de serviço são os agentes que necessitam solicitar a execução de um serviço. Os consumidores buscam nos registros a descrição de um serviço que satisfaça às suas necessidades e, ao encontrá-la, utilizam esta descrição para ligar-se ao provedor e realizar a invocação do serviço. Note que os papéis de provedor e consumidor são lógicos, de modo que um mesmo agente pode exibir características de ambos dependendo do contexto (Papazoglou, 2003). Desse modo, uma arquitetura SOA funciona como, por exemplo, uma biblioteca virtual. Alguém (provedor) anuncia que possui determinados livros. Estas informações são catalogadas em uma estante virtual (registro). Um leitor (cliente) procura por um livro fornecendo os seus dados ao registrador. Ao encontrar o livro procurado, descobre que alguém (provedor) possui este livro e se conecta ao provedor para obter o seu conteúdo. 2.1.3 Anatomia De Um Serviço A Figura 2.5 apresenta a estrutura que compõe um serviço. 23 FIGURA 2.5 Anatomia de um serviço. Um serviço é composto por um contrato e uma realização, ou seja, geralmente, um serviço consiste em uma função de negócio desempenhada por um módulo de software (a realização) que é descrito e encapsulado por um contrato bem definido, através do qual o consumidor utiliza este serviço. Assim, os consumidores do serviço não têm acesso aos detalhes de como ele foi construído, mas apenas aos detalhes expostos em seu contrato. O contrato define as funções desempenhadas pelo serviço e eventuais pré-condições para utilizá-lo, mas não revela como estas funções são realizadas. Esta forma de encapsulamento é conhecida como caixa-preta, e é um princípio característico de paradigmas como orientação a objetos e componentização de software. Porém, diferentemente destes, serviços representam funções completas de negócio e são projetados de modo a serem utilizados não somente no âmbito de um programa ou sistema, mas no âmbito da organização ou até entre organizações (Papazoglou, 2003). O contrato de serviço é complementado por uma descrição independente de tecnologia, definindo funcionalidade, propósito, modo de utilização e restrições. As descrições são geralmente armazenadas e disponibilizadas nos repositórios de metadados. A interface de serviço é a definição técnica do contrato. A interface normalmente é representada com o uso de uma linguagem formal, de preferência baseada em padrões abertos. A interface contém as assinaturas das operações do serviço, com seus parâmetros de entrada, de saída e exceções. 24 Os esquemas de mensagens descrevem o modelo e o formato dos dados utilizados como entrada e saída das operações definidas na interface do serviço. As políticas definem os requisitos não funcionais do serviço e restrições de uso. Já os SLAs (Service Level Agreements), ou acordos de nível de serviço, especificam os níveis de desempenho, disponibilidadee capacidade oferecidos pelo provedor aos consumidores do serviço. A realização é a parte que efetivamente executa a funcionalidade definida pelo contrato de serviço. Pelo fato de não ser acessada diretamente pelo cliente (este tem conhecimento apenas de sua interface), a realização pode sofrer modificações de manutenção e evolução, sem que o impacto seja percebido pelo cliente. Uma realização pode ser inclusive substituída sem que ocorra tal impacto. Isto se dá devido ao desacoplamento proporcionado pela interface. Para executar a funcionalidade do serviço, a realização combina lógica e dados. A lógica corresponde às regras de negócio envolvidas na funcionalidade dos serviços e que são executadas pela realização. A lógica, por sua vez, manipula dados, que podem ser fornecidos pelos consumidores (nas mensagens de entrada) ou ser provenientes de aplicações de back-end, como bases de dados e aplicações legadas. 2.1.4 Arquitetura De Referência No contexto de SOA, uma arquitetura de referência é um framework abstrato que permite o entendimento das entidades e relacionamentos significativos entre eles em um ambiente orientado a serviços e para o desenvolvimento de arquiteturas concretas ou de referência, usando padrões ou especificações consistentes que apoiam este ambiente. Tal arquitetura de referência é baseada em conceitos unificados de SOA e pode ser usada por arquitetos que estejam desenvolvendo arquiteturas específicas orientadas a serviços ou treinando ou explicando SOA. A arquitetura de referência não está diretamente associada a quaisquer padrões, tecnologias ou outros detalhes concretos de implementação (The Open Group, 2009). O Open Group é uma organização mundial que desenvolve padrões da área de TI, que produziu uma definição do que é SOA (The Open Group, 2006) e também uma arquitetura de referência para o estilo arquitetural SOA. Conforme a Figura 2.6, segundo a arquitetura de referência, uma arquitetura SOA pode ser interpretada por uma hierarquia com diversos níveis de abstração. Segundo esta hierarquia, uma arquitetura SOA pode ser dividida em diversas camadas, cada qual com sua função e relacionamentos com outras camadas. 25 FIGURA 2.6 Arquitetura de referência SOA. (The Open Group, 2009) A arquitetura de referência é composta por nove camadas, sendo divididas em cinco camadas funcionais que representam os elementos de uma solução orientada a serviços (representadas pelas camadas horizontais: sistemas operacionais, componentes de serviço, serviços, processos de negócio e interfaces consumidoras) e quatro camadas não funcionais que representam aspectos transversais que se aplicam a todas as camadas funcionais (representadas pelas camadas verticais: integração, qualidade de serviço, informação e governança). A camada de sistemas operacionais representa a infraestrutura de TI existente, composta por sistemas e aplicações não orientadas a serviços. De modo geral, esta camada fornece recursos que podem ser reusados por provedores de serviços para implementar contratos de serviços. Nesta camada estão: • aplicações orientadas a objetos (implementadas, por exemplo, em Java e Microsoft .NET); • aplicações implementadas com tecnologias legadas (como cliente-servidor e alta plataforma); • sistemas transacionais; • bases de dados; • aplicações-pacote (como ERPs e CRMs). A camada de componentes de serviço contém componentes de software que proveem as realizações dos serviços, implementando as definições dos contratos e servindo como ponte para os sistemas operacionais. Um componente de serviço pode 26 realizar sozinho um contrato de serviço, ou pode encapsular o acesso a uma aplicação legada (localizada na camada de sistemas operacionais) reusada para realizar o contrato. Nesta camada, podemos ter: • componentes implementados em plataforma compatível com tecnologias de implementação de serviços (por exemplo, plataformas Java e .NET que suportam Web Services); • mediações que encapsulam o acesso a um sistema operacional e o disponibiliza por uma interface de serviço. A camada de serviços representa todos os serviços definidos em uma arquitetura SOA e contém os contratos dos serviços e os metadados que os descrevem. É esta a camada que provê a interface entre provedores e consumidores de serviço, pois fornece uma abstração dos contratos publicados pelos provedores que podem ser descobertos pelos consumidores e possibilita a interação entre eles. A camada de processos de negócio contém a lógica de negócio, que é realizada por meio de processos de negócio. Os processos de negócio, por sua vez, podem ser realizados por serviços compostos que orquestram a execução de outros serviços ou por plataformas BPMS (Business Process Management Systems) que executam fluxos de processo. Esta camada é responsável por gerenciar e executar os fluxos de trabalho de cada processo de negócio e possibilitar a participação de pessoas na execução de tarefas humanas. A camada de interfaces consumidoras representa os canais através dos quais a funcionalidade dos serviços e processos de negócio é disponibilizada para os usuários finais. Esta camada contém interfaces e aplicações de front-end, como: • plataformas de portal e mashups; • formulários eletrônicos; • aplicações Web; • aplicativos desktop; • aplicativos móveis. Através das interfaces consumidoras, os usuários poderão: • iniciar instâncias de processos de negócio; • executar tarefas humanas dos processos de negócio; • acompanhar o andamento de uma instância de processo de negócio; • invocar operações de serviços; • executar casos de uso que envolvem tarefas de processos e operações de serviços. A camada de integração é fundamental para uma arquitetura SOA, pois é a que possibilita a comunicação entre os elementos nas cinco camadas funcionais (provedores e consumidores de serviços). Esta camada contém componentes capazes de executar funções de mediação, como roteamento de mensagens, transformação de formato de dados e conversão de protocolos de comunicação. A camada de qualidade de serviço é a responsável por assegurar aderência a políticas, SLAs e requisitos não funcionais definidos nos contratos de serviços. E contém ferramentas e agentes que permitem a monitoração dos serviços e a captura de métricas e eventos. Por meio destes, a camada de qualidade de serviço provê desempenho, 27 confiabilidade, disponibilidade, escalabilidade e segurança às camadas funcionais da arquitetura de referência. A camada de informação representa a arquitetura de informação da organização, provendo aos usuários e gestores do processo acesso e análise dos dados dos processos de negócio e serviços. Nesta camada, atuam tecnologias de business intelligence, monitoração e análise de dados de processo. A camada de governança tem o objetivo de garantir que os serviços e elementos das demais camadas funcionais sejam aderentes aos padrões, modelos e orientações da organização. Esta camada provê o gerenciamento do ciclo de vida dos serviços e pontos de controle para verificação de conformidade com os padrões. 2.1.5 Tecnologias De Implementação Para implementar uma arquitetura SOA, diversas plataformas tecnológicas podem ser utilizadas. Uma das mais difundidas para implementação de serviços é a tecnologia Web Services. A tecnologia Web Services consiste em um conjunto de padrões abertos que possibilita a comunicação entre duas aplicações através da Web. Por ser baseada em padrões abertos, que são amplamente aceitos e suportados por entidades internacionais como o OMG (Object Management Group) e a W3C (World Wide Web Consortium), a tecnologia Web Services promove a interoperabilidade, pois permite a interação entre aplicações desenvolvidas em diferentes linguagens de programação, plataformas de middleware e sistemas operacionais. Um Web Service pode ser definido como um componente de software que possui uma interface separada de sua implementação, expondo para seus consumidores somente sua interface e abstraindo detalhes de implementação. Um cliente se comunicacom um Web Service para fazer invocações através de troca de mensagens, definidas em sua interface, conforme a Figura 2.7. FIGURA 2.7 Web Service. (Erl, 2007) A tecnologia Web Services é fundamentada na linguagem XML (eXtensible Markup 28 Language) (Bray et al., 2006), utilizada para a representação dos dados e como base para os outros padrões. Os padrões fundamentais da tecnologia Web Services são: • WSDL (Web Service Definition Language) – linguagem baseada em XML para definição formal de interfaces de serviços; • SOAP (Simple Object Access Protocol) – protocolo de comunicação baseado na troca de mensagens em formato XML transmitidas via HTTP ou outros protocolos; • UDDI (Universal Description, Discovery and Integration) – especificação de registro de serviços publicados e descoberta de interfaces de serviços em WSDL. Além dos padrões fundamentais, uma série de outros padrões foram definidos com o objetivo de prover qualidade de serviço às interações com Web Services: • WS-Policy – padrão para definição formal de políticas de serviços; • WS-Security – permite a aplicação de mecanismos de segurança a mensagens SOAP, como autenticação, assinatura digital e criptografia; • WS-AtomicTransaction – padrão que possibilita a coordenação de transações distribuídas envolvendo Web Services; • WS-ReliableMessaging – protocolo para assegurar a entrega de mensagens SOAP com tolerância a falhas de comunicação; • WS-Notification – possibilita implementar soluções orientadas a eventos, através da notificação de eventos entre Web Services; • WS-Addressing – padrão para a especificação de dados de endereços físicos de Web Services para roteamento de mensagens SOAP; • WS-I Profiles – orientações definidas pela organização WS-I (Web Services Interoperability) com o intuito de garantir a interoperabilidade entre Web Services implementados em diversas plataformas. Apesar de ser comum a implementação de serviços através do uso de Web Services, é importante ressaltar que uma arquitetura SOA não se limita a um ambiente de computação distribuída utilizando Web Services, mas também deve seguir os princípios de orientação a serviços (veja mais detalhes na Seção 2.3). Além da tecnologia Web Services, vem ganhando espaço o uso da tecnologia REST (REpresentational State Transfer) na implementação de serviços. Serviços implementados na tecnologia REST são chamados de serviços RESTful (RESTful services ou RESTful web services). Apesar de ser considerada uma tecnologia mais simples do que Web Services para implementação de serviços, ainda não há um consenso sobre como se realizar completamente os princípios de orientação a serviços utilizando as tecnologias relacionadas ao REST. 2.2 Conceitos relacionados a SOA Nesta seção, são descritos alguns conceitos importantes relacionados ao paradigma de orientação a serviços: a granularidade de serviço, as camadas de serviços, as composições de serviços e o portfólio de serviços. 29 2.2.1 Granularidade De Serviço Granularidade é um aspecto importante para se determinar o escopo de um serviço. Ao se identificar um serviço, deve-se determinar se ele possuirá baixa granularidade (serviço técnico ou de baixo nível) ou alta granularidade (serviço de negócio ou de alto nível). A granularidade depende de quanta funcionalidade é encapsulada por um serviço, sendo que, quanto mais funcionalidade, mais abrangente é o escopo do serviço e mais alta é sua granularidade. Serviços de granularidade mais alta são utilizados diretamente pelo negócio e podem ser formados pela composição de serviços de granularidade mais baixa. Segundo a interpretação da empresa IBM (Bieberstein et al., 2005), os dois tipos de serviços são necessários. Uma arquitetura SOA deve conter serviços diretamente relacionados e com alto valor para o negócio e serviços técnicos que encapsulam lógica com alto potencial de reuso. Os serviços de granularidade mais alta terão menos consumidores, mas agregarão mais valor para o negócio. Eles terão também alta dependência em relação a serviços de granularidade baixa, que, por sua vez, terão alto potencial de reuso e terão baixa dependência com outros serviços. Já Marks e Bell (2006) afirmam que serviços devem possuir alta granularidade e representar funções, processos e transações de negócio, encapsulando demais componentes de baixa granularidade. Segundo estes autores, serviços de baixa granularidade, como componentes de software, teriam pouca utilidade direta para o negócio. Por isso, eles não compensariam o overhead (custos adicionais) de se transformar em um serviço e deveriam ser encapsulados por serviços maiores. 2.2.2 Camadas De Serviço O paradigma de orientação a serviços pode trazer uma abstração entre a lógica de negócio e a infraestrutura de TI, gerando um desacoplamento entre os processos de negócios e a arquitetura de sistemas de informação. De acordo com a arquitetura de referência, em uma arquitetura SOA, a camada de serviços dá suporte tecnológico aos processos de negócio de uma organização, e localiza-se exatamente entre a camada de processos de negócio e a infraestrutura de aplicações de TI, representada pelas camadas de componentes de serviço e de sistemas operacionais (Erl, 2005). A camada de serviços cria uma abstração entre os requisitos do negócio e as soluções providas pela TI (Bieberstein et al., 2005), conforme mostra a Figura 2.8. 30 FIGURA 2.8 Camadas de uma arquitetura SOA. (Erl, 2005) Baseado no princípio de composição e no Design Pattern Service Layers (Camadas de Serviços) (Erl, 2009), é possível dividir a camada de serviços em mais três subcamadas de abstração que determinam o tipo e a granularidade dos serviços. Assim, temos: a subcamada de serviços de tarefa, a subcamada de serviços de entidade e a subcamada de serviços utilitários. Na Figura 2.9, pode ser visualizada a hierarquia das subcamadas de serviços. 31 FIGURA 2.9 Camadas de serviços. (Erl, 2005) Os serviços utilitários possuem menor granularidade e representam os serviços de infraestrutura de uma arquitetura SOA, oferecendo funções específicas de tecnologia. O propósito dos serviços utilitários é prover funções reusáveis e processar dados contidos em sistemas legados e novas aplicações desenvolvidas. Serviços utilitários são agnósticos, ou seja, independentes de áreas ou domínios de negócio. Por esse motivo, são reusáveis em diversos processos, podendo ser comuns à organização como um todo. Eles representam serviços de TI, como segurança, auditoria, notificação, transformação de dados, entre outros. Os serviços utilitários proveem a infraestrutura de apoio aos outros serviços. Os serviços de entidade proveem acesso às entidades pertencentes ao modelo de dados da organização, por exemplo, cliente, pedido de venda, produto etc. Geralmente suas operações representam funções de acesso a dados, como busca, inserção, atualização e deleção. Serviços de entidade são considerados agnósticos, pois não são vinculados a nenhuma aplicação ou processo específico. Por consequência, possuem alto potencial de reuso, uma vez que proveem funções aplicáveis a diversos contextos. É importante que os serviços de entidade estejam alinhados ao modelo de dados corporativo ou à arquitetura de informação da organização. Os serviços de tarefa representam a lógica contida em uma tarefa de processo de negócio. Geralmente, possuem granularidade mais alta e atuam como controladores de composições de serviços de entidade, utilitários ou outros serviços de tarefa para 32 implementar a lógica de negócio. Os serviços de tarefa refletem eventos relativos aos processos de negócio. A execução de um serviço de tarefa pode ser associada à realização de uma função ou atividade de um processo. Estes serviços possuem alta granularidade e representam conceitos reais de negócio, como abrir nova conta, analisar crédito ou aprovar solicitação. Estes são exemplos de eventos reais que podem ser executados por uma pessoa (um atendente, por exemplo), por um sistema ou por um serviço de tarefa. Um tipoespecífico de serviço de tarefa, os serviços de tarefa orquestrada realizam a ligação entre os processos de negócio e outras camadas de serviço. O conceito de orquestração baseia-se na construção de processos de negócio a partir da composição de diversos serviços, por exemplo, utilizando uma linguagem de orquestração como o WS- BPEL (Web Services Business Process Execution Language) (OASIS WS-BPEL TC, 2007). Trata-se de uma linguagem para se especificar o fluxo de trabalho e lógica de negócio envolvidos nas chamadas Web Services. Nesta camada estão os serviços de processo, que possuem alta granularidade e representam processos de negócio completos, encapsulando a lógica de processamento necessária para coordenar a execução de diversos serviços. 2.2.3 Composições De Serviços Uma composição de serviços é um conjunto de serviços agregados com o intuito de automatizar uma determinada tarefa complexa ou processo de negócio. Um serviço composto é aquele que possui, pelo menos, uma operação composta, sendo uma operação composta aquela cuja lógica inclui invocações a outras operações de outros serviços. No exemplo da Figura 2.10, o Serviço A é um serviço composto, pois sua Operação A forma uma composição das operações Operação B do Serviço B e Operação C do Serviço C. 33 FIGURA 2.10 Exemplo de composição de serviços (Serviço A composto pelos Serviços B e C). Inclusive, o princípio de orientação a serviços “Facilidade de Composição” orienta que os serviços devem ser projetados e construídos de forma que possam participar de composições (Erl, 2007). 2.2.4 Portfólio De Serviços Um portfólio de serviços consiste em um conjunto de serviços que, de forma coletiva, representam funções lógicas de uma organização ou domínio. Serviços pertencentes a um mesmo portfólio devem formar um conjunto coeso onde as funções de um serviço complementam os demais e todos os serviços seguem os mesmos padrões de design, realização e implementação. Uma organização pode possuir um único portfólio de serviços compartilhados entre todas as áreas, ou pode possuir diversos portfólios de serviços de domínio para cada área (Erl, 2007). Um portfólio de serviços pode ser definido em uma única iniciativa, ou pode ser desenvolvido incrementalmente através de diversos projetos de soluções orientadas a serviços. Na definição “do zero”, o portfólio de aplicações e processos de negócio da organização é analisado de modo a se identificar os serviços. Atividades de modelagem, análise e design orientados a serviços são conduzidas de forma a se obter um portfólio de serviços aderente aos princípios do paradigma de orientação a serviços. Esta abordagem garante um conjunto inicial de serviços coeso e aderente ao paradigma, que pode necessitar modificações conforme os requisitos de negócio sofram mudanças. No entanto, esta abordagem pode mostrar-se inviável em muitos casos por exigir um alto investimento inicial. Na abordagem incremental, a cada projeto de implementação de aplicações ou automação de processos, novos serviços podem ser adicionados ao portfólio, ou serviços já existentes podem ser modificados. É uma abordagem com menor custo inicial, já que o esforço é diluído ao longo dos vários projetos. Não exige a execução de um projeto exclusivo de modelagem, análise e design de serviços. Porém, pode impor um custo 34 adicional relacionado ao impacto de eventuais mudanças em serviços já existentes no portfólio. Pode exigir um esforço de governança e versionamento para gerenciar tais mudanças. 2.3 Princípios de orientação a serviços Segundo Erl (2005), o paradigma de orientação a serviços pode ser descrito a partir de uma série de princípios que devem ser seguidos na construção de uma arquitetura: contrato padronizado, reusabilidade, baixo acoplamento, abstração, capacidade de composição, autonomia, independência de estado, visibilidade, capacidade de composição e interoperabilidade. A seguir, estes princípios serão descritos com mais detalhes. 2.3.1 Contrato Padronizado Um serviço deve possuir um contrato bem definido que descreva para o mundo externo a funcionalidade por ele exposta e ao mesmo tempo encapsule os detalhes específicos de sua implementação (Marks e Bell, 2006). O contrato representa um acordo formal firmado entre o provedor do serviço e seus consumidores, criando uma relação de dependência. Por isso, deve haver uma atenção especial na manutenção e versionamento destes contratos. O contrato do serviço disponibiliza as seguintes informações aos consumidores: a localização do serviço, as operações executadas, as mensagens de entrada e saída utilizadas pelo serviço e as regras para sua utilização (Erl, 2005). Podem conter também detalhes semânticos (significados) das operações do serviço. Contratos de serviço devem ser representados em uma linguagem ou notação bem definida, seguindo padrões abertos que garantam a interoperabilidade do serviço. Por exemplo, no contexto de Web Services, contratos de serviço são definidos por interfaces de serviço em WSDL (Web Services Description Language), esquemas de mensagens na linguagem XSD (XML Schema Definition) e políticas. Em um documento WSDL, são especificados os tipos de dados envolvidos, as mensagens e as operações do serviço. Já os esquemas XSD são a especificação dos tipos de dados e das mensagens XML que serão utilizadas. 2.3.2 Reusabilidade A orientação a serviços visa tornar cada serviço reusável, mesmo que não haja requisitos específicos para um dado serviço no momento em que ele é desenvolvido (Erl, 2005). Serviços reusáveis são aqueles que podem possuir valor em diversos contextos de processos de negócio e em interações intra e interorganizacionais e, por isso, devem suportar diversos padrões de consumo destes serviços. Devido a esta natureza, novos clientes podem reusar um serviço de uma maneira que não foi prevista em seu projeto original. Nestes casos, deve haver uma infraestrutura de gerenciamento e governança de 35 serviços que garanta o desempenho e o devido funcionamento de tal serviço (Marks e Bell, 2006). Os serviços devem ser projetados considerando-se as várias formas de reuso, como transações entre aplicações, composição de serviços e processos de negócio e uso como serviços utilitários. A reusabilidade de um serviço é relacionada à sua granularidade, sendo que, quanto mais alta a granularidade de um serviço menores são as possibilidades de ele ser usado em mais de um processo de negócio. Por exemplo, um serviço de gerenciar contas de clientes possui uma granularidade mais alta do que o serviço cadastrar clientes. As possibilidades de reuso do segundo serviço são maiores do que o primeiro, que pode implementar especificidades de uma organização. Além da granularidade, outro fator que afeta a reusabilidade de um serviço é a lógica que ele executa. Quanto mais agnóstica for a lógica de um serviço, isto é, quanto menos específica ela for com relação a um determinado contexto de aplicação, maior será sua reusabilidade. Caso um serviço possua características específicas de um processo de negócio ou contexto de aplicação, sua utilização em outras situações ou por outros consumidores fica limitada. 2.3.3 Baixo Acoplamento Uma característica importante de serviços em uma arquitetura SOA é a de que eles devem possuir baixo acoplamento entre si, ou seja, devem ser fracamente acoplados (baixa dependência). No entanto, na literatura, o termo baixo acoplamento pode possuir vários significados práticos. Um serviço fracamente acoplado pode significar um serviço cuja implementação pode ser substituída, modificada ou evoluída ao longo do tempo sem causar impactos aos consumidores do serviço (Marks e Bell, 2006). Nesse caso, está-se referindo ao acoplamento entre a implementação do serviço e seus Consumidores. Nessa mesma linha, baixo acoplamento pode ser indicado pela transparência de localização. Por exemplo, um serviço pode ser consumido independentemente de onde seu provedor está fisicamente localizado, criando um desacoplamento entre consumidor e provedor(Papazoglou, 2003). De maneira geral, o baixo acoplamento é uma condição em que um serviço está ciente da existência de outros serviços, mas ainda é independente deles (Erl, 2005). 2.3.4 Abstração Um princípio importante na orientação a serviços é a abstração ou encapsulamento da lógica interna de um serviço por meio de sua interface. Ao separar interface de implementação, o serviço age como uma caixa preta e expõe aos seus consumidores somente informações sobre as operações disponíveis. A granularidade de um serviço está diretamente relacionada com a quantidade de funcionalidade que é encapsulada pelas operações de um serviço (Erl, 2005). Quanto 36 mais funcionalidade é encapsulada em um serviço, mais alta a granularidade deste serviço. 2.3.5 Autonomia Autonomia exige que a lógica de processamento encapsulada por um serviço fique restrita dentro de certa fronteira estabelecida, o que evita a dependência com relação a outros serviços. Isto permite que um serviço tenha controle total sobre sua própria lógica e possa exercer um tipo de autogovernança (autocontrole). A autonomia de um serviço pode ocorrer em dois níveis diferentes (Erl, 2005): no nível do serviço e autonomia pura. Na autonomia no nível do serviço, os limites entre os serviços são distintos, mas eles ainda podem compartilhar recursos encapsulados, como bases de dados e sistemas legados. Este cenário é comum, por exemplo, em diversos serviços desenvolvidos a partir de uma mesma aplicação já existente. Neste caso, os serviços compartilham a aplicação, mas fazem uso dela de maneira independente. Na autonomia pura, a lógica e os dados encapsulados estão sob completo controle do serviço, não sendo compartilhados com outros. 2.3.6 Independência De Estado Um serviço deve evitar armazenar informações de estado e contexto ou minimizar o período de tempo que estas informações serão mantidas (Erl, 2005). Isso quer dizer que a resposta do serviço para uma mensagem deve ser independente das mensagens anteriores processadas pelo serviço. Dependência de contexto ou de estado diminui o potencial de reuso do serviço. Além disso, enquanto o serviço retiver informações de estado de um consumidor, ele se torna indisponível para atender chamadas de outros consumidores. Para tornar um serviço o mais independente possível de estado, as mensagens devem ser inteligentes, isto é, deve ser adicionado às mensagens o máximo de informação para que elas se tornem autossuficientes e possam ser processadas sem a necessidade de dados de estado. 2.3.7 Visibilidade Os serviços devem ser visíveis, o que significa que seus contratos devem ser publicados e disponibilizados de modo que possam ser descobertos e acessados pelos potenciais consumidores. Na arquitetura SOA básica, estas interfaces são publicadas em um registro de serviços, de onde elas podem ser buscadas pelos consumidores (Marks e Bell, 2006). 2.3.8 Capacidade De Composição Serviços devem possuir capacidade de composição, isto é, devem ser projetados de forma que possam participar de composições com outros serviços, formando serviços 37 compostos, ou ser orquestrados (compostos) no contexto de um processo de negócio. Para isso, os serviços devem ser os mais desacoplados possíveis e suas operações devem ser as mais atômicas possíveis (Marks e Bell, 2006; Erl, 2005). 2.3.9 Interoperabilidade Serviços devem ser interoperáveis, isto é, deve ser possível interagir com um serviço independentemente da tecnologia empregada em sua implementação. Quaisquer que sejam a linguagem de programação, a plataforma ou o sistema operacional utilizado na construção dos provedores, clientes e registros de serviços, as interações entre eles devem ser possíveis. Para isso, estas interações devem ser realizadas utilizando-se padrões e protocolos abertos compatíveis com qualquer tecnologia ou plataforma. Por isso, em uma arquitetura SOA, a provisão e o consumo de serviços ocorrem de maneira transparente às tecnologias e linguagens utilizadas em sua implementação, garantindo a interoperabilidade entre serviços. Atualmente, os padrões relacionados à tecnologia Web Services permitem a descrição de interfaces, a troca de mensagens e a busca por serviços de maneira neutra com relação às plataformas e linguagens utilizadas. Observação: Apesar de não ser considerada por alguns autores um princípio propriamente dito, a interoperabilidade é listada nesta seção, pois descreve uma característica de design que os serviços devem possuir e que é fundamental para o paradigma de orientação a serviços. 2.4 Solução orientada a serviços Em essência, toda solução de software é concebida para realizar algum tipo de automação. No contexto de SOA, uma solução de software orientada a serviços consiste em um conjunto de serviços e composições de serviços que automatizam um processo de negócio. A lógica de um processo de negócio é encapsulada em um serviço de orquestração, que, por sua vez, é composto por outros serviços de tarefa, entidade e utilitários. Além dos serviços em si, uma solução orientada a serviços é composta por elementos que dão suporte à automação do processo de negócio. 2.4.1 Elementos Uma solução orientada a serviços consiste em uma aplicação composta por diversos elementos que, integrados, automatizam um processo de negócio. Os elementos de uma 38 solução orientada a serviços distribuem-se nas camadas da arquitetura de referência SOA, conforme a Figura 2.11. FIGURA 2.11 Elementos de uma solução orientada a serviços. Na camada de interfaces consumidoras, temos as interfaces através das quais os usuários poderão interagir com os processos de negócio e com os serviços da solução orientada a serviços. Na camada de processos de negócio, temos os fluxos de processo sendo orquestrados por uma plataforma BPMS ou por um serviço de tarefa orquestrada, que encapsula a lógica do processo e é composto por outros serviços. Um processo de negócio de lógica complexa pode ser dividido em subprocessos. Na camada de serviços, a solução conta com um conjunto de serviços identificados a partir do portfólio para suportar os processos de negócio e interfaces consumidoras. Em uma solução orientada a serviços, pode haver serviços simples e compostos, pertencentes às camadas de serviços de tarefa, de entidade e utilitários. Os serviços são realizados por elementos contidos na camada de componentes de serviço. Para realizar um serviço, podem ser utilizados componentes de serviço desenvolvidos sob medida para implementar seu contrato, ou mediações para possibilitar 39 o reuso de recursos existentes. Na camada de sistemas operacionais, temos os recursos existentes, que podem ser bases de dados ou aplicações legadas acessadas por componentes de serviços e mediações. Nesta camada podem ser incluídos também os provedores de serviços externos (cloud service providers) da organização. 2.4.2 Ferramentas Ao se implementar uma arquitetura SOA, torna-se necessária uma infraestrutura tecnológica para dar suporte aos diversos tipos de elementos que compõem uma solução orientada a serviços e atender aos requisitos de cada camada da arquitetura de referência. As ferramentas utilizadas para suportar cada elemento da solução são: • interfaces consumidoras – servidores de aplicação (com suporte a aplicações Web), servidores de portais, ferramentas de desenvolvimento (com suporte a aplicações Web e aplicações de portal); • processos de negócio – plataformas BPMS, barramentos de serviços, ferramentas de desenvolvimento (com suporte a modelagem de processos e orquestração de serviços); • mediações – barramentos de serviços, adaptadores de integração, ferramentas de desenvolvimento (com suporte a implementação de mediações); • componentes de serviços – servidores de aplicação (com suporte a tecnologias de serviços), ferramentas de desenvolvimento (com suporte a implementação de componentes de serviço). Além das ferramentas que dão suporte aos elementos funcionais de uma solução orientada a serviços, a infraestrutura de TI pode contar com outrasferramentas para atender à arquitetura SOA como um todo: monitores de atividade de negócio (BAM), monitores de serviços, registros de serviços, repositórios de metadados e ferramentas de infraestrutura de aplicações. Servidor de aplicação O servidor de aplicação é o ambiente de execução responsável por executar os componentes de serviço e alguns tipos de interfaces consumidoras (aplicações Web), conforme pode ser visto na Figura 2.12. Deve suportar tecnologias de implementação de serviços, como Web Services ou REST. 40 FIGURA 2.12 Servidor de aplicação. Para abrigar interfaces consumidoras, o servidor de aplicações deve suportar a execução de aplicações Web. Atua nas camadas de serviços, componentes de serviço, sistemas operacionais e interfaces consumidoras. Plataforma BPMS Uma plataforma BPMS (Business Process Management System), ou plataforma de orquestração de processos, é um container capaz de executar processos de negócio definidos na forma de modelos de processo, conforme a Figura 2.13. Uma plataforma BPMS pode suportar a composição de serviços na execução das tarefas do processo. 41 FIGURA 2.13 Plataforma BPMS. A plataforma pode suportar também a orquestração de tarefas humanas (como os sistemas de workflow), isto é, gerenciar a participação de pessoas na execução de tarefas de um processo de negócio. Atua nas camadas de processo e integração. Barramento de serviços (ESB) O barramento de serviços, ou ESB (Enterprise Service Bus), é um middleware que possibilita a comunicação entre vários elementos de uma solução orientada a serviços, conforme pode ser visto na Figura 2.14. O objetivo principal do ESB é permitir a construção de serviços a partir de aplicações legadas, através das mediações. 42 FIGURA 2.14 Barramento de serviços. O ESB permite que um ambiente heterogêneo com diversas tecnologias e protocolos de comunicação possam se conectar em uma arquitetura SOA. O barramento pode adicionalmente prover funções como segurança, tolerância a falhas, transações distribuídas, auditoria, acesso unificado a diferentes modos síncronos e assíncronos, escalabilidade, entre outros (Keen et al., 2005). Atua nas camadas de serviço, componente de serviço, integração e qualidade de serviço. Adaptadores de integração Adaptadores de integração são ferramentas que possibilitam a comunicação com aplicações legadas ou sistemas proprietários por meio de protocolos de comunicação e formatos de dados que não são abertos nem padronizados, conforme a Figura 2.15. Os adaptadores facilitam a construção de serviços a partir de aplicações legadas, pois abstraem a complexidade de se lidar com protocolos e interfaces de programação (APIs – Application Programming Interfaces) proprietárias. 43 FIGURA 2.15 Adaptador de integração. Atua nas camadas de componentes de serviço e integração. Portal Um portal é um container de aplicações Web baseadas em páginas e aplicativos Web chamados portlets, conforme pode ser visto na Figura 2.16. Sua principal função é prover uma interface entre os usuários e os processos de negócio e serviços. 44 FIGURA 2.16 Portal. É através do portal que os usuários poderão verificar suas caixas de entrada de tarefas, executar as tarefas humanas de processos, preencher e visualizar formulários, monitorar as métricas e indicadores do processo e acessar aplicações Web que utilizam serviços. Atua na camada de interfaces consumidoras. Monitor de atividade de negócio (BAM) É uma ferramenta responsável por capturar eventos dos processos de negócio e coletar valores de métricas que permitam aos usuários e gestores monitorar em tempo real o desempenho dos processos de negócio, implementando o conceito de BAM – Business Activity Monitoring, conforme a Figura 2.17. Geralmente, os monitores proveem painéis para exibição de métricas e indicadores de desempenho (KPIs – Key Performance Indicators). Podem também fazer uso de tecnologias de Business Intelligence e Data Warehousing para possibilitar a geração de relatórios e a realização de análises baseadas em dados de histórico e predições. Atua na camada de arquitetura de informação. 45 FIGURA 2.17 Monitor de atividade de negócio. Registro de serviços Um registro de serviços é uma base de dados que provê informações sobre os serviços em uma arquitetura SOA, conforme a Figura 2.18. O registro de serviços contém informações como: • descrições de serviços e suas operações; • interfaces de serviços e esquemas de mensagens; • especificações de políticas de serviços e SLAs; • endereços físicos de serviços. 46 FIGURA 2.18 Registro de serviços. Em implementações de SOA com Web Services, registros de serviços são comumente construídos baseados no padrão UDDI, de modo a funcionar como um catálogo de endereços físicos de serviços. Um barramento de serviços pode consultar um registro de serviços em tempo de execução, para obter os endereços físicos e realizar o roteamento dinâmico de mensagens de serviços. Atua nas camadas de serviços, integração e governança. Repositórios de metadados Em uma arquitetura SOA, um repositório de metadados é uma base de dados utilizada para armazenar metadados de serviços e artefatos relacionados, conforme a Figura 2.19. Alguns exemplos de metadados e artefatos armazenados por um repositório são: • versão do serviço; • status do ciclo de vida; • descrições de contratos de serviços; • especificações de realização de serviços; • especificações de SLA; • código fonte; • modelos de análise e design; • relacionamentos e dependências entre os serviços. 47 FIGURA 2.19 Repositório de metadados. Potenciais consumidores consultam um ou mais repositórios para obter informações sobre serviços, que podem satisfazer suas necessidades, e sobre como acessá-los (o contrato do serviço). Para isso, um repositório pode prover funções de busca de serviços. Alguns registros são capazes de gerenciar o ciclo de vida dos serviços, servindo como ferramenta de governança. Atua nas camadas de serviços e governança. Monitor de atividade de serviços (SAM) É uma ferramenta responsável por coletar valores de métricas operacionais dos serviços, implementando o conceito de SAM – Service Activity Monitoring, conforme pode ser visto na Figura 2.20. O monitor SAM diferencia-se do monitor BAM por focar em aspectos operacionais dos serviços e ser voltado para administradores de serviços e operadores, enquanto o BAM é voltado para monitoração de dados de negócio e é destinado a usuários finais dos processos de negócio. 48 FIGURA 2.20 Monitor de atividade de serviços. O monitor de serviços deve registrar valores de métricas como tempo de resposta de operações, tamanho e quantidade de mensagens, número de mensagens processadas por período de tempo e disponibilidade, exibindo tais dados em painéis para os administradores de serviços. Monitores de serviços proveem mecanismos para assegurar o desempenho dos serviços e o cumprimento de SLAs, possibilitando a geração de alertas e automação de ações corretivas. Além disso, os monitores de serviços podem prover informações sobre o uso dos serviços e da capacidade dos recursos, apoiando a governança dos serviços. Atua nas camadas de qualidade de serviço, arquitetura de informação e governança. Ferramentas de desenvolvimento e testes A construção de uma solução orientada a serviços, com diferentes tipos de elementos que devem ser integrados, geralmente demanda a utilização de ferramentas específicas. Existem atualmente diferentes ambientes de desenvolvimento integrados (IDEs – Integrated Development Environments), conforme a Figura 2.21, específicos para implementar e testar: • componentes de serviços (com suporte a diferentes linguagens de programação e tecnologias); • mediações; • orquestrações de serviços; 49 • aplicações para Web; • aplicações de portal; • modelos de processos e simulações. FIGURA 2.21 Ferramentas de desenvolvimento e testes. Permitem a construção e testes de elementos em todas as camadas funcionais. Ferramentas de infraestrutura de aplicaçõesUma arquitetura SOA pode fazer uso de algumas ferramentas para gerenciar a infraestrutura de serviços, provendo desempenho, escalabilidade, confiabilidade e disponibilidade. Alguns exemplos de tais ferramentas são: • ambientes de grid computing; • soluções de gerenciamento de carga (workload management); • soluções de virtualização; • soluções de computação em nuvem (cloud computing). Atuam nas camadas de integração e qualidade de serviço. 2.5 Benefícios e desafios Uma vez entendido o conceito de SOA, pode-se pensar sobre quais resultados podem ser obtidos por uma organização ao adotar o paradigma de orientação a serviços. Implementar e manter uma arquitetura SOA dentro de uma organização é uma tarefa 50 custosa, que exige tempo, recursos e esforço, além de promover mudanças no comportamento e na cultura da organização. Os resultados de uma arquitetura SOA devem ser tangíveis e devem compensar o investimento realizado. Dessa maneira, são discutidos os benefícios e possíveis desafios que podem ser trazidos pela adoção do paradigma de orientação a serviços nas organizações. 2.5.1 Facilidade De Integração Uma arquitetura SOA é baseada em serviços intrinsecamente interoperáveis (Erl, 2005). Devido ao uso de padrões abertos de interação, aplicações estruturadas na forma de serviços possuem uma capacidade inerente de se comunicarem de maneira interoperável. É como se as aplicações orientadas a serviços já nascessem pré-integradas, minimizando o esforço de se desenvolver integrações entre aplicações. A estrutura de serviços tende a facilitar a integração de aplicações, uma vez que uma arquitetura SOA é uma maneira de se reorganizar uma infraestrutura formada de silos de software em um portfólio de serviços compartilhados. Em uma arquitetura SOA, as aplicações existentes e futuras podem acessar os serviços sem a necessidade de se desenvolver integrações ponto a ponto baseadas em protocolos proprietários. Assim, esta arquitetura pode ser utilizada em ambientes com múltiplas aplicações baseadas em variadas tecnologias e plataformas que necessitam se comunicar. Para efetuar transações entre elas, pode-se conectar e reusar serviços com esforço mínimo de programação e integração (Papazoglou, 2003). Marks e Bell (2006) chegam até a chamar esse benefício de integração de custo zero. Tal afirmação baseia-se no fato de que não é necessário nenhum esforço para realizar a conversão entre protocolos e formatos, para se estabelecer a comunicação entre aplicações em uma arquitetura SOA, uma vez que elas já estariam baseadas nos mesmos padrões abertos de interação. 2.5.2 Padronização De Tecnologias Como parte da implementação da arquitetura SOA em uma organização, é desenvolvida toda uma infraestrutura de comunicações para viabilizar as interações inter e intra- aplicações seguindo os princípios de orientação a serviços. Esta infraestrutura de comunicação de serviços passa a fazer parte da infraestrutura de TI e torna-se o padrão de comunicação no âmbito da organização como um todo. Deste modo, a organização deve investir seus recursos focando-se em uma única plataforma tecnológica de comunicação (Erl, 2005). Além disso, se forem utilizados a tecnologia de Web Services e os padrões baseados em XML para a implementação da arquitetura SOA, tem-se a oportunidade de estabelecer o XML como uma plataforma padronizada de representação de dados na organização (Erl, 2005). Tendo-se um formato padrão para representar dados pode reduzir a complexidade do ambiente de aplicações. Dessa maneira, estabelecem-se os documentos XML como o padrão para troca de informações e os esquemas XML como o padrão para representação 51 das entidades de dados. A padronização traz seus benefícios para a organização, mas sua implementação torna-se um desafio importante para as organizações ao adotar o conceito de SOA (Erl, 2005). É necessário garantir que os esquemas definidos nos vários projetos sigam as mesmas diretrizes e padrões e formem um modelo de dados organizacional, ou corre-se o risco de obter uma arquitetura não flexível e acoplada a aplicações existentes. 2.5.3 Maior Reuso De Recursos A orientação a serviços prega que os serviços sejam especificados de forma que possam suportar o reuso de maneira inerente. O projeto de aplicações voltadas para o reuso permite um reaproveitamento imediato de lógica pré-existente, bem como cria oportunidades futuras de reuso por potenciais clientes (Erl, 2005). A longo prazo, o reuso de serviços tende a reduzir custos, prazos e esforço para implementação de soluções (Bieberstein et al., 2005). Apesar de o projeto de serviços reusáveis exigir um esforço adicional (se comparado ao esforço de se desenvolver um serviço sem suporte a reuso), tal investimento é recompensado quando futuras aplicações desenvolvidas reaproveitarem as funções existentes. Marks e Bell (2006) estimam como algo em torno de 50% o esforço adicional para tornar um serviço reusável. Portanto, o ROI (Return on Investment) é obtido no primeiro reuso do serviço, se considerarmos que o reuso representa uma economia do custo de se desenvolver o serviço a partir do zero (Marks e Bell, 2006). O uso de Web Services permite também encapsular funções de ambientes legados de forma que estes possam fazer parte de uma arquitetura SOA. Isso permite a interoperabilidade de sistemas legados sem a necessidade de integrações ponto a ponto, que são custosas e inflexíveis. Assim, reduz-se o custo de se integrar legados e novas aplicações e torna-se possível que as novas aplicações reusem funções existentes no legado dentro do contexto de orientação a serviços. Com a possibilidade de se reusar sistemas legados, a necessidade de se substituí-los passa a não ser tão imediata (Erl, 2005). 2.5.4 Agilidade No Negócio A orientação a serviços promove flexibilidade nas soluções construídas, uma vez que são constituídas por serviços fracamente acoplados, sendo, portanto, preparadas para mudanças. O projeto de serviços com baixo acoplamento e a possibilidade de realizar composições entre eles torna a arquitetura SOA um ambiente mais adaptativo. A estruturação dos serviços em camadas de negócio e de tecnologia também gera flexibilidade, pois permite que ambos os domínios evoluam e sofram alterações de maneira isolada (Erl, 2005). A orientação a serviços pressupõe que as aplicações construídas tendem a evoluir com o tempo, conforme os requisitos de negócio se alterem ou novos surjam. Em uma arquitetura SOA bem estruturada, o impacto desta evolução é minimizado, uma vez que propriedades como reuso e interoperabilidade permitam que a área de TI responda mais 52 rapidamente às solicitações da área de negócio. Isso promove a agilidade organizacional, que permite à organização responder prontamente aos eventos do ambiente, reduzir o time-to-market de seus produtos e serviços e obter vantagem competitiva. Não somente o tempo para se ter uma solução pronta é diminuído como também o custo e o esforço (Erl, 2005). Desse modo, a orientação a serviços busca responder aos requisitos de negócio em prazos mais curtos e oferecer soluções mais flexíveis. As mudanças, que costumam ser custosas e danosas em ambientes não flexíveis, passam a ser facilitadas (Bieberstein et al., 2005). Para se atingir tal estado, é necessário que a infraestrutura esteja padronizada e que os serviços efetivamente possuam características de baixo acoplamento, reusabilidade e interoperabilidade. 2.5.5 Alinhamento Com O Negócio A orientação a serviços promove o alinhamento estratégico entre TI e negócio. Devido ao fato de os serviços representarem conceitos de negócio, o vínculo entre as soluções entregues pela área de TI (os serviços) e as metas estratégicas da organização (tanto de TI como de negócio) torna-se mais claro. Desta maneira, os investimentos destinados a TI são justificados devido a esta percepção do valor agregado (Bieberstein et al., 2005). O serviço pode ser visto também como uma maneira de uniformizar os vocabulários das áreas de negócio e de TI dentro de uma organização.
Compartilhar