8 điểm bởi GN⁺ 2023-12-05 | 1 bình luận | Chia sẻ qua WhatsApp
  • Vá máy chủ Linux thì đơn giản, nhưng vá hàng chục nghìn máy chủ mà không gây downtime lại không hề dễ
  • Meta sử dụng Kpatch của Red Hat và KLP (Kernel Live Patching) để vá hàng triệu máy chủ Linux
    • KLP cho phép áp dụng các bản cập nhật bảo mật mới nhất cho nhân Linux mà không cần khởi động lại

Vá nhân trực tiếp

  • Vá nhân trực tiếp được cung cấp dưới dạng một gói chứa mã đã sửa, tách biệt với gói nhân chính
  • Các bản vá trực tiếp có tính cộng dồn, nên bản vá mới nhất sẽ bao gồm mọi thay đổi của các bản vá trước đó
  • Vá trực tiếp không áp dụng cho mọi thứ; không thể vá dữ liệu hay cấu trúc, và việc tạo bản vá trực tiếp đòi hỏi thêm công sức kỹ thuật

Kpatch

  • Kpatch hoạt động bằng cách so sánh nhân gốc với nhân đã vá, sau đó dùng một mô-đun nhân tùy chỉnh để vá mã mới vào nhân đang chạy
  • Sau đó, tiến trình Kpatch dùng ftrace để theo dõi stack của các tiến trình hiện có nhằm xác minh có thể thực hiện bản vá mà không gây tác động có hại hay không
  • Nếu được xác định là an toàn, nó sẽ chuyển hướng mã đang chạy sang hàm đã được vá, rồi loại bỏ phần mã nay đã cũ
  • Khi đó bản vá đã được áp dụng lên máy chủ mà không phát sinh downtime

Trường hợp của Meta

  • Tất nhiên, trên thực tế mọi chuyện không đơn giản như vậy
  • Tại Meta, khi áp dụng vá trực tiếp thì thường mất khoảng 1~2 giây để áp dụng bản vá lên một host
  • Mốc 1~2 giây cho một host thực sự rất nhanh nếu so với kexec, cơ chế của nhân Linux dùng để khởi động một nhân mới
  • Không cần downtime hay di chuyển workload; chỉ cần áp dụng bản vá trực tiếp là có thể sử dụng ngay

Cách vá hàng triệu máy

  • Khi vá hàng triệu máy, câu chuyện không chỉ có vậy
  • Tại Meta, do có thể phát hiện bug trong quá trình rollout bản vá, quản trị viên sẽ vá từ tầng release candidate trước
  • Package roller phân phối các bản vá dựa trên RPM cũng tự động kiểm tra tình trạng sức khỏe của máy chủ
  • Meta giám sát crash, cảnh báo nghiêm trọng, vấn đề ứng dụng và hiệu năng trên nhân mới; nếu tỷ lệ lỗi vượt quá 1 crash trên mỗi 1000 máy chủ thì bản vá sẽ bị dừng và khôi phục về nhân trước đó
  • Meta dùng Kpatch, nhưng cũng có các lựa chọn thay thế khác
    • SUSE cung cấp kGraft, Oracle dùng Ksplice, còn Canonical hỗ trợ Livepatch
    • Bất kể khác biệt về mã nguồn, tất cả đều mang lại kết quả tương tự

Ý kiến của GN⁺

Điểm quan trọng nhất trong bài viết này là Meta đã áp dụng một phương pháp vá hiệu quả không gây downtime cho hàng triệu máy chủ trên toàn thế giới. Đây cũng là một chủ đề thú vị ngay cả với các kỹ sư phần mềm mới vào nghề, đồng thời nhấn mạnh tầm quan trọng của việc bảo trì và bảo mật hệ thống Linux. Ngoài ra, bài viết còn giúp hiểu rõ hơn về độ phức tạp và sự cần thiết của công nghệ vá trực tiếp.

1 bình luận

 
GN⁺ 2023-12-05
Ý kiến trên Hacker News
  • Ksplice là công nghệ vá nóng ban đầu, sau khi được Oracle mua lại thì trong thời gian tôi làm việc ở đó, nó đã được mở rộng sang các chương trình không gian người dùng. Đây là một công nghệ rất hay và không hề lỗi thời, vì dù đã chuyển dịch lên đám mây, nó vẫn giúp tránh phải khởi động lại toàn bộ hệ thống trên quy mô lớn.
  • Việc Meta không đề cập mất bao lâu để triển khai cách này trên toàn bộ hệ thống dường như đã bỏ sót một chi tiết quan trọng. Vá nóng cho phép vận hành mà không gây downtime cho máy chủ, trung tâm dữ liệu hay đám mây.
  • Nếu làm việc ở quy mô của Meta thì vá nóng có thể có ý nghĩa, nhưng phần lớn các dịch vụ và ứng dụng được thiết kế tốt đều nên chịu được việc khởi động lại toàn bộ máy chủ. Thật khó mà hình dung được độ phức tạp của việc quản lý hàng triệu máy chủ.
  • KernelCare là một dịch vụ vá nóng kernel hỗ trợ phần lớn các bản phân phối Linux.
  • Tôi đã dùng Kpatch trên nhiều máy ảo và nó hoạt động khá tốt.
  • Hiện họ đang vận hành khoảng 13 triệu máy chủ, đã chi 20 tỷ USD cho thiết bị trung tâm dữ liệu mới trong năm 2023 và dự kiến chi thêm 20 tỷ USD nữa trong năm 2024. Hiện họ đang dùng CentOS 8 Stream và sắp chuyển sang bản 9.
  • Người ta nói việc drain và un-drain host là rất khó. Điều này về cơ bản có nghĩa là việc rút một host ra khỏi dịch vụ rồi khôi phục lại không hề dễ, và điều đó cho thấy kernel Linux vốn không được thiết kế cho vá nóng; việc cố làm như vậy luôn là nguồn gốc của bất định, tốn kém về mặt công sức kỹ thuật và luôn tiềm ẩn nguy cơ thảm họa. Ngược lại, nếu chỉnh sửa hệ thống drain dịch vụ và khôi phục host để nó trở nên rất vững chắc và đáng tin cậy thì sẽ mang lại lợi ích lớn về độ tin cậy. Cách tiếp cận này có vẻ như đang che đậy sự rối loạn chức năng trong tổ chức. Một nhóm có thể vá tất cả kernel, nhưng không thể khiến mọi host đều hỗ trợ drain dịch vụ và khôi phục; mà cũng chẳng có động lực thực sự nào để sửa việc đó, nên không ai muốn đụng vào. Chỉ những màn hack hào nhoáng và các dự án mới mới được tưởng thưởng đúng mức.
  • Phần lớn các tổ chức sẽ không thu được lợi ích gì từ việc bắt chước Meta, và họ cũng không cần phải làm vậy.
  • Đây là lần đầu tôi nghe đến khái niệm "hyperscale". Tôi tò mò nó khác với việc mở rộng thông thường ở điểm nào.