Back to questions
2gis
Senior
3
Что произойдёт с текущими запросами без Graceful Shutdown при завершении процесса?
Companies where asked
Answer from AI
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 запросы прерываются, а с ним — завершаются корректно.