Загрузка...

RESTful API Golang Gin #56: Cách triển khai Graceful Shutdown cho API trong Golang (Gin Framework)

🔥 Chào mừng bạn đến với khóa học "Lập trình RESTful API với Gin Framework của Golang" cùng giảng viên Vũ Quốc Tuấn! Khóa học được thiết kế dành riêng cho người mới bắt đầu muốn xây dựng API chuyên nghiệp từ A-Z.

Bạn có chắc chắn rằng khi bạn dừng server của mình, các yêu cầu đang xử lý sẽ không bị ảnh hưởng không?
Chào mừng bạn quay trở lại với Bài số 56!

🎯 Tiếp nối bài học trước về cấu trúc dự án và tích hợp database/công cụ, trong video này, chúng ta sẽ tìm hiểu và triển khai một tính năng vô cùng quan trọng cho bất kỳ API nào: Graceful Shutdown. Đây là kỹ thuật giúp server của bạn dừng hoạt động một cách an toàn, đảm bảo các request đang được xử lý có đủ thời gian để hoàn thành trước khi server tắt hẳn, tránh gây lỗi cho người dùng.

📌 Nội dung chính trong video này:
✅ Khởi động server và sửa lỗi `invalid key` bằng cách cấu hình API Key trong file `.env` và Postman.
✅ Minh họa vấn đề: Dừng server đột ngột (Ctrl+C) khi đang có request đang xử lý (ví dụ: request mất 10 giây) và hậu quả (request bị lỗi).
✅ Giải thích tầm quan trọng của Graceful Shutdown trong môi trường production.
✅ Thay đổi cách khởi động server từ `router.Run` sang sử dụng `http.Server` và `ListenAndServe`.
✅ Sử dụng `os.Signal` và `signal.Notify` để lắng nghe các tín hiệu dừng từ hệ điều hành (SIGINT, SIGTERM, SIGHUP - tương ứng với Ctrl+C, Kill, Reload).
✅ Chạy `ListenAndServe` trong một Goroutine để không block luồng chính của chương trình.
✅ Chờ đợi tín hiệu dừng từ channel.
✅ Triển khai logic shutdown an toàn sử dụng phương thức `srv.Shutdown` của `http.Server`.
✅ Cấu hình thời gian chờ tối đa cho quá trình shutdown bằng `context.WithTimeout` (ví dụ: 15 giây).
✅ Xử lý các lỗi có thể xảy ra trong quá trình shutdown.
✅ Thực hiện Testing: Quan sát server chờ request hoàn thành khi tắt (nếu thời gian xử lý bé hơn timeout shutdown).
✅ Thực hiện Testing: Quan sát server bị buộc dừng (forced shutdown) khi thời gian xử lý của request vượt quá thời gian chờ shutdown.
✅ Nhấn mạnh lại sự khác biệt và lợi ích của Graceful Shutdown so với việc dừng server thông thường.

💡 Graceful Shutdown là một tính năng không thể thiếu để xây dựng một API mạnh mẽ, ổn định và thân thiện với người dùng, đặc biệt là khi bạn cần triển khai hoặc cập nhật ứng dụng mà không muốn làm gián đoạn các tác vụ đang chạy. Việc hiểu và áp dụng kỹ thuật này sẽ nâng cao chất lượng dự án của bạn đáng kể.

🔔 Đừng quên:
🚀 Theo dõi toàn bộ khóa học tại đây: https://www.youtube.com/playlist?list=PLTasIXUHepx1hPkFeN9OXa2bcuILAqiJM
👍 Nhấn LIKE video này nếu bạn thấy hữu ích.
🎯 SUBSCRIBE (Đăng ký) kênh và bật chuông thông báo để nhận được những bài học mới nhất về lập trình Golang, Gin Framework và RESTful API.
📩 Tham gia nhóm học tập: https://discord.gg/qpR8TydEyF
📚 Tài liệu & Source code: https://github.com/quoctuan9901/khoa-hoc-lap-trinh-restful-api-voi-gin-framework

⏰ Timestamps:
0:10 - Giới thiệu nội dung bài trước & bài học này (Graceful Shutdown)
0:42 - Bắt đầu thực hành: Start server
0:54 - Lỗi "no go file" & cách chạy lệnh make server đúng
1:19 - Chạy make server thành công
1:22 - Test API lần đầu & gặp lỗi "invalid key"
1:28 - Sửa lỗi "invalid key" (.env & Postman)
1:49 - Restart server sau khi sửa key
2:15 - Test API thành công
2:29 - Thêm delay 10 giây vào API handler để minh họa
3:14 - Restart server với delay
3:24 - Test API với delay & theo dõi log
3:46 - Minh họa vấn đề: Dừng server đột ngột (Ctrl+C) khi request đang chạy
4:03 - Giải thích hậu quả: Request bị lỗi
4:33 - Giới thiệu giải pháp: Graceful Shutdown
4:48 - Bắt đầu triển khai Graceful Shutdown (sửa app.go)
5:03 - Thay thế router.Run bằng http.Server
5:10 - Khởi tạo http.Server với Address và Handler
5:50 - Sử dụng ListenAndServe
6:59 - Xử lý lỗi từ ListenAndServe
8:43 - Triển khai lắng nghe tín hiệu OS
8:52 - Tạo channel os.Signal
9:21 - Sử dụng signal.Notify lắng nghe SIGINT, SIGTERM, SIGHUP
11:54 - Chạy ListenAndServe trong Goroutine
12:56 - Log thông báo server đang chạy
13:37 - Chờ tín hiệu dừng từ channel
14:51 - Bắt đầu quá trình Shutdown
15:00 - Tạo context với Timeout (15 giây)
15:55 - Gọi srv.Shutdown với context
16:16 - Xử lý lỗi khi Shutdown
17:28 - Log thông báo Shutdown thành công
18:15 - Build & chạy server với Graceful Shutdown
18:23 - Test Graceful Shutdown (API delay 10s, nhấn Ctrl+C)
19:01 - Quan sát server chờ request hoàn thành
19:28 - Test Forced Shutdown (tăng API delay lên 20s)
20:03 - Test Forced Shutdown (nhấn Ctrl+C)
20:21 - Server bị buộc dừng sau thời gian timeout
20:42 - Giải thích ý nghĩa của timeout trong Shutdown
20:52 - Tóm tắt lợi ích của Graceful Shutdown
21:04 - Test lại với API delay 10s (xác nhận lại)
21:41 - So sánh với dừng server thông thường
22:02 - Tinh chỉnh code & kết thúc

Cảm ơn bạn đã theo dõi bài học này! Graceful Shutdown là một kỹ thuật nền tảng quan trọng. Nếu có bất kỳ câu hỏi nào về cách triển khai, các tín hiệu OS, hay bất cứ điều gì khác, đừng ngần ngại để lại bình luận bên dưới nhé. Hẹn gặp lại bạn trong video tiếp theo!

Видео RESTful API Golang Gin #56: Cách triển khai Graceful Shutdown cho API trong Golang (Gin Framework) канала Code With Tuan
Яндекс.Метрика
Все заметки Новая заметка Страницу в заметки
Страницу в закладки Мои закладки
На информационно-развлекательном портале SALDA.WS применяются cookie-файлы. Нажимая кнопку Принять, вы подтверждаете свое согласие на их использование.
О CookiesНапомнить позжеПринять