Se você trabalha em TI ou na área de computação em nuvem, provavelmente está ciente do debate entre arquitetura orientada a serviços (SOA) e microsserviços. Afinal de contas, todo mundo está falando sobre microsserviços e aplicações ágeis esses dias.
À primeira vista, as duas abordagens parecem semelhantes e, de certa forma, são. Ambos envolvem ambientes de nuvem ou nuvem híbrida para o desenvolvimento e a implementação ágil de aplicações e ambos podem ser dimensionados para atender às demandas operacionais e de velocidade do big data. Ambos dividem aplicações grandes e complexas em componentes pequenos e flexíveis que são mais fáceis de trabalhar. E ambas diferem da arquitetura monolítica tradicional porque cada serviço tem sua própria responsabilidade.
No entanto, mesmo com essas semelhanças importantes, um exame mais detalhado das duas abordagens revela diferenças importantes.
Boletim informativo do setor
Mantenha-se atualizado sobre as tendências mais importantes (e intrigantes) do setor em IA, automação, dados e muito mais com o boletim informativo Think. Consulte a Declaração de privacidade da IBM.
Sua assinatura será entregue em inglês. Você pode encontrar um link para cancelar a assinatura em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa Declaração de privacidade da IBM para obter mais informações.
A arquitetura orientada a serviços (SOA) é uma abordagem de toda a empresa para o desenvolvimento de software de componentes de aplicação que aproveite componentes de software ou serviços reutilizáveis. Na arquitetura de software SOA, cada serviço é composto pelo código e pelas integrações de dados necessárias para executar uma função de negócios específica, por exemplo, verificar o crédito de um cliente, entrar em um site ou processar uma aplicação de hipoteca.
As interfaces de serviço fornecem um acoplamento solto, o que significa que podem ser chamadas com pouco ou nenhum conhecimento de como a integração é implementada abaixo. Devido a esse acoplamento frouxo e à forma como os serviços são publicados, as equipes de desenvolvimento podem economizar tempo reutilizando componentes em outras aplicações em toda a empresa. Isso é tanto um benefício quanto um risco. Como resultado do acesso compartilhado ao barramento de serviços empresariais (ESB), se surgirem problemas, eles também poderão afetar os outros serviços conectados.
Os dados de XML são um ingrediente essencial para soluções baseadas na arquitetura SOA. As aplicações SOA baseadas em XML podem ser usadas para construir serviços da web, por exemplo.
A SOA surgiu no final da década de 1990 e representa um estágio importante na evolução do desenvolvimento e integração de aplicações. Antes que a SOA fosse uma opção, conectar uma aplicação monolítica a dados ou funções em outro sistema exigia uma integração ponto a ponto complexa que os desenvolvedores tinham que recriar para cada novo projeto de desenvolvimento. Expor essas funções por meio de SOA elimina a necessidade de recriar a integração profunda todas as vezes.
A SOA fornece quatro tipos diferentes de serviços:
Cada serviço consiste em três componentes:
Os serviços de SOA podem ser combinados para criar serviços e aplicações de nível superior.
Assim como a SOA, as arquiteturas de microsserviços são compostas por componentes especializados, reutilizáveis e de acoplamento frouxo, que geralmente funcionam independentemente uns dos outros. Microsserviços também usam um alto grau de coesão, também conhecido como contexto limitado. O contexto limitado refere-se à relação entre um componente e seus dados como uma entidade ou unidade autônoma com poucas dependências. Em vez de serem adotados em toda a empresa, os microsserviços normalmente se comunicam por meio de interfaces de programação de aplicativos (APIs) para criar aplicação individuais que executam uma funcionalidade comercial específica. Essa abordagem os torna mais ágeis, escaláveis e resilientes, especialmente para áreas específicas da empresa. Normalmente, Java é a linguagem de programação de escolha para desenvolver microsserviços. Outras linguagens de programação também podem ser usadas, como Golang e Python.
Os microsserviços são uma verdadeira abordagem de arquitetura nativa da nuvem, geralmente operando em contêineres, o que os torna mais Escalável e portáteis para a criação de serviços independentes. As equipes podem usar microsserviços para atualizar o código com mais facilidade, usar stacks diferentes para componentes diferentes e dimensionar os componentes de forma independente uns dos outros. Essa abordagem reduz o desperdício e o custo associados à necessidade de escalar aplicações inteiras, pois uma única funcionalidade pode estar enfrentando carga demais. Devido à sua independência, os microsserviços produzem serviços mais tolerantes a falhas do que as alternativas.
Confira o vídeo a seguir para obter mais informações sobre arquitetura de microsserviço:
A principal distinção entre as duas abordagens se resume ao escopo. Simplificando, a arquitetura orientada a serviços (SOA) tem um escopo corporativo, enquanto a arquitetura de microsserviços tem um escopo de aplicação.
Muitos dos princípios fundamentais de cada abordagem tornam-se incompatíveis quando você negligencia essa diferença. Se você aceitar a diferença de escopo, poderá rapidamente perceber que os dois podem se complementar, em vez de competir.
Aqui estão alguns casos de uso em que essa distinção entra em jogo:
Na SOA, a reutilização das integrações é o principal objetivo e, no nível empresarial, é essencial esforçar-se para alcançar algum nível de reutilização.A reutilização e o compartilhamento de componentes em uma arquitetura SOA aumentam a escalabilidade e a eficiência.
Na arquitetura de microsserviços, a criação de um componente de microsserviços que é reutilizado no tempo de execução em uma aplicação resulta em dependências que reduzem a agilidade e a resiliência. Os componentes de microsserviços geralmente preferem reutilizar o código copiando e aceitando a duplicação de dados para ajudar a melhorar o desacoplamento.
Os serviços reutilizáveis em SOA estão disponíveis em toda a empresa por meio de protocolos predominantemente síncronos, como APIs RESTful.
Entretanto, em uma aplicação de microsserviço, as chamadas síncronas introduzem dependências em tempo real, resultando em uma perda de resiliência. Essas dependências também podem causar latência, o que impacta o desempenho. Dentro de uma aplicação de microsserviços, os padrões de interação baseados em comunicação assíncrona são preferidos, como o fornecimento de eventos, no qual um modelo de publicação/inscreva-se é usado para permitir que um componente de microsserviços permaneça atualizado sobre as mudanças que ocorrem com os dados em outro componente.
Um objetivo claro da prestação de serviços em uma SOA é que todas as aplicações obtenham e alterem dados de forma síncrona diretamente em sua fonte primária, o que reduz a necessidade de manter padrões complexos de sincronização de dados.
Em aplicações de microsserviços, o ideal é que cada microsserviço tenha acesso local a todos os dados necessários para garantir sua independência de outros microsserviços (e também de outras aplicações) mesmo que isso signifique alguma duplicação de dados em outros sistemas. É claro que essa duplicação adiciona complexidade, portanto deve ser equilibrada com os ganhos em agilidade e desempenho, mas isso é aceito como uma realidade do projeto de microsserviços.
Para algumas organizações, a arquitetura SOA é um trampolim para substituir o monólito, proporcionando um ambiente mais flexível e ágil. Os serviços de SOA podem ser desenvolvidos e usados em um grande ambiente, mas não lidam com as necessidades específicas de empresas individuais que desejam lidar com os processos de negócios dentro de sua alçada. O DevOps pode ser usado para ajudar uma organização a fazer a transição da arquitetura SOA para microsserviços, a fim de lidar com necessidades específicas.
Os estilos arquitetônicos têm suas vantagens; então, como determinar qual deles funciona melhor para seus objetivos? Em geral, depende do tamanho e da diversidade do seu ambiente de aplicações.
Tanto a SOA quanto microserviços podem usar automação para acelerar processos de negócios. Ambientes maiores e mais diversos tendem a se apoiar na arquitetura orientada a serviços (SOA), que são compatíveis com a integração entre aplicações heterogêneas e protocolos de mensagens VIA um barramento de serviços corporativos (ESB). Ambientes menores, incluindo aplicações web e aplicações móveis, não exigem uma camada de comunicação tão robusta e são mais fáceis de desenvolver usando uma arquitetura de microsserviços.
Alguns apontarão que o debate SOA versus microsserviços é muito mais complicado, e isso é verdade. Há muito mais envolvido. Para uma explicação técnica mais detalhada dessas nuances, incentivamos você a ler os artigos do Hub de Aprendizado de SOA e microsserviços, que fornecem muitas informações detalhadas. No entanto, do ponto de vista dos negócios, o escopo é a distinção crucial.
Para aprender mais sobre como construir aplicações ágeis, baixe sua cópia gratuita do ebook Arquitetura de aplicações ágeis.
Um serviço de locatário único, totalmente gerenciado, para desenvolver e entregar aplicações Java.
Utilize softwares e ferramentas de DevOps para desenvolver, implementar e gerenciar aplicações nativas da nuvem em diversos dispositivos e ambientes.
Com o desenvolvimento de aplicações na nuvem você só constrói uma única vez, itera rapidamente e implementa em qualquer lugar.