Sobes.tech
Middle

O que é arquitetura de microsserviços? Quais são os seus prós e contras?

sobes.tech IA

Resposta da IA

A arquitetura de microserviços é uma abordagem ao desenvolvimento de software na qual a aplicação é construída como um conjunto de pequenos serviços autónomos, cada um dos quais implementa uma funcionalidade empresarial específica e comunica com outros serviços através de mecanismos leves, como API HTTP.

Vantagens:

  • Escalabilidade: Os serviços podem ser escalados de forma independente, dependendo da carga numa funcionalidade específica.
  • Resiliência a falhas: A falha de um serviço não afeta o funcionamento dos outros.
  • Flexibilidade na escolha de tecnologias: Cada serviço pode ser implementado com o seu próprio stack tecnológico.
  • Simplificação do deployment: Os serviços são implantados e atualizados de forma independente.
  • Aumento da produtividade da equipa: Equipas pequenas podem trabalhar em serviços separados em paralelo.

Desvantagens:

  • Complexidade de gestão: Um sistema distribuído requer mecanismos mais complexos de monitorização, registo e depuração.
  • Complexidade na interação entre serviços: É necessário planear mecanismos de interação síncrona e assíncrona, bem como gestão de erros.
  • Redundância: Podem surgir duplicações de código ou dados entre serviços.
  • Custos de ferramentas: São necessárias ferramentas adicionais para orquestração, descoberta de serviços e gestão de APIs.

Exemplo (vista simplificada de interação):

# Exemplo de interação entre dois microserviços A e B

# Microserviço A (envia requisição)
import requests

def get_user_data(user_id):
    try:
        response = requests.get(f'http://microservice_b:5001/users/{user_id}')
        response.raise_for_status() # Verificação do estado da resposta
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Erro na requisição ao microserviço B: {e}")
        return None

# Microserviço B (processa a requisição)
from flask import Flask, jsonify

app = Flask(__name__)

users = {
    1: {"name": "Alice", "email": "alice@example.com"},
    2: {"name": "Bob", "email": "bob@example.com"}
}

@app.route('/users/<int:user_id>')
def get_user(user_id):
    user = users.get(user_id)
    if user:
        return jsonify(user), 200
    else:
        return jsonify({"error": "Utilizador não encontrado"}), 404

if __name__ == '__main__':
    # Em uma aplicação real, as portas e hosts serão geridos por um orquestrador
    app.run(host='0.0.0.0', port=5001)