Назад к вопросам
2gis
Senior
7
Что такое Graceful Shutdown и зачем он нужен?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Graceful Shutdown — это корректное завершение работы приложения или сервиса, при котором оно завершает текущие задачи, освобождает ресурсы и не принимает новые запросы. Это нужно, чтобы избежать потери данных, неконсистентного состояния и обеспечить плавный переход при обновлениях или остановке.
В Go это обычно реализуется с помощью прослушивания сигналов ОС (например, SIGINT, SIGTERM) и последующего вызова функций завершения:
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"time"
)
func main() {
srv := &http.Server{Addr: ":8080"}
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: %v", err)
}
log.Println("Server exiting")
}
Такой подход позволяет завершить обработку текущих запросов и корректно остановить сервер.