Sobes.tech
Middle

Kokie paslaugų rūšys egzistuoja ir kaip jos veikia žemo lygio?

sobes.tech AI

Atsakymas iš AI

Yra keletas pagrindinių paslaugų tipų mikropaslaugų architektūros ir paskirstytų sistemų kontekste:

  • Monolitinės programos: Vieninga, nepadaloma kodo bazė, apimanti visas programos funkcijas.
  • Mikropaslaugos: Maži, nepriklausomi paslaugų rinkiniai, kiekviena įgyvendina tam tikrą verslo logiką. Sąveikauja per API.
  • Serverless (be serverių): Debesų teikėjas dinamiškai valdo išteklių paskirstymą ir mastelio keitimą. Dėmesys skiriamas tik funkcijų kodui.

Veikimas žemame lygyje atrodo taip:

Monolitas:

Veikia kaip vienas procesas. Visi komponentai įkelti į atmintį vienu metu. Sąveika tarp komponentų vyksta per funkcijų ar metodų iškvietimus vienoje adresų erdvėje. Atsparumas gedimams pasiekiamas viso monolito rezervavimu. Mastelio keitimas sudėtingas, reikia išplėsti visą programą. Ištekliai dažnai naudojami pertekliniai:

Mikropaslaugos:

Kiekviena mikropaslauga – atskiras procesas arba procesų rinkinys. Veikia savo izoliuotoje aplinkoje (konteineryje, virtualioje mašinoje). Sąveika vyksta per tinklą, dažniausiai per HTTP/gRPC – sinchroninius arba asinchroninius protokolus (pvz., RabbitMQ, Kafka). Kiekviena paslauga gali turėti savo technologijų rinkinį ir duomenų bazę. Mastelio keitimas vyksta nepriklausomai kiekvienai paslaugai. Užtikrinama aukšta patikimumas (vienos paslaugos gedimas neturi įtakos kitoms) ir efektyvus išteklių naudojimas. Valdymas sudėtingėja (reikalingas Service Discovery, API Gateway, logavimas ir stebėsena).

Pavyzdys tinklo sąveikos tarp mikropaslaugų:

// Užklausa paslaugai A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Atsakymas iš paslaugos A
HTTP/1.1 200 OK
Content-Type: application/json

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

Serverless:

Funkcijos kodas įdiegtas debesų aplinkoje. Debesų teikėjas paleidžia funkciją reaguodamas į tam tikrus įvykius (HTTP užklausas, eilės pranešimus, duomenų bazės pakeitimus). Infrastruktūrą (serverius, OS) valdo teikėjas. Funkcijos dažniausiai yra trumpalaikės ir be būsenos (neturi išsaugotos būsenos tarp iškvietimų). Mastelio keitimas vyksta automatiškai, remiantis įvykių skaičiumi. Mokėjimas atliekamas pagal išteklių naudojimą (vykdymo skaičius, darbo laikas). Žemame lygyje teikėjas naudoja konteinerius arba virtualias mašinas funkcijų izoliacijai ir vykdymui, tačiau šis lygis yra paslėptas naudotojui:

AWS Lambda pavyzdys — Serverless funkcija:

# Paprasta Lambda funkcija
import json

def lambda_handler(event, context):
    # Apdoroti įeinantį įvykį
    # Vykdyti logiką
    response_body = {
        "message": "Hello from Lambda!",
        "input": event
    }

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

Palyginamasis lentelė:

Savybė Monolitas Mikropaslaugos Serverless
Architektūra Viena kodo bazė Nepriklausomos paslaugos Funkcijos, valdomos įvykių
Diegimas Vienas procesas Kiekvienai paslaugai nepriklausomas Valdo teikėjas
Mastelio keitimas Horizontalus (kopijavimas) Kiekvienai paslaugai nepriklausomas Automatinis, įvykių pagrindu
Atsparumas gedimams Žemas Aukštas (atskirtas) Aukštas (įmontuotas)
Išteklių naudojimas Kartais perteklinis Efektyvesnis Mokėjimas pagal naudojimą
Valdymo sudėtingumas Žemas Aukštas Žemas (infrastruktūrai)
Komunikacija Vidinis procesas Tinklas (API, pranešimai) Per įvykius teikėjo