Cách Cloudflare rút ngắn thời gian khởi động server từ hàng giờ xuống còn vài phút
Khám phá cách đội ngũ kỹ sư Cloudflare giải quyết vấn đề server mất hàng giờ để khởi động sau khi cập nhật firmware bằng cách tinh chỉnh quy trình UEFI và network...
Tại Cloudflare, hệ thống core đóng vai trò trung tâm trong việc vận hành control plane, thanh toán và phân tích dữ liệu. Khác với các server ở edge xử lý lưu lượng người dùng, các server core là hệ thống bare metal. Khi xảy ra sự cố trong quá trình reboot, hậu quả có thể lan rộng rất nhanh. Gần đây, sau một bản cập nhật firmware định kỳ, một số server core của chúng tôi đã mất tới bốn giờ để khởi động lại, thay vì chỉ vài phút như trước đây. Điều này biến việc triển khai trên toàn hệ thống vốn chỉ mất một ngày thành một quy trình kéo dài nhiều ngày đầy khó khăn.
Table Of Content
Vấn đề: Sự cố tìm kiếm tuyến tính trong UEFI
Sau khi phân tích qua cổng console, chúng tôi phát hiện firmware thực hiện quá trình tìm kiếm tuyến tính (linear search) qua mọi giao diện network boot khả dụng. Hệ thống thử khởi động qua IPv4 HTTPS, đợi timeout sau vài phút, sau đó chuyển sang IPv4 iPXE, lại đợi timeout, và cứ thế lặp lại cho đến khi tìm thấy giao diện IPv6 HTTPS thành công.
Mỗi lần thử thất bại tiêu tốn khoảng 5 phút chờ timeout. Với bốn lần thử trước khi đến đúng giao diện, mỗi chu kỳ khởi động lãng phí khoảng 20 phút. Đối với các bản cập nhật firmware yêu cầu nhiều lần reboot tuần tự, tổng thời gian chờ đợi cộng dồn lên tới gần 4 giờ mỗi server.
Giải pháp: Chỉ định rõ ràng giao diện Boot
Để khắc phục, chúng tôi đã loại bỏ việc “đoán mò” của hệ thống bằng cách chỉ định rõ giao diện boot ưu tiên ngay từ giai đoạn pre-boot PXE. Tuy nhiên, quá trình này gặp phải một số rào cản kỹ thuật:
- Cấu trúc dữ liệu EFI_IFR_REF3: Do cơ chế lazy loading, các thiết lập Network Boot không hiển thị với các công cụ quét tự động. Chúng tôi đã phối hợp với nhà cung cấp phần cứng để kích hoạt các token cụ thể trong “Boot Order Module”, cho phép khám phá giao diện boot mà không cần can thiệp thủ công qua GUI.
- Sự khác biệt về chuỗi cấu hình: Mỗi nhà cung cấp NIC (Network Interface Card) trả về các chuỗi định dạng khác nhau. Chúng tôi đã nâng cấp công cụ
CfHIIConfig_Appđể hỗ trợ khớp cấu hình thông qua regex, giúp chuẩn hóa quy trình mà không phụ thuộc vào chi tiết sản phẩm như địa chỉ MAC. - Hạn chế của iPXE: Vì iPXE đọc các biến dưới dạng HEX, chúng tôi đã triển khai thêm flag
uefi-same-hexđể kiểm tra trạng thái cấu hình, giúp giảm thiểu các lệnh thừa và tối ưu hóa tốc độ thực thi.
Kết quả đạt được
Bằng cách tối ưu hóa quy trình tự động hóa và can thiệp sâu vào UEFI, chúng tôi đã đưa thời gian nâng cấp firmware từ gần 4 giờ xuống còn 3 phút. Các lần khởi động đơn lẻ sau đó cũng được rút ngắn từ 20 phút xuống dưới 1 phút. Đây là minh chứng cho tầm quan trọng của việc hiểu rõ các tầng firmware thấp nhất trong quản trị hạ tầng bare metal quy mô lớn.
Nguồn tham khảo: Cloudflare Blog



No Comment! Be the first one.