SOA
Arquitetura Orientada a Serviços
O que é isso?
Antes de tentar responder esta pergunta, vou definer o que SOA não é.
SOA, não é :
1. Uma nova tecnologia.
2. Um novo framework de desenvolvimento.
3. Integração entre aplicações.
4. Webservices
5. Técnica para deixar uma aplicação mais rápida
Segundo Thomas Erl, SOA é
“Uma abordagem arquitetural de TI dirigida a negócios que suporta a integração de sistemas como tarefas de negócio ou serviços conectáveis e repetitivos. SOA ajuda hoje as empresas a inovar graças a garantia de que os sistemas de TI podem se adaptar rápido, fácil e economicamente para permitir rápidas mudanças nas necessecidades da empresa. Ela aumenta a flexibilidade dos processos de negócio, fortalecendo a infra-estrutura presente e reusando os investimentos já feitos na área de TI, criando conexões entre aplicações e fontes de informação que apresentam muita diferença entre si.”
Thomas Erl, usa em sua explicação termos importantes, como :
1. Integração de sistemas
2. Adaptação de sistemas
3. Rápidas mudanças
4. Fortalecimento da infra-estrutura
5. Reúso de investimentos já feitos
6. Conexões entre aplicações
Eu acredito que para se ter uma exata compreenção sobre a definição do Thomas Erl, com os termos acima, devemos analisar primeiro como ao longo dos anos, as empresas adotaram TI.
Eu iniciei na área de desenvolvimento de software em 1989. Iniciei como programador júnior em uma software house, desenvolvendo programas em cobol.
Nesta época, a grande maiorina das empresas, se quer, tinha computador. Suas operações eram manuais, e as empresas necessitavam de muitas pessoas para executarem seus procedimentos internos.
Imaginem uma empresa, que em média emitia 100 notas fiscais diariamente. Essa empresa com certeza necessitava de muitas pessoas trabalhando em seu setor de faturamento, datilografrando notas fiscais.
Quando a software house que eu trabalhava, vendia um sistema de faturamento, inevitavelmente duas coisas aconteciam na empresa:
1a. A emissão de notas fiscais, ficou extremamente mais rápido, era somente necessário um cadastro das informações das notas fiscais e a emissão das mesmas.
2a. Muitas pessoas foram demitidas (sim, a área de TI causou e ainda é responsável pela demissão de muitas pessoas)
Nesta época, a tecnologia da informação (TI) oferecia agilidade de operações internas nas empresas.
Essa “agilidade de operações internas”, durante alguns anos, representou um ganho para as empresas que acabaram sob alguns aspectos da época, sendo eficazes e eficientes operacionalmente, obtendo com isso, vantagem competitiva.
É obvio, que com o passas dos anos, essa vantagem competitiva deixou de existir, porque outas empresas também passaram a utilizar a tecnologia da informação para dar agilidade em suas operações operacionais.
Com a ampla utilização da internet, isso em meados dos anos 90, as empresas para terem vantagem competitiva, se valeram da tecnologia da informação (TI) para se exporem ao mundo, através de sites e ai surgiram os B2B, B2C, etc.
Me lembro de um fato muito marcante desta época, só não tenho certeza qual montadora de automóveis foi, se foi a Ford ou a GM, mas uma delas, permitiu que seus clientes pudessem comprar um veículo através da internet. Me lembro que faziamos um cadastro e podiamos escolher o carro, os opicionais, a cor e até mesmo selecionar a forma de pagamento.
Neste momento, as empresas descobriram que a tecnologia da informação (TI) não só deveria ser utilizada para dar agilidade em operações internas, mas que TI deveria ser utilizada para também dar agilidade em operações de negócios.
E ai, segundo o que eu entendo, a confusão começou. Todas as empresas começaram a solicitar a TI o desenvolvimento de aplicações para no “momento” oferecer a empresa “agilidade em operações de negócios”.
Com o passas dos anos, e estamos agora em 2011, “o momento” fez com que as empresas tivessem várias aplicações para diversos propósitos com muitas funcionalidades praticamente idênticas.
Eu trabalhei em uma multinacional, na área de análise e desenvolvimento de sistemas (ADS), especificamente no setor de Marketing e Vendas. Neste setor, posso dizer que tinhamos muitas aplicações com muitas funcionalidades idênticas, aplicações praticamente com o mesmo propósito, mudando apenas o que chamávamos de política comercial.
O que fez com que estas aplicações fossem desenvolvidas, acredito eu que o “momento” fez. Acredito também que a falta de conhecimento sobre as aplicações, sobre as funcionalidades fez com que estas aplicações fossem desenvolvidas.
Com as muitas aplicações, começaram as integrações feitas de várias maneiras: tabelas, procedures, arquivos texto, etc.
Muitas vezes o “momento” fazia alguém de Marketing e Vendas ir até a área de ADS para solicitar uma nova funcionalidade ou um novo aplicativo que iria já na próxima semana alavancar uma ação de marketing para alavancar uma operação de negócio.
Neste momento, quem desenvolve software sabe que um abismo existe entre o “usuário e os analistas”. O usuário quer uma alteração e realmente acredita que pode ser feita de forma rápida. O analista sabe que a alteração solicitada pelo usuário no mínimo vai levar algumas semanas para ser feita, isso sem falar que esta alteração poderá afetar outras aplicações, aplicações inclusive que talvez o analista desconheça.
Eu já vi, e já participei de projetos que foram solicitados pelos usuários e que quando foram implantados, já não correspondiam ao “momento”, ou seja, já não representava ou não oferecia vantagem competitiva e se quer foram utilizados.
Já participei de projetos que alteravam funcionalidades idênticas em mais de uma aplicação, desenvolvidas inclusive em mais de uma plataforma, no caso, asp, java e cobol.
Essa “demora” da área de TI em attender a área usuária, causa um certo stress entre as áreas. Os usuário leigos dos procedimentos relacionadas ao desenvolvimento e análise de sistemas, acreditam pela grande gama de aplicações que utilizam que o que eles estão solicitando é simples. Segundo eles, é só pegar uma informação de um aplicativos, juntar com a informação de um outro aplicativo e pronto, o que ele necessita já está pronto.
Isso seria ideal se as empresas tivessem seus aplicativos desenvolvidos de forma coerente, com funcionalidades como serviços, possuino um inventário evitando assim redundância de funcionalidades.
Sendo assim, SOA surge como uma nova abordagem para a utilização dos recursos de TI em apoio ao negócio da organização, permitindo a TI:
1. Alavancar recursos existentes.
2. Criar novos recursos de forma coerente para serem melhor reutilizados.
3. Facilmente atender as inevitáveis alterações exigidas para suportar o negócio.
Com uma arquitetura orientada a serviços, podemos avaliar a solicitação da área usuária e com um inventário de serviços através da orquestração entre funcionalidades de aplicações distintas e heterogêneas expostas como serviços, resolver a nova solicitação.
Uma arquitetura orientada a serviços deve ser “vendida” em uma empresa, não como uma fórmula milagrosa, que vai deixar as aplicações mais rápidas, infelizmente é isso que muitos gestores pensam.
Ao sair da multinacional, fui trabalhar em um banco em um projeto “SOA”. Lá, “SOA” foi vendido ao gestor como uma solução mágica que permitiria que uma aplicação X ficasse rápida. Essa abordagem errada, faz com que muitas empresas desistam ou facassem na implementação de SOA.
Um grande esforço deverá ser feito para “ajustar” operações como serviços, para se criar um inventário evitando redundância de operações.
Esses foram meus argumentos, embasados em minha experiência profissional, para tentar justificar os temos utilizados por Thomas Erl para sua explicação sobre o que é SOA.
Segundo Thomas Erl, a chave para ser bem sucedido na implementação da arquitetura orientada a serviços esta em compreender o significado e a importância de seu bloco de construção mais importante: “o serviço”.
SOA não é webservice que é amplamente utilizado como serviços expostos e consumidos de forma síncrona e assincrona pelas empresas.
A plataforma de tecnologia mais utilizada para a realização de SOA, é a utilização de webservices.
E o que são os webservices?
Segundo Tanenbaum, os webservices classificam-se como sistemas distribuídos que podem aparentar para o usuário que são parte de apenas um sistema hospedado em um único computador, mas podem estar em diversos computadores independentes.
A utilização de sistemas distribuídos não é nova para nós. Ao longo dos anos, utilizamos RMI, Corba, DCom, como soluções para o desenvolvimento distribuído.
Essas abordagens apresentam divesos problemas e incompatibilidades como:
1. Dependência de linguagem de programação ou S.O.
2. Modelo de objetos e passagem de mensagens dependentes de fabricantes
Com os webservices, resolvem-se estes problemas e estas incompatibilidades através da independência de plataforma, SOAP permitindo assim a utilização da infra-estrutura já existente na empresa.
Como um guia para a compreenção de “serviços”, para a implementação de SOA, existem 8 princípios de design que devemos estudar e aplicar.
1. Contratos
2. Acoplamento
3. Abstração
4. Capacidade de reúso
5. Autonomia
6. Independência de estado
7. Visibilidade
8. Composição
Bom, este foi minha primeira postagem do blog. Espero que minhas explicações sejam coerentes e que de certa forma tenha ajudado alguém na compreenção sobre o que vem a ser SOA.
Minha próxima postagem será sobre os 8 princípios de design.
Abraços.
Pequeno
Fontes Utilizadas no texto:
Livros :
SOA Princípios de Desgin de Servicos - Pearson
SOA na Prática - Novatec
SOA Fundamentos e Estratégias - Editora Ciência Moderna
Material soa|expert :
SOA Foundation Classic and Next Generation