Sobes.tech
Middle

Co je to mikroservisní architektura? Jaké jsou její výhody a nevýhody?

sobes.tech AI

Odpověď od AI

Architektura mikroservis je přístup k vývoji softwaru, při kterém je aplikace sestavena jako sada malých, autonomních služeb, z nichž každá implementuje určitou obchodní funkci a komunikuje s ostatními službami prostřednictvím lehkých mechanismů, například HTTP API.

Výhody:

  • Škálovatelnost: Služby lze škálovat nezávisle v závislosti na zátěži na konkrétní funkci.
  • Odolnost vůči chybám: Selhání jedné služby neovlivní fungování ostatních.
  • Flexibilita ve výběru technologií: Každá služba může být realizována na vlastním technologickém stacku.
  • Zjednodušení nasazení: Služby jsou nasazovány a aktualizovány nezávisle.
  • Zvýšení produktivity týmu: Malé týmy mohou pracovat na samostatných službách paralelně.

Nevýhody:

  • Složitost správy: Distribuovaný systém vyžaduje složitější mechanismy monitorování, logování a ladění.
  • Složitost interakce mezi službami: Je třeba promyslet mechanismy synchronní a asynchronní komunikace, zpracování chyb.
  • Redundance: Může dojít k duplikaci kódu nebo dat mezi službami.
  • Náklady na nástroje: Vyžadují se dodatečné nástroje pro orchestraci, objevování služeb a správu API.

Příklad (zjednodušený pohled na interakci):

# Příklad interakce mezi dvěma mikroservisy A a B

# Mikroservis A (odesílá požadavek)
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 úspěšnosti odpovědi
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Chyba při požadavku na mikroservis B: {e}")
        return None

# Mikroservis B (zpracovává požadavek)
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": "Uživatel nenalezen"}), 404

if __name__ == '__main__':
    # V reálné aplikaci budou porty a hostitelé řízeni orchestrátorem
    app.run(host='0.0.0.0', port=5001)