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)