Những Ý Tưởng Mới Về Hệ Thống Tệp Ảo (VFS) - nói dối e blog

Những Ý Tưởng Mới Về Hệ Thống Tệp Ảo (VFS)

Hệ thống tệp ảo (VFS) là một mô-đun cốt lõi trong động cơ Ant, đã được trình bày chi tiết trên wiki và các bài tổng hợp trên blog. Trong quá trình tái cấu trúc trình soạn thảo theo định hướng đã đề ra trước đó, tôi đã nảy sinh một số ý tưởng mới liên quan đến VFS. Dù chưa có kế hoạch tập trung tái thiết kế VFS trong thời gian ngắn hạn, nhưng tôi vẫn muốn ghi lại những suy nghĩ này để

Ban đầu, khi thiết kế VFS, tôi tiếp cận nó như một hệ thống tệp mạng với tư duy tương tự Git - một hệ thống có kiểm soát phiên bản. Do đó, nhiều nguyên tắc thiết kế đều xuất phát từ định hướng này. Tuy nhiên, qua nhiều lần tái cấu trúc trong những năm qua, tôi bắt đầu nghi ngờ tính hợp lý của ý tưởng ban đầu.

Một trong những nguyên tắc quan trọng nhất từng được áp dụng: Trong quá trình chạy game, chương trình sẽ nhìn thấy VFS như một bản chụp (snapshot) dạng cây bất biến. Giống như Git, bản chụp này có thể được đại diện bằng giá trị hash của cây Merkle, giúp đồng bộ hóa dễ dàng qua mạng. Để phục vụ trình soạn thảo, chúng tôi đã thêm các bản vá cho phép chỉnh sửa động VFS khi chạy. Nhưng hôm nay, tôi tự hỏi: Liệu ràng buộc “bản chụp bất biến” này có thực sự cần thiết? Có thể chúng ta hoàn toàn có thể thay thế bằng một giải pháp đơn giản hơn mà vẫn đáp ứng đầy đủ chức năng hiện tại.

Sau khi suy nghĩ kỹ, tôi đề xuất một phương án mới như sau:

  1. VFS linh hoạt trong bộ nhớ
    VFS sẽ là một cấu trúc dạng cây có thể thay đổi động trong quá trình chạy, tồn tại hoàn toàn trong bộ nhớ mà không cần lưu trữ vĩnh viễn. Ban đầu, VFS chỉ chứa một thư mục gốc trống.

  2. Cơ chế tự động mở rộng cây
    Trong quá trình chạy, hệ thống sẽ liên tục cập nhật VFS bằng cách thêm/xóa các nút. Khi thiết lập giá trị hash cho một đường dẫn cụ thể, nếu các thư mục trung gian chưa tồn tại, hệ thống sẽ tự động tạo chúng. Nếu đường dẫn đã có tệp, giá trị cũ sẽ bị ghi đè. Nói cách khác, VFS là một cây trong đó mỗi nút lá đều chứa một giá trị hash.

  3. Gắn kết nội dung với hash
    Mỗi giá trị hash trong cây VFS có thể liên kết với nội dung cụ thể - có thể là một khối dữ liệu trong bộ nhớ hoặc một tệp cục bộ (kèm theo dấu thời gian). Giá trị hash này được tính theo SHA-1 của nội dung, đảm bảo mỗi hash chỉ cần gắn kết một lần duy nhất.

  4. Tính toán hash thư mục cục bộ
    Một mô-đun riêng biệt sẽ thực hiện quét đệ quy thư mục cục bộ để tạo bảng hash cho tất cả tệp và thư mục con. Khi chương trình khởi động mà không kết nối máy chủ tệp, hệ thống sẽ tính hash thư mục gốc, sử dụng API ở bước 3 để gắn kết toàn bộ hash, rồi thay thế gốc VFS bằng hash đã tính.

  5. Đồng bộ với máy chủ tệp
    Nếu kết nối với máy chủ tệp, hệ thống có thể yêu cầu hash của bất kỳ đường dẫn nào hoặc nội dung tương ứng với hash cụ thể. Các hash này sẽ được lưu cache cục bộ, quy trình hoàn toàn giống với cách triển khai hiện tại.

Với phương án này, VFS không còn bị ràng buộc bởi giả định “bản chụp bất biến”. Thay vào đó, nó trở thành một cấu trúc dữ liệu thuần bộ nhớ có thể thay đổi linh hoạt trong quá trình chạy. So với giải pháp hiện tại, mô-đun VFS mới chỉ tập trung quản lý cấu trúc cây trong bộ nhớ, không can thiệp vào việc đồng bộ mạng hay lưu trữ dữ liệu trên hệ thống tệp vật lý.

0%