Sobes.tech
Middle

Kas yra mikroservisų architektūra? Kokie yra jos privalumai ir trūkumai?

sobes.tech AI

Atsakymas iš AI

Mikrosistemų architektūra yra požiūris į programinės įrangos kūrimą, kai programa kuriama kaip mažų, autonominių paslaugų rinkinys, iš kurių kiekviena įgyvendina tam tikrą verslo funkciją ir sąveikauja su kitomis paslaugomis per lengvus mechanizmus, pavyzdžiui, HTTP API.

Privalumai:

  • Mastelio keitimas: Paslaugas galima mastelio keisti nepriklausomai, priklausomai nuo apkrovos konkrečiai funkcijai.
  • Atsparumas gedimams: Vienos paslaugos gedimas nepaveikia kitų veikimo.
  • Technologijų lankstumas: Kiekviena paslauga gali būti įgyvendinta savo technologijų rinkiniu.
  • Supaprastintas diegimas: Paslaugos diegiamos ir atnaujinamos nepriklausomai.
  • Komandos produktyvumo didinimas: Mažos komandos gali dirbti su atskirais paslaugomis paraleliai.

Minusai:

  • Valdymo sudėtingumas: Išskaidyta sistema reikalauja sudėtingesnių stebėjimo, žurnalų ir klaidų derinimo mechanizmų.
  • Tarppaslaugų sąveikos sudėtingumas: Reikia apgalvoti sinchroninės ir asinchroninės sąveikos mechanizmus, klaidų apdorojimą.
  • Dublikatų atsiradimas: Gali atsirasti kodo ar duomenų dubliavimas tarp paslaugų.
  • Įrankių išlaidos: Reikalingi papildomi įrankiai paslaugų aptikimui ir API valdymui.

Pavyzdys (paprastas sąveikos būdas):

# Pavyzdys, kaip dvi mikrosistemas A ir B sąveikauja

# Mikrosistema A (siunčia užklausą)
import requests

def get_user_data(user_id):
    try:
        response = requests.get(f'http://microservice_b:5001/users/{user_id}')
        response.raise_for_status() # Patikrina sėkmingą atsakymą
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Klaida užklausos metu į mikrosistemą B: {e}")
        return None

# Realiame sistemoje klaidų tvarkymas ir pakartotiniai bandymai bus sudėtingesni

# Mikrosistema B (apdoroja užklausą)
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": "Vartotojas nerastas"}), 404

if __name__ == '__main__':
    # Realiame taikyme portai ir hostai bus valdomi orkestratoriaus
    app.run(host='0.0.0.0', port=5001)