Que tipos de serviços existem e como funcionam a um nível básico?
sobes.tech IA
Resposta da IA
Existem vários tipos principais de serviços no contexto da arquitetura de microserviços e sistemas distribuídos:
- Aplicações monolíticas: Uma única base de código indivisível que contém toda a funcionalidade da aplicação.
- Microserviços: Um conjunto de pequenos serviços independentes, cada um implementando uma lógica de negócio específica. Interagem entre si através de API.
- Serverless (sem servidor): Modelo de computação onde o provedor de nuvem gerencia dinamicamente a alocação e escalonamento de recursos. O desenvolvedor foca apenas no código das funções.
Ao nível baixo, o funcionamento é o seguinte:
Monolítico:
Executa-se como um processo único. Todos os componentes são carregados na memória ao mesmo tempo. A interação entre componentes ocorre através de chamadas de funções ou métodos dentro de um mesmo espaço de endereços. A tolerância a falhas é alcançada reservando todo o monolito. A escalabilidade é difícil, requer escalar toda a instância da aplicação. O uso de recursos é frequentemente redundante.
Microserviços:
Cada microserviço é um processo separado ou um conjunto de processos. Funciona no seu próprio ambiente isolado (contentor, máquina virtual). A interação ocorre através da rede, geralmente via HTTP/gRPC sobre protocolos síncronos ou assíncronos (por exemplo, RabbitMQ, Kafka para assíncronia). Cada serviço pode ter sua própria pilha tecnológica e base de dados. A escalabilidade é independente para cada serviço. Garante alta resistência a falhas (falha de um serviço não afeta os outros) e melhor utilização de recursos. A gestão torna-se mais complexa (é necessário Service Discovery, API Gateway, logging e monitoramento distribuídos).
Exemplo de interação de rede entre microserviços:
// Requisição ao Serviço A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Resposta do Serviço A
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"username": "testuser"
}
Serverless:
O código da função é implantado num ambiente de nuvem. O provedor de nuvem executa o código em resposta a eventos específicos (requisições HTTP, mensagens em filas, alterações na base de dados). A infraestrutura (servidores, SO) é gerida pelo provedor. As funções são geralmente de curta duração e sem estado (sem guardar estado entre chamadas). O escalonamento é automático, baseado na quantidade de eventos. A faturação é feita consoante o consumo de recursos (número de execuções, tempo de execução). Ao nível baixo, o provedor usa contentores ou máquinas virtuais para isolar e executar funções, mas este nível está abstraído do utilizador.
Exemplo de função Serverless (AWS Lambda):
# Função Lambda simples
import json
def lambda_handler(event, context):
# Processamento do evento de entrada
# Execução da lógica
response_body = {
"message": "Olá do Lambda!",
"input": event
}
return {
"statusCode": 200,
"body": json.dumps(response_body)
}
Tabela comparativa:
| Característica | Monolítico | Microserviços | Serverless |
|---|---|---|---|
| Arquitetura | Base de código única | Serviços independentes | Funções gerenciadas por eventos |
| Desdobramento | Processo único | Independente para cada serviço | Gerenciado pelo provedor |
| Escalabilidade | Horizontal (cópia) | Independente para cada serviço | Automático, por eventos |
| Tolerância a falhas | Baixa | Alta (isolados) | Alta (integrada) |
| Utilização de recursos | Parcialmente redundante | Mais eficiente | Pagamento por uso |
| Complexidade de gestão | Baixa | Alta | Baixa (para infraestrutura) |
| Comunicação | Dentro do processo | Por rede (API, mensagens) | Através de eventos do provedor |