Sobes.tech
Назад к вопросам
Senior
2

Что произойдёт с текущими запросами без Graceful Shutdown при завершении процесса?

Компании, где спрашивали
2gis2gis

Ответ от нейросети

sobes.tech AI

Без Graceful Shutdown при завершении процесса в Go текущие запросы прерываются сразу, так как процесс завершается без ожидания завершения обработки. Это может привести к:

  • Потере данных или неполной обработке запросов.
  • Нарушению целостности транзакций.
  • Ошибкам на стороне клиентов.

Graceful Shutdown позволяет корректно завершить все активные запросы, закрыть соединения и освободить ресурсы перед остановкой приложения. В Go это обычно реализуется через контекст с таймаутом и обработку сигналов ОС, например:

func main() {
    srv := &http.Server{Addr: ":8080", Handler: myHandler}

    go func() {
        if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
            log.Fatalf("ListenAndServe(): %v", err)
        }
    }()

    quit := make(chan os.Signal, 1)
    signal.Notify(quit, os.Interrupt)
    <-quit

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()
    if err := srv.Shutdown(ctx); err != nil {
        log.Fatalf("Server Shutdown Failed:%+v", err)
    }
    log.Println("Server exited properly")
}

Таким образом, без graceful shutdown запросы прерываются, а с ним — завершаются корректно.