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