E Esse Tal de Nano Service?

 Ao longo dos anos, o desenvolvimento de software se afastou das arquiteturas monolíticas tradicionais, abordando suas complexidades com código fortemente acoplado e interconectado. Isso resultou na adoção de microsserviços, abordagens eficientes nativas da nuvem que permitem a computação distribuída por meio de vários serviços menores.

Desde que os microsserviços se tornaram mainstream, nos últimos anos, os nanoservices evoluíram como outro padrão que foi projetado principalmente para superar as complexidades encontradas nos microsserviços. Essencialmente, os nanoserviços dividem ainda mais os serviços para trazer eficiência adicional.

Este artigo descreve como o desenvolvimento de componentes menores para criar um aplicativo é uma abordagem preferencial, portanto:

  • Explicar micro e nanoserviços

  • Explore benefícios e desafios

  • Compartilhe exemplos e práticas recomendadas para ajudá-lo a determinar a estrutura certa para suas necessidades

Melhorando as práticas de desenvolvimento

Devido ao seu design elementar, as aplicações monolíticas têm alguns desafios sérios:

  • Eles são complicados.

  • Eles usam muito espaço em disco.

  • Eles são difíceis de escalar.

Quando os aplicativos monolíticos estão maduros, a introdução das tecnologias mais recentes ou a adoção de estruturas aprimoradas vem com muitas complexidades. Esses obstáculos não se limitam à integração em nível de código. O teste e a implantação também são desafiadores.

Além disso, um projeto inteiro para reescrever todo o aplicativo é muitas vezes demorado e altamente arriscado.

Microsserviços sobre monólitos

Os microsserviços foram construídos para:

  • Supere os problemas com uma abordagem monolítica.

  • Forneça uma solução eficaz para o desenvolvimento de aplicativos distribuídos baseados em nuvem.

Um microsserviço fragmenta um aplicativo em um conjunto de vários serviços fracamente acoplados. Normalmente, os microsserviços são:

  • Desenvolvido e testado isoladamente

  • Organizados pelos processos que lidam

  • Implantado de forma independente.

Cada um desses serviços tem seus próprios processos separados e foi projetado para funcionar de forma independente sem compartilhar recursos para evitar conflitos.

arquitetura monolítica vs microsserviços

Uma ilustração típica mostra como uma estrutura central de várias camadas de um monólito difere de uma arquitetura de microsserviços com serviços distribuídos.

( Compare a arquitetura de microsserviços com a arquitetura monolítica .)

Os microsserviços geralmente estão contidos em contêineres baseados em nuvem que se comunicam com outros serviços por meio de APIs da Web. Essas APIs atuam como filas de mensagens que respondem a eventos de entrada, como interface do usuário, invocando outros serviços, aceitando dados, etc.

Devido ao seu modelo distribuído, os microsserviços são desenvolvidos e mantidos sem afetar outros serviços. Isso essencialmente também ajuda um modelo de DevOps , permitindo:

  • Automação eficiente

  • Alta disponibilidade

Benefícios dos microsserviços

O design baseado em componentes de uma estrutura de microsserviço oferece vários benefícios, incluindo:

  • Os microsserviços são mais fáceis de manter, dimensionar e compartilhar

  • Eles funcionam bem com contêineres.

  • O desenvolvimento e o teste são mais rápidos, encurtando o ciclo de implantação e tornando-o ideal para as práticas de DevOps.

  • A natureza isolada dos serviços oferece implantação mais segura e resolução mais rápida de erros.

  • Os microsserviços fornecem maior flexibilidade, permitindo a reutilização para criar serviços semelhantes.

  • Não há restrições sobre as tecnologias específicas a serem usadas, permitindo maior produtividade de desenvolvimento (e talvez inovação).

  • Por serem interoperáveis ​​por natureza, os microsserviços podem ser usados ​​com plataformas de código aberto ou de código fechado.

vantagens e desvantagens dos microsserviços

O que são nanoserviços?

A diferença básica entre os dois frameworks é que os nanoservices são considerados irmãos menores dos microservices. Os Nanoservices são projetados para executar uma única função, cuja saída é exposta por meio de um endpoint de API específico (comando).

Nanoservices são totalmente detectáveis ​​entre si. Cada um pode se conectar com outros serviços para realizar ações adicionais e estender a funcionalidade.

Por design, os nanoserviços são:

  • Autocontido

  • Reutilizável

  • Menos complexo que microsserviços

  • Suportado por arquivos de função distintos para cada

Os nanoserviços são considerados mais eficientes que os microsserviços, principalmente devido a:

  • Facilidade de configuração inicial

  • Latência reduzida entre serviços, onde o código de função de cada nanoserviço pode ser executado sob demanda sem o uso de contêineres ou servidores dedicados para hospedar cada serviço individual.

Caso de uso do mundo real de nanoserviços

A ilustração abaixo destaca um caso de uso interessante de como o site da BBC usa milhares de nanoserviços para renderizar páginas da web dinâmicas. Cada serviço funciona para alimentar um componente específico da página da web, como:

  • Gerando um título

  • Obtenção de dados meteorológicos

  • Atualizando o placar de uma partida

  • etc.

Uma arquitetura de nanoserviços de alto nível do site da BBC descreve como vários serviços menores funcionam em conjunto para fornecer conteúdo de uma página da web:

Benefícios dos nanoserviços

Nanoservices são particularmente benéficos devido à sua facilidade de encapsulamento de funções específicas. Isso traz um framework de aplicação com as seguintes vantagens:

  • Mais focado e leve em comparação com microsserviços

  • Várias equipes podem trabalhar em um serviço específico ou em vários serviços

  • Cada serviço pode ter seu próprio protocolo de segurança

  • Pode ser desenvolvido, testado e implantado de forma independente

  • Facilita lançamentos de código mais rápidos e frequentes

  • Maior flexibilidade para vincular diferentes serviços para estender a funcionalidade

Desafios atuais

Embora microsserviços e nanoserviços sejam aprimoramentos significativos em um monólito, eles não vêm sem desafios.

Certos casos de uso também sugerem que desenvolver um aplicativo combinando serviços menores aumenta a complexidade de várias maneiras, incluindo:

  • Mais esforço gasto na criação e manutenção de serviços duplicados

  • O requisito de uma infraestrutura altamente eficiente é complexo para construir e caro para manter

  • Maior consumo de recursos, devido ao grande número de serviços que você oferece

  • Dependências de nível de serviço mais rígidas podem resultar em rastreamento de erros complexo

À primeira vista, o aumento do isolamento dentro dos nanoserviços pode parecer tentador. Mas, o uso generalizado de nanoserviços pode levar a uma série de problemas e complexidades aumentadas.

Mais ainda, para aplicativos decentemente complexos, a adoção de uma estrutura de nanoserviços pode realmente super utilizar recursos e aumentar os esforços manuais – algo que as práticas de DevOps desejam minimizar.

(Prepare-se para outros desafios comuns de microsserviço .)

Escolhendo micro ou nanoserviços

Tanto os microsserviços quanto os nanoserviços evoluíram para trazer eficiência em relação às arquiteturas tradicionais, distribuindo códigos de aplicativos complexos em vários serviços menores em uma configuração nativa da nuvem.

Com isso em mente, as considerações importantes para escolher a melhor estrutura acabam se resumindo a dois componentes principais:

  • Experiência do desenvolvedor

  • Requisitos de funcionalidade do aplicativo

Quando usar microsserviços

Comparados aos nanoserviços, os microsserviços são uma abordagem de design estabelecida e bem conhecida que pode operar com uma ampla variedade de tecnologias.

Existem vários casos de uso bem-sucedidos de grandes players do setor – Netflix e AWS – que já usam a arquitetura de microsserviços para oferecer vários serviços de última geração. Isso significa que os microsserviços têm uma infinidade de recursos e grupos para apoiar a estratégia de microsserviços de aprendizado ou maturidade.

Os microsserviços geralmente são adequados para:

  • Um processo de desenvolvimento ágil

  • Situações em que as equipes de desenvolvimento estão distribuídas funcional ou geograficamente

  • Criar um produto mínimo viável (MVP) que você estenderá funcionalmente ao longo do tempo, não todos de uma vez

Com isso em mente, é igualmente importante observar que os microsserviços não são adequados para todos os tipos de aplicativos. Certos casos de uso destacam que, sem a devida diligência e planejamento eficiente, a expansão aleatória dos serviços pode acabar tornando a estrutura tão grande e complicada quanto uma arquitetura monolítica.

(Siga as práticas recomendadas de microsserviços desde o planejamento até a manutenção.)

Nanoserviços

Nanoservices são muito mais recentes. Casos de uso comprovados de todo o seu potencial ainda precisam ser descobertos. Embora sejam menores, flexíveis, mais isolados e focados funcionalmente, ainda há incógnitas sobre:

  • Compatibilidade com tecnologia emergente

  • Escala exponencial

Como resultado, existem escolas de pensamento conflitantes sobre como e quando usar microsserviços.

Primeiro, a mera natureza dos nanoserviços coloca a questão de saber se eles são protegidos contra vetores de ataque quando usados ​​extensivamente em um aplicativo.

Alguns também consideram os nanoservices um antipadrão devido à sua funcionalidade fragmentada. Isso é conhecido por fazer com que a sobrecarga de manutenção exceda o valor dos benefícios da estrutura.

Como os nanoserviços ainda estão em sua infância, organizações conservadoras e grandes geralmente os evitam (por enquanto), principalmente devido ao suporte incerto do framework para escalabilidade. Para aqueles que o adotam, uma das melhores práticas de uso do framework é:

Evite nanoservices se seu uso complicar o sistema que deveria simplificar.

Projetando intencionalmente

Escolher nanoserviços em vez de microsserviços, ou vice-versa, sempre será diferente com os casos de uso. O objetivo final, no entanto, permanece o mesmo: adotar a arquitetura certa que auxilia a automação e ajuda a desenvolver aplicativos que sejam resilientes, escaláveis ​​e seguros.


Comentários

Postagens mais visitadas deste blog

Executar Audio em Java Swing

Validando Email em Java Com e Sem expressão Regular