Sobes.tech
Middle

Šta je mikroservisna arhitektura? Koje su njene prednosti i mane?

sobes.tech АИ

Одговор од АИ

Микросервисна архитектура — тој пристап у развоју софтвера у којем се апликација гради као скуп малих, самосталних сервиса, од којих сваки реализује одређену пословну функционалност и комуницира са другим сервисима преко лаких механизама, на пример, HTTP API.

Плусеви:

  • Масовност: Сервисима се може управљати независно у зависности од оптерећења одређене функционалности.
  • Отпорност на отказе: Отказ једног сервиса не утиче на рад других.
  • Флексибилност у избору технологија: Сваки сервис може бити реализован на свом технолошком стеку.
  • Олакшање деплоја: Сервиси се деплојују и ажурирају независно.
  • Повећање продуктивности тима: Мале екипе могу радити на одвојеним сервисима паралелно.

Минуси:

  • Компликованост управљања: Расподељени систем захтева сложеније механизме мониторинга, логовања и дебаговања.
  • Компликованост међусервисне комуникације: Потребно је размотрити механизме синхроне и асинхроне интеракције, обраду грешака.
  • Репетитивност: Могу се појавити дуплирања кода или података између сервиса.
  • Инструментални трошкови: Потребни су додатни алати за оркестрацију, откривање сервиса и управљање API-јем.

Пример (поједностављени облик интеракције):

# Пример интеракције између два микросервиса A и B

# Микросервис A (шаље захтев)
import requests

def get_user_data(user_id):
    try:
        response = requests.get(f'http://microservice_b:5001/users/{user_id}')
        response.raise_for_status() # Провера успешног статуса одговора
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Грешка при захтеву према микросервису B: {e}")
        return None

# У реалном систему би била сложенија обрада грешака и поновни покушаји

# Микросервис B (обрађује захтев)
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": "Корисник није пронађен"}), 404

if __name__ == '__main__':
    # У реалној апликацији портови и хостови ће бити управљани оркестратором
    app.run(host='0.0.0.0', port=5001)