Что такое Stateful подход к разработке сервиса

«Что такое Stateful подход к разработке сервиса» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Stateful сервис хранит состояние (данные) между запросами. Это означает, что сервер помнит предыдущие взаимодействия с клиентом и использует эту информацию для обработки новых запросов.

Пример:

type Session struct {
    UserID string
    Expiry time.Time
}

var sessions = make(map[string]Session) // Хранилище состояний

func login(w http.ResponseWriter, r *http.Request) {
    sessionID := uuid.New().String()
    sessions[sessionID] = Session{UserID: "123", Expiry: time.Now().Add(24 * time.Hour)}
    http.SetCookie(w, &http.Cookie{Name: "session_id", Value: sessionID})
}

func profile(w http.ResponseWriter, r *http.Request) {
    cookie, _ := r.Cookie("session_id")
    session := sessions[cookie.Value] // Используем сохранённое состояние
    fmt.Fprintf(w, "UserID: %s", session.UserID)
}

Плюсы:

  • Удобен для сложных сценариев (например, корзина покупок).
  • Меньше нагрузки на клиент.

Минусы:

  • Сложнее масштабировать (требует sticky sessions или общего хранилища).
  • Риски потери данных при сбоях.

Подходит для сервисов, где важно сохранять контекст между запросами.