
Cloudflare sửa lỗi hiếm trong cơ chế cache MySQL của Hyperdrive
"Cloudflare describes a rare MySQL caching bug in Hyperdrive, its database connection pooler for Workers, that caused occasional empty query responses when caching was enabled. The investigation found related MySQL encoding issues around utf8/utf8mb4 and COM_RESET_CONNECTION, and the caching bug was tied to shared CDN cache behavior between Hyperdrive Client and Endpoint nodes; the fix involved correcting charset handling and ensuring consistent cached bytes across nodes."
Đây là lỗi độ tin cậy dữ liệu hơn là lỗ hổng khai thác trực tiếp, nhưng có thể gây trả về kết quả rỗng và làm sai lệch luồng xử lý ứng dụng. Cần chú ý charset, connection reset và cache consistency.
Ảnh hưởng chính là gián đoạn truy vấn và tăng rủi ro lỗi ứng dụng ở các hệ thống dùng Hyperdrive MySQL caching. Tác động vận hành thấp về tần suất nhưng có thể khó chẩn đoán do 0,001% và phụ thuộc môi trường.
Cloudflare cho biết đã khắc phục một lỗi hiếm trong Hyperdrive, dịch vụ database connection pooler cho Workers, khi bật caching có thể dẫn đến empty query responses dù truy vấn đáng lẽ phải trả về dữ liệu. Sự cố chỉ xuất hiện với tần suất khoảng 0,001%, khiến việc tái hiện và truy vết rất khó khăn.
Quá trình điều tra cho thấy có liên quan đến MySQL encoding và hành vi của COM_RESET_CONNECTION. Ở giai đoạn đầu, Hyperdrive dùng utf8 trong handshake, nhưng đây thực chất là alias của utf8mb3 và không hỗ trợ đầy đủ ký tự UTF-8 4 byte. Việc chuyển sang utf8mb4 đã xử lý được lỗi emoji. Sau đó, khi thêm bước dọn trạng thái kết nối bằng COM_RESET_CONNECTION, hệ thống lại có thể quay về charset mặc định của máy chủ, ví dụ latin1, nếu không thiết lập lại encoding sau khi reset.
Lỗi cache hiếm gặp được xác định là do hành vi chia sẻ CDN cache giữa Hyperdrive Client và Endpoint trong cùng trung tâm dữ liệu. Bản sửa tập trung vào việc chuẩn hóa charset handling và đảm bảo cùng một phản hồi luôn được lưu bằng cùng bytes trên các node.
Khuyến nghị cho đội vận hành: kiểm tra cấu hình charset/encoding của MySQL, xác minh hành vi sau connection reset, và theo dõi các truy vấn có bật shared cache để phát hiện sai khác dữ liệu sớm.