Microsserviços em JavaScript: arquitetura e prática do A ao Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução à Arquitetura de Microsserviços em JavaScript

A arquitetura de microsserviços é uma abordagem de desenvolvimento de software onde uma aplicação é construída como um conjunto de pequenos serviços independentemente implantáveis. Cada serviço implementa uma única função de negócio e se comunica com outros através de protocolos leves (geralmente HTTP/REST ou filas de mensagens). JavaScript, especificamente o runtime Node.js, é ideal para criar microsserviços graças ao seu modelo de I/O assíncrono, vasto ecossistema de pacotes (npm) e alta velocidade de desenvolvimento.

Neste artigo, abordaremos os principais aspectos da construção de microsserviços em JavaScript: desde o design da arquitetura até a implantação em contêineres. Você aprenderá como organizar a troca de dados, garantir tolerância a falhas e testar um sistema distribuído.



1. Projetando a Arquitetura de Microsserviços

O primeiro passo é decompor uma aplicação monolítica em serviços. Cada microsserviço deve ter seu próprio banco de dados (database per service) e ser totalmente autônomo. Considere um exemplo de loja online:

  • Serviço Usuários — registro, autenticação, perfis.
  • Serviço Produtos — catálogo de produtos, preços, estoque.
  • Serviço Pedidos — criação e processamento de pedidos.
  • Serviço Pagamentos — integração com gateways de pagamento.
  • Serviço Notificações — envio de e-mail/SMS.

Para comunicação entre serviços, usamos duas abordagens: síncrona (REST/gRPC) para requisições que exigem resposta imediata, e assíncrona (filas de mensagens) para eventos que não requerem bloqueio.



2. Criando um Microsserviço em Node.js com Express

Vamos começar com um microsserviço simples para gerenciamento de usuários. Instale o Express e uma biblioteca para trabalhar com UUID:

npm init -ynpm install express uuid

Crie um arquivo users-service.js:

const express = require('express');const { v4: uuidv4 } = require('uuid');const app = express();app.use(express.json());

const users = [];

// Criar usuárioapp.post('/users', (req, res) => { const { name, email } = req.body; const user = { id: uuidv4(), name, email }; users.push(user); res.status(201).json(user);});

// Obter lista de usuáriosapp.get('/users', (req, res) => { res.json(users);});

// Obter usuário por IDapp.get('/users/:id', (req, res) => { const user = users.find(u => u.id === req.params.id); if (!user) return res.status(404).json({ error: 'Usuário não encontrado' }); res.json(user);});

app.listen(3001, () => console.log('Serviço de usuários rodando na porta 3001'));

Execute o serviço: node users-service.js. Agora você tem um microsserviço funcional com uma API REST. Os serviços para produtos e pedidos são criados de forma similar (nas portas 3002 e 3003 respectivamente).



3. Comunicação Assíncrona via RabbitMQ

Para eventos como "pedido criado" ou "usuário registrado", usamos filas de mensagens. Instale o cliente RabbitMQ:

npm install amqplib

Crie um utilitário para publicar mensagens (event-bus.js):

const amqp = require('amqplib');let channel;

async function connect() { const connection = await amqp.connect('amqp://localhost'); channel = await connection.createChannel(); await channel.assertExchange('order_events', 'topic', { durable: true });}

async function publishEvent(routingKey, data) { if (!channel) await connect(); channel.publish('order_events', routingKey, Buffer.from(JSON.stringify(data))); console.log(`Evento publicado: ${routingKey}`);}

module.exports = { publishEvent };

Agora no serviço de pedidos (orders-service.js), quando um pedido for criado, publique

Blogs

Book Recommendations