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) |