Sobes.tech
Middle

Какви видове услуги съществуват и как функционират на ниско ниво?

sobes.tech AI

Отговор от AI

Съществуват няколко основни вида услуги в контекста на микросервизната архитектура и разпределените системи:

  • Монолитни приложения: Едно, неделимо кодово базово, съдържащо цялата функционалност на приложението.
  • Микросервизи: Набор от малки, независими услуги, всяка реализираща определена бизнес логика. Взаимодействат помежду си чрез API.
  • Serverless (без сървъри): Модел на изчисления, при който доставчикът на облака динамично управлява разпределението и мащабирането на ресурсите. Разработчикът се фокусира само върху кода на функциите.

На ниско ниво функционирането изглежда така:

Монолит:

Изпълнява се като един процес. Всички компоненти се зареждат едновременно в паметта. Взаимодействието между компонентите става чрез извиквания на функции или методи в една и съща адресна площ. Устойчивостта на грешки се постига чрез резервиране на целия монолит. Мащабирането е трудно, необходимо е да се мащабира цялото приложение. Използването на ресурси често е излишно.

Микросервизи:

Всеки микросервиз е отделен процес или набор от процеси. Работи в изолиран околен свят (контейнер, виртуална машина). Взаимодействието става по мрежата, обикновено чрез HTTP/gRPC на базата на синхронни или асинхронни протоколи (например RabbitMQ, Kafka за асинхронност). За всеки сервиз може да има свой стек технологии и база данни. Мащабирането става независимо за всеки сервиз. Осигурява висока устойчивост (отказ на един сервиз не влияе на другите) и по-добро използване на ресурсите. Управлението става по-сложно (необходими са Service Discovery, API Gateway, разпределено логване и мониторинг).

Пример за мрежова комуникация между микросервизи:

// Заявка към Сервиз А
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Отговор от Сервиз А
HTTP/1.1 200 OK
Content-Type: application/json

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

Serverless:

Кодът на функцията се разгръща в облачната среда. Доставчикът на облака стартира кода на функцията в отговор на определени събития (HTTP заявки, съобщения в опашка, промени в базата данни). Инфраструктурата (сървъри, ОС) се управлява от доставчика. Функциите обикновено са краткотрайни и безсъстояние (stateless). Мащабирането е автоматично, базирано на броя на събитията. Плащането става според потреблението на ресурси (броя изпълнения, време на работа). На ниско ниво доставчикът използва контейнери или виртуални машини за изолация и изпълнение на функциите, но този слой е скрит за потребителя.

Пример за Serverless функция (AWS Lambda):

# Прост пример за Lambda функция
import json

def lambda_handler(event, context):
    # Обработка на входящото събитие
    # Изпълнение на логиката
    response_body = {
        "message": "Hello from Lambda!",
        "input": event
    }

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

Сравнителна таблица:

Характеристика Монолит Микросервизи Serverless
Архитектура Едно кодово базово Независими услуги Функции, управлявани от събития
Разгръщане Еднопроцесен Независимо за всяка услуга Управлява се от доставчика
Мащабиране Хоризонтално (копиране) Независимо за всяка услуга Автоматично, по събития
Устойчивост към грешки Ниска Висока (изолирани) Висока (вградена)
Използване на ресурси Частично излишно По-ефективно Плащане за потребление
Сложност на управлението Ниска Висока Ниска (за инфраструктурата)