Sobes.tech
Middle

Jakie rodzaje usług istnieją i jak działają na niskim poziomie?

sobes.tech AI

Odpowiedź od AI

Istnieje kilka głównych rodzajów usług w kontekście architektury mikroserwisów i systemów rozproszonych:

  • Aplikacje monolityczne: Jedna, niepodzielna baza kodu zawierająca całą funkcjonalność aplikacji.
  • Mikroserwisy: Zestaw małych, niezależnych usług, z których każda implementuje określoną logikę biznesową. Współpracują ze sobą przez API.
  • Serverless (bezserwerowe): Model obliczeń, w którym dostawca chmury dynamicznie zarządza przydziałem i skalowaniem zasobów. Programista skupia się tylko na kodzie funkcji.

Na niskim poziomie działanie wygląda następująco:

Monolit:

Działa jako pojedynczy proces. Wszystkie komponenty są ładowane do pamięci jednocześnie. Interakcja między komponentami odbywa się przez wywołania funkcji lub metod w obrębie tej samej przestrzeni adresowej. Odporność na awarie osiąga się przez rezerwację całego monolitu. Skalowanie jest trudne, wymaga skalowania całej instancji aplikacji. Wykorzystanie zasobów jest często nadmiarowe.

Mikroserwisy:

Każdy mikroserwis to osobny proces lub zestaw procesów. Działa w odizolowanym środowisku (kontener, maszyna wirtualna). Interakcja odbywa się przez sieć, zwykle przez HTTP/gRPC na bazie synchronicznych lub asynchronicznych protokołów (np. RabbitMQ, Kafka dla asynchroniczności). Każdy serwis może mieć własny stos technologiczny i bazę danych. Skalowanie jest niezależne dla każdego serwisu. Zapewnia wysoką odporność na awarie (awaria jednego serwisu nie wpływa na inne) i lepsze wykorzystanie zasobów. Zarządzanie jest bardziej skomplikowane (wymaga Service Discovery, API Gateway, rozproszonego logowania i monitorowania).

Przykład sieciowej interakcji mikroserwisów:

// Zapytanie do serwisu A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Odpowiedź od serwisu A
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "username": "testuser"
}

Serverless:

Kod funkcji jest wdrażany w środowisku chmurowym. Dostawca chmury uruchamia kod w odpowiedzi na określone zdarzenia (żądania HTTP, wiadomości w kolejce, zmiany w bazie danych). Infrastrukturę (serwery, OS) zarządza dostawca. Funkcje są zwykle krótkotrwałe i bezstanowe (bez przechowywania stanu między wywołaniami). Skalowanie jest automatyczne, oparte na liczbie zdarzeń. Opłaty są naliczane na podstawie zużycia zasobów (liczba wykonania, czas pracy). Na niskim poziomie dostawca używa kontenerów lub maszyn wirtualnych do izolacji i wykonywania funkcji, ale ten poziom jest od użytkownika abstrakcyjny.

Przykład funkcji Serverless (AWS Lambda):

# Prosta funkcja Lambda
import json

def lambda_handler(event, context):
    # Przetwarzanie nadchodzącego zdarzenia
    # Wykonanie logiki
    response_body = {
        "message": "Witaj z Lambda!",
        "input": event
    }

    return {
        "statusCode": 200,
        "body": json.dumps(response_body)
    }

Tabela porównawcza:

Cecha Monolityczny Mikroserwisy Serverless
Architektura Pojedyncza baza kodu Niezależne usługi Funkcje zarządzane przez zdarzenia
Wdrażanie Pojedynczy proces Niezależne dla każdej usługi Zarządzane przez dostawcę
Skalowalność Pozioma (kopiowanie) Niezależne dla każdej usługi Automatyczna, na podstawie zdarzeń
Odporność na błędy Niska Wysoka (izolowane) Wysoka (wbudowana)
Wykorzystanie zasobów Częściowo nadmiarowe Bardziej efektywne Płatność za zużycie
Złożoność zarządzania Niska Wysoka Niska (dla infrastruktury)
Komunikacja Wewnątrz procesu Przez sieć (API, wiadomości) Przez zdarzenia dostawcy