Sobes.tech
Middle

Jaké druhy služeb existují a jak fungují na nízké úrovni?

sobes.tech AI

Odpověď od AI

Existuje několik hlavních typů služeb v kontextu architektury mikroservis a distribuovaných systémů:

  • Monolitické aplikace: Jednotná, nedělitelná základní kódová báze obsahující veškerou funkčnost aplikace.
  • Mikroservisy: Sada malých, nezávislých služeb, z nichž každá implementuje určitou obchodní logiku. Vzájemně spolu komunikují přes API.
  • Serverless (bez serverů): Model výpočtů, kde poskytovatel cloudu dynamicky spravuje přidělování a škálování zdrojů. Vývojář se zaměřuje pouze na kód funkcí.

Na nízké úrovni fungování vypadá takto:

Monolit:

Provádí se jako jediný proces. Všechny komponenty jsou načítány do paměti současně. Interakce mezi komponentami probíhá přes volání funkcí nebo metod uvnitř stejného adresního prostoru. Odolnost vůči chybám je dosažena zálohováním celého monolitu. Škálování je obtížné, je třeba škálovat celý exemplář aplikace. Použití zdrojů je často nadbytečné.

Mikroservisy:

Každý mikroservis je samostatný proces nebo sada procesů. Funguje ve svém izolovaném prostředí (kontejner, virtuální stroj). Interakce probíhá přes síť, obvykle přes HTTP/gRPC na základě synchronních nebo asynchronních protokolů (například RabbitMQ, Kafka pro asynchronitu). Každý služba může mít svůj vlastní technologický stack a databázi. Škálování je nezávislé pro každý službu. Zajišťuje vysokou odolnost (selhání jedné služby neovlivňuje ostatní) a lepší využití zdrojů. Správa je složitější (je třeba Service Discovery, API Gateway, distribuované logování a monitorování).

Příklad síťové komunikace mikroservisů:

// Žádost na službu A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Odpověď od služby A
HTTP/1.1 200 OK
Content-Type: application/json

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

Serverless:

Kód funkce je nasazen v cloudovém prostředí. Poskytovatel cloudu spouští kód funkce jako reakci na určité události (HTTP požadavky, zprávy ve frontě, změny v databázi). Infrastrukturu (servery, OS) spravuje poskytovatel. Funkce jsou obvykle krátkodobé a bezstavové (stateless). Škálování je automatické, založené na počtu událostí. Platba probíhá podle spotřeby zdrojů (počet provedení, doba běhu). Na nízké úrovni poskytovatel používá kontejnery nebo virtuální stroje pro izolaci a vykonávání funkcí, ale tato úroveň je skryta před uživatelem.

Příklad serverless funkce (AWS Lambda):

# Jednoduchá Lambda funkce
import json

def lambda_handler(event, context):
    # Zpracování příchozí události
    # Vykonání logiky
    response_body = {
        "message": "Hello from Lambda!",
        "input": event
    }

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

Srovnávací tabulka:

Charakteristika Monolit Mikroservisy Serverless
Architektura Jednotná kódová báze Nezávislé služby Funkce, řízené událostmi
Nasazení Jediný proces Nezávislé pro každou službu Řízeno poskytovatelem
Škálování Horizontální (kopírování) Nezávislé pro každou službu Automatické, podle událostí
Odolnost vůči chybám Nízká Vysoká (izolované) Vysoká (vestavěná)
Využití zdrojů Částečně nadbytečné Efektivnější Platba za spotřebu
Složitost správy Nízká Vysoká Nízká (pro infrastrukturu)