Sobes.tech
Middle

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