Middle
Čo je to mikroservisná architektúra? Aké sú jej výhody a nevýhody?
sobes.tech AI
Odpoveď od AI
Mikroslužbová architektúra je prístup k vývoju softvéru, pri ktorom je aplikácia zostavená ako súbor malých, autonómnych služieb, z ktorých každý implementuje určitú obchodnú funkčnosť a komunikuje s inými službami prostredníctvom ľahkých mechanizmov, napríklad HTTP API.
Výhody:
- Škálovateľnosť: Službám je možné nezávisle škálovať v závislosti od zaťaženia konkrétnej funkcie.
- Odolnosť voči chybám: Zlyhanie jednej služby neovplyvňuje fungovanie ostatných.
- Flexibilita vo výbere technológií: Každá služba môže byť implementovaná na vlastnom technologickom stacku.
- Zjednodušenie nasadzovania: Služby sa nasadzujú a aktualizujú nezávisle.
- Zvýšenie produktivity tímu: Malé tímy môžu pracovať na samostatných službách paralelne.
Nevýhody:
- Zložitosť riadenia: Distribuovaný systém vyžaduje zložitejšie mechanizmy monitorovania, logovania a ladenia.
- Zložitosť medzi-službovej komunikácie: Je potrebné premyslieť mechanizmy synchronnej a asynchrónnej interakcie, spracovania chýb.
- Redundancia: Môžu vzniknúť duplikácie kódu alebo dát medzi službami.
- Nástrojové náklady: Sú potrebné dodatočné nástroje na orchestráciu, objavovanie služieb a správu API.
Príklad (zjednodušený spôsob interakcie):
# Príklad interakcie medzi dvoma mikroslužbami A a B
# Mikroslužba A (odosiela požiadavku)
import requests
def get_user_data(user_id):
try:
response = requests.get(f'http://microservice_b:5001/users/{user_id}')
response.raise_for_status() # Kontrola úspešnosti odpovede
return response.json()
except requests.exceptions.RequestException as e:
print(f"Chyba pri požiadavke na mikroslužbu B: {e}")
return None
# V reálnom systéme bude zložitejšia správa chýb a opakované pokusy
# Mikroslužba B (spracováva požiadavku)
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": "Používateľ nenájdený"}), 404
if __name__ == '__main__':
# V reálnej aplikácii budú porty a hostitelia riadení orchestrátorom
app.run(host='0.0.0.0', port=5001)