Sobes.tech
Middle

Aké druhy služieb existujú a ako fungujú na nízkej úrovni?

sobes.tech AI

Odpoveď od AI

Existuje niekoľko hlavných typov služieb v kontexte mikroservisnej architektúry a distribuovaných systémov:

  • Monolitické aplikácie: Jednotná, nedeliteľná kódová základňa obsahujúca všetku funkčnosť aplikácie.
  • Mikroslužby: Sada malých, nezávislých služieb, z ktorých každá implementuje určitú obchodnú logiku. Vzájomne komunikujú cez API.
  • Serverless (bez serverov): Model výpočtov, kde poskytovateľ cloudu dynamicky spravuje prideľovanie a škálovanie zdrojov. Vývojár sa zameriava iba na kód funkcií.

Na nízkej úrovni fungovanie vyzerá takto:

Monolit:

Vykonáva sa ako jeden proces. Všetky komponenty sa načítavajú súčasne do pamäti. Interakcia medzi komponentami prebieha cez volania funkcií alebo metód v rámci rovnakého adresného priestoru. Odolnosť voči chybám sa dosahuje zálohovaním celého monolitu. Škálovanie je ťažké, je potrebné škálovať celý príklad aplikácie. Použitie zdrojov je často nadbytočné.

Mikroslužby:

Každý mikroslužba je samostatný proces alebo súbor procesov. Funguje vo svojom izolovanom prostredí (kontajner, virtuálny stroj). Interakcia prebieha cez sieť, zvyčajne cez HTTP/gRPC na základe synchronných alebo asynchrónnych protokolov (napríklad RabbitMQ, Kafka pre asynchrónnosť). Pre každý servis môže byť vlastný technologický stack a databáza. Škálovanie je nezávislé pre každý servis. Zabezpečuje vysokú odolnosť (zlyhanie jedného servisu neovplyvňuje ostatné) a lepšie využitie zdrojov. Správa je zložitejšia (potrebné sú Service Discovery, API Gateway, rozdelené logovanie a monitorovanie).

Príklad sieťovej komunikácie mikroservisov:

// Žiadosť na Službu A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Odpoveď od Služby A
HTTP/1.1 200 OK
Content-Type: application/json

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

Serverless:

Kód funkcie je nasadený v cloudovom prostredí. Poskytovateľ cloudu spúšťa kód funkcie ako reakciu na určité udalosti (HTTP požiadavky, správy vo fronte, zmeny v databáze). Infrastruktúru (servery, OS) spravuje poskytovateľ. Funkcie sú zvyčajne krátkodobé a bezstavové (stateless). Škálovanie je automatické, založené na počte udalostí. Platba prebieha podľa spotreby zdrojov (počet vykonaní, čas behu). Na nízkej úrovni poskytovateľ používa kontajnery alebo virtuálne stroje na izoláciu a vykonávanie funkcií, ale tento stupeň je skrytý od používateľa.

Príklad serverless funkcie (AWS Lambda):

# Jednoduchá Lambda funkcia
import json

def lambda_handler(event, context):
    # Spracovanie vstupného udalosti
    # Vykonanie logiky
    response_body = {
        "message": "Hello from Lambda!",
        "input": event
    }

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

Porovnávacia tabuľka:

Charakteristika Monolit Mikroslužby Serverless
Architektúra Jednotná kódová základňa Nezávislé služby Funkcie, riadené udalosťami
Nasadenie Jediný proces Nezávislé pre každú službu Riadi to poskytovateľ
Škálovanie Horizontálne (kopírovanie) Nezávislé pre každú službu Automatické, podľa udalostí
Odolnosť voči chybám Nízka Vysoká (izolované) Vysoká (vestavěná)
Využitie zdrojov Čiastočne nadbytočné Efektívnejšie Platba za spotrebu
Zložitosť správy Nízka Vysoká Nízka (pre infraštruktúru)