paint-brush
A adoção de arquitetura de microsserviços para aplicativos nativos da nuvemby@samsey
1,676
1,676

A adoção de arquitetura de microsserviços para aplicativos nativos da nuvem

Donsamsey11m2023/12/19
Read on Terminal Reader
Read this story w/o Javascript

Esses desafios podem envolver lidar com o aumento da complexidade, gerenciar a latência da rede de maneira eficaz, lidar com a descoberta de serviços de maneira eficiente, abordar adequadamente as questões de gerenciamento de configuração e garantir que medidas de segurança estejam em vigor. No geral, embora os microsserviços ofereçam benefícios, para aplicações nativas é crucial enfrentar os desafios associados de forma eficaz, a fim de aproveitar todo o seu potencial.

People Mentioned

Mention Thumbnail
Mention Thumbnail

Company Mentioned

Mention Thumbnail
featured image - A adoção de arquitetura de microsserviços para aplicativos nativos da nuvem
Donsamsey HackerNoon profile picture
0-item
1-item

No mundo da arquitetura de software, os microsserviços são um estilo que envolve serviços independentes que funcionam juntos por meio de interfaces bem definidas. Por outro lado, os aplicativos nativos são projetados e desenvolvidos especificamente para ambientes em nuvem para aproveitar ao máximo sua escalabilidade, resiliência e agilidade.


Quando se trata de usar microsserviços em aplicativos, há inúmeras vantagens a serem consideradas. Isso inclui ciclos de desenvolvimento, processos de teste e depuração, flexibilidade e modularidade aprimoradas, além de melhor tolerância a falhas e desempenho. No entanto, é importante reconhecer que também existem desafios que acompanham esta abordagem.


Esses desafios podem envolver lidar com o aumento da complexidade, gerenciar a latência da rede de maneira eficaz, lidar com a descoberta de serviços de maneira eficiente, abordar adequadamente as questões de gerenciamento de configuração e garantir que medidas de segurança estejam em vigor.


No geral, embora os microsserviços ofereçam benefícios, para aplicações nativas é crucial enfrentar os desafios associados de forma eficaz, a fim de aproveitar todo o seu potencial.


Docker ganhou popularidade como ferramenta para desenvolver, executar e implantar microsserviços. Serve como plataforma, permitindo a criação e execução de containers que são ambientes autocontidos, abrangendo todos os componentes necessários ao funcionamento de um serviço. Que inclui bibliotecas de código, dependências e definições de configuração.


A maior vantagem do Docker reside na sua capacidade de empacotar serviços em contêineres portáteis que podem ser implantados perfeitamente em máquinas que suportam o Docker, independentemente de seus sistemas operacionais ou infraestrutura subjacente. Além disso, o Docker oferece uma variedade de recursos e ferramentas para gerenciar o ciclo de vida desses contêineres de maneira eficaz.


Desde criá-los e executá-los até interrompê-los, reiniciá-los, removê-los ou atualizá-los.

Existem vantagens em utilizar microsserviços para aplicativos nativos, incluindo:

1. Ciclos acelerados de desenvolvimento e implantação: Ao dividir seu aplicativo em unidades gerenciáveis, os microsserviços permitem desenvolvimento, teste e implantação independentes e paralelos. Essa abordagem simplificada reduz o tempo e o esforço necessários para introduzir recursos e atualizações. Também facilita a adoção de práticas de integração e entrega (CI/CD).


Além disso, os microsserviços ajudam a mitigar os desafios associados aos aplicativos, como tempos de construção, dependências complexas e implantações arriscadas.


2. Maior escalabilidade: os microsserviços oferecem a vantagem de dimensionar seu aplicativo. Você pode remover instâncias de serviço conforme necessário, sem interromper o restante do aplicativo. Essa flexibilidade ajuda no gerenciamento de diversas cargas de trabalho e na otimização da utilização de recursos. Além disso, os microsserviços permitem que você utilize tecnologias e estruturas para cada serviço, adaptando-os aos requisitos e preferências.


3. Maior tolerância a falhas e resiliência: os microsserviços contribuem para uma aplicação disponível, isolando falhas e minimizando seu impacto. Se um serviço encontrar um problema, outros serviços poderão continuar funcionando normalmente enquanto o serviço problemático é rapidamente reparado ou substituído.


Além disso, os microsserviços facilitam a implementação de mecanismos de falha, como disjuntores, novas tentativas, tempos limite e fallbacks. Esses padrões evitam falhas em cascata. Garanta a degradação do desempenho.


4. Escolher e incorporar tecnologia fica mais simples: os microsserviços permitem integração e compatibilidade entre sua aplicação e diversos sistemas e serviços internos e externos. Eles conseguem isso utilizando interfaces definidas e padronizadas como APIs.


Ao aproveitar os microsserviços, a comunicação é perfeita entre os componentes, independentemente das tecnologias ou plataformas subjacentes em uso. Além disso, os microsserviços permitem que você aproveite as tecnologias e serviços existentes e emergentes dos provedores de nuvem, incluindo funções sem servidor, bancos de dados, sistemas de mensagens e ferramentas analíticas.

Existem dificuldades que surgem ao usar microsserviços para aplicativos nativos. Esses desafios incluem:

1. Maior complexidade e carga de comunicação: a incorporação de microsserviços em seu aplicativo aumenta a complexidade. Requer gerenciamento e coordenação de serviços em diferentes máquinas e redes. Isso envolve resolver problemas como latência de rede, largura de banda, confiabilidade e segurança.


Além disso, protocolos e mecanismos devem ser implementados para tarefas como descoberta de serviços, balanceamento de carga, roteamento e sincronização. Os serviços de monitoramento e solução de problemas e suas interações também podem ser uma tarefa demorada e desafiadora.


2. Dificuldades com testes e depuração: os microsserviços tornam os testes e a depuração mais desafiadores, pois você precisa testar e depurar não apenas cada serviço individualmente, mas todo o sistema como uma unidade coesa.


Você precisa garantir que seus serviços sejam compatíveis e consistentes entre si e possam lidar com vários cenários e casos extremos. Você também precisa simular e replicar o ambiente e as condições reais da sua aplicação, que podem ser complexos e caros.


3. Falta de padronização e governança em seu aplicativo: como cada serviço tem a liberdade de utilizar tecnologias, estruturas, linguagens e ferramentas, isso pode levar a inconsistências, esforços duplicados e uma base de código fragmentada.


Como resultado, manter e atualizar estes serviços pode tornar-se um desafio. Para resolver esse problema, é crucial estabelecer e aplicar práticas, diretrizes e políticas para seus serviços. Isso pode incluir padrões de codificação, requisitos de documentação, procedimentos de teste de protocolos de controle de versão e estratégias de implantação.


4. A segurança e a manutenção dos dados representam desafios: uma vez que cada serviço tem o seu armazenamento de dados e controlo de acesso, existe um risco acrescido de violações, fugas e corrupção de dados. Além disso, o gerenciamento de autenticação, autorização e criptografia de serviços e seus dados correspondentes pode se tornar complexo.


Para resolver estas preocupações, é vital priorizar a segurança dos seus serviços e garantir a conformidade com regulamentos e normas. A implementação de estratégias, como transações, sagas e fornecimento de eventos, também pode ajudar a manter a consistência dos dados.

Usando Docker para microsserviços

Se você deseja construir, executar e implantar, o Docker de microsserviços pode ser uma ferramenta para ajudá-lo. Nesta seção, nos aprofundaremos nos conceitos do Docker como imagens, contêineres, volumes e redes. Também forneceremos orientações sobre como aproveitar o Docker Compose para definir e orquestrar microsserviços de maneira eficaz.


Além disso, discutiremos algumas práticas e dicas úteis para utilizar o Docker no contexto de microsserviços.

Imagens e contêineres

No âmbito do Docker, uma imagem atua como um pacote, contendo tudo o que é necessário para que um serviço funcione corretamente. Isso inclui trechos de código, bibliotecas, dependências e configurações. É importante notar que, uma vez criada, uma imagem Docker é considerada imutável – o que significa que não pode ser alterada.


Para criar uma imagem personalizada adaptada às suas necessidades, você tem a opção de criar um Dockerfile que descreva as instruções de construção. Alternativamente, você também pode utilizar imagens existentes disponíveis em plataformas como Docker Hub ou outras fontes confiáveis.


Um contêiner Docker representa uma instância de uma imagem Docker. Ele opera independentemente da máquina host e de outros contêineres que possuem seu sistema de arquivos, rede e processos. Para iniciar um contêiner Docker, você pode utilizar o comando docker run que gera e inicia um contêiner baseado em uma imagem.


Como alternativa, você tem a opção de aproveitar os comandos docker start e docker stop para iniciar ou interromper um contêiner existente, respectivamente. Se necessário, o comando docker rm pode ser usado para excluir um contêiner.

Volumes e Redes

Na terminologia Docker, é empregado um volume para armazenamento que pode ser conectado a um contêiner Docker. Ao utilizar volumes no Docker, é possível trocar dados de maneira conveniente entre contêineres e a máquina host, garantindo a continuidade dos dados durante reinicializações ou atualizações.


A criação de um volume Docker pode ser obtida executando o comando docker volume create ou especificando a opção volumes no comando docker run ou em seu Dockerfile.


Além disso, existem comandos como docker volume para listar volumes, docker volume inspecionar para obter informações sobre volumes específicos e, finalmente, docker volume rm, para remover volumes indesejados.


Uma rede Docker serve como uma rede que conecta contêineres Docker entre si com a máquina host. Ao usar uma rede Docker, você pode garantir a comunicação isolada entre contêineres e, ao mesmo tempo, permitir o acesso aos serviços executados neles.


Para criar uma rede Docker, você tem a opção de usar o comando "docker network create" ou especificar as redes no comando "docker run" ou no Dockerfile.


Além disso, você pode utilizar comandos como “docker network”, “docker network inspecionar” e “docker network rm” para gerenciar e manipular redes.

Construindo e executando um microsserviço simples usando Docker

Para ilustrar como usar o Docker para microsserviços, construiremos e executaremos um microsserviço simples que retorna uma cotação aleatória de um arquivo JSON. O microsserviço será escrito em Python e usará o framework Flask. O arquivo JSON conterá uma série de citações, cada uma com um autor e um texto.


Para começar, vamos criar um diretório para nosso microsserviço e adicionar dois arquivos dentro dele: app.py e quotes.json. O arquivo app.py conterá o código do nosso microsserviço, enquanto o arquivo quotes.json armazenará os dados. Aqui está o conteúdo de cada arquivo;


Pitão

#aplicativo.py

do frasco importar Flask, jsonify

importar aleatoriamente


aplicativo = frasco ( nome )


# Carrega as cotações do arquivo JSON

com open("quotes.json") como f:

 quotes = f.read() quotes = json.loads(quotes)


# Defina uma rota para o endpoint /quote

@app.route("/quote")

citação def():

 # Pick a random quote from the list quote = random.choice(quotes) # Return the quote as a JSON object return jsonify(quote)


JSON

#citações.json

 "author": "Albert Einstein", "text": "Imagination is more important than knowledge."


 "author": "Mahatma Gandhi", "text": "Be the change that you wish to see in the world."


 "author": "Mark Twain", "text": "The secret of getting ahead is getting started."


 "author": "Oscar Wilde", "text": "Be yourself; everyone else is already taken."


 "author": "Steve Jobs", "text": "Your time is limited, so don't waste it living someone else's life."


A seguir, precisamos criar um Dockerfile para nosso microsserviço que especificará as instruções para construir a imagem. O Dockerfile ficará assim:


Use a imagem oficial do Python como imagem base

DE python:3.9


Defina o diretório de trabalho como /app

WORKDIR /aplicativo


Copie os arquivos do diretório atual para o diretório /app

CÓPIA DE. /aplicativo


Instale as dependências necessárias

EXECUTAR frasco de instalação pip


Exponha a porta 5000

EXPOR 5000


Defina o comando para executar o aplicativo

CMD ["python", "app.py"]


Para construir a imagem, precisamos executar o seguinte comando no terminal do diretório onde o Dockerfile está localizado:


docker build -t quote-service.


A opção -t especifica o nome e a tag da imagem, neste caso, quote-service. O . especifica o contexto da construção, neste caso, o diretório atual.


Para executar o contêiner, precisamos executar o seguinte comando no terminal:


docker run -d -p 5000:5000 --name serviço de cotação serviço de cotação


A opção -d executa o contêiner em modo desanexado, o que significa que ele é executado em segundo plano. A opção -p mapeia a porta 5000 do contêiner para a porta 5000 da máquina host, permitindo-nos acessar o serviço a partir da máquina host.


A opção --name atribui um nome ao contêiner, neste caso, quote-service. O último argumento é o nome e a tag da imagem, neste caso, quote-service.


Para testar o serviço, podemos usar uma ferramenta como Curl ou Postman para enviar uma solicitação GET para o endpoint /quote do serviço, que deve retornar uma cotação aleatória no formato JSON. Por exemplo, usando Curl, podemos executar o seguinte comando no terminal:


Curl http://localhost:5000/quote


A saída deve ser algo assim:


JSON

"autor": "Mark Twain",

"text": "O segredo para progredir é começar."



Composição do Docker

Docker Compose fornece uma maneira de definir e gerenciar microsserviços usando um arquivo YAML. Com o Docker Compose, você pode lidar facilmente com tarefas como criar, iniciar, parar e atualizar contêineres. Ele também oferece funcionalidades como descoberta de serviços, balanceamento de carga, escalonamento e rede para simplificar o gerenciamento de seus microsserviços.


Para usar o Docker Compose, precisamos criar um arquivo chamado docker-compose.yml no mesmo diretório do nosso Dockerfile. O arquivo docker-compose.yml conterá a configuração de nossos microsserviços, como imagem, portas, volumes, redes e dependências.


Por exemplo, suponha que queiramos adicionar outro microsserviço que consuma o serviço de cotação e exiba a cotação em uma página da web. O microsserviço será escrito em Node.js e usará o framework Express. O arquivo docker-compose.yml será o seguinte:


Especifique a versão do formato de arquivo Docker Compose: "3.9"


Defina os serviços (contêineres) que compõem nossos serviços de aplicação:

O serviço de cotação

serviço de cotação:

 # Build the image from the Dockerfile in the current directory build: . # Expose the port 5000 ports: - "5000:5000" # Assign a name to the container container_name: quote-service


O serviço web

serviço de internet:

 # Use the official Node.js image as the base image image: node:14 # Set the working directory to /app working_dir: /app # Copy the files from the web directory to the /app directory volumes: - ./web:/app # Install the required dependencies command: npm install && node app.js # Expose the port 3000 ports: - "3000:3000" # Assign a name to the container container_name: web-service # Specify the dependency on the quote service depends_on: - quote-service


O diretório web conterá dois arquivos: app.js e index.html. O arquivo app.js conterá o código do nosso serviço web, e o arquivo index.html conterá o HTML da nossa página web. O conteúdo dos arquivos é o seguinte:


JavaScript

//aplicativo.js

const expresso = requer("expresso");

const axios = require("axios");


const app=express();


// Servir o arquivo index.html como rota raiz

app.get("/", (req, res) => {

res.sendFile(__dirname + "/index.html");

});


// Define uma rota para o endpoint /quote

app.get("/quote", async (req, res) => {

tentar

 // Call the quote service and get a random quote const response = await axios.get("http://quote-service:5000/quote"); const quote = response.data; // Return the quote as a JSON object res.json(quote);


pegar (erro)

 // Handle the error and return a status code


Neste artigo, exploramos o mundo dos microsserviços e aplicativos nativos, bem como como o Docker pode ser usado para construí-los, executá-los e implantá-los. Ao longo de nossa discussão, examinamos as vantagens e os desafios do uso de microsserviços para aplicativos.


Isso inclui ciclos de desenvolvimento, maior flexibilidade e escalabilidade, maior tolerância a falhas, resiliência, seleção e integração mais fáceis de tecnologia, latência de rede e muito mais.


Além disso, nos familiarizamos com os conceitos do Docker, como imagens, volumes de contêineres e redes. Também nos aprofundamos no uso do Docker Compose para definir e orquestrar microsserviços. Ao longo do caminho, compartilhamos algumas práticas e dicas úteis para utilizar o Docker de maneira eficaz em um ambiente de microsserviços.


Isso inclui sugestões para estratégias de registro de convenções de nomenclatura e implementação de verificações de integridade.


No geral, este artigo forneceu uma visão geral dos microsserviços em conjunto com aplicativos nativos, ao mesmo tempo que mostrou como o Docker pode desempenhar um papel crucial em seu ciclo de vida de desenvolvimento.


Existem casos e menções de empresas que implementaram com sucesso projetos de microsserviços usando Docker, como Netflix, Uber, Spotify e Airbnb. Essas organizações adotaram os microsserviços e o Docker como um meio de expandir os recursos de seus aplicativos, melhorar o desempenho e fornecer serviços com velocidade e confiabilidade.


Se estiver interessado em se aprofundar em seus insights e abordagens recomendadas, você pode explorar suas postagens de blog, podcasts e apresentações.


Se você estiver interessado em expandir seu conhecimento sobre microsserviços e Docker, existem recursos e oportunidades de aprendizagem à sua disposição. Isso inclui livros, cursos, tutoriais e documentação. Aqui estão algumas recomendações:


“Microserviços com Docker, Flask e React”; Este livro fornece orientação sobre como construir, testar e implantar microsserviços usando Python, Flask, React e Docker.


"Docker e Kubernetes; o guia completo"; Este curso fornece habilidades para desenvolver, executar e implantar aplicativos usando Docker e Kubernetes.


“Construa um microsserviço simples usando Docker e Flask”; Neste tutorial, você aprenderá como criar um microsserviço usando Docker e Flask. Também cobre técnicas de teste e depuração utilizando ferramentas como Postman e VS Code.


“Documentação Docker”; Para obter informações sobre tudo relacionado ao Docker — desde instruções de instalação até detalhes de configuração — esta documentação serve como um recurso.


Explore essas opções para se aprofundar no mundo dos microsserviços junto com o Docker.