Sobes.tech
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)