1

Campfire trên Ruby 4 Ractors

static.lutke.dev

Một bản port của ONCE Campfire giữ lại Ruby nhưng bỏ Rails. Hệ thống phục vụ các trang HTML giống hệt nhau về mặt byte từ một tiến trình duy nhất: Falcon chạy trong các worker Ractor, các module thuần túy kết hợp với SQLite, và cơ chế truyền thông điệp giữa các Ractor thay cho Redis. Trên cùng 4 luồng CPU, ứng dụng này phục vụ các trang động nhanh hơn 15–27 lần so với bản Rails gốc, đồng thời vượt qua bản port Go ở hầu hết các bài kiểm tra. Bản Rails Campfire chạy Thruster, một số tiến trình Puma, các worker Resque và Redis để xử lý các broadcast của Action Cable cùng hàng đợi tác vụ. Bản port này áp dụng kiến trúc của bản Go: mỗi module chuyên trách chạy trên SQLite, tích hợp sẵn hàng đợi và trung tâm cable ngay trong tiến trình. Trong Ruby 4, các thành phần cần chạy song song được đặt vào các Ractor. Mỗi Ractor có khóa riêng, vùng heap riêng và kết nối SQLite riêng. Chúng giao tiếp chỉ bằng cách gửi các thông điệp đóng băng, truyền qua lại giữa các Ractor mà không cần sao chép. Người dùng có thể chọn một luồng để quan sát hệ thống hoạt động. Trình duyệt và cơ sở dữ liệu không nhận thấy sự thay đổi: cùng cookie, cùng CSRF token, cùng signed id, cùng khung Action Cable, cùng URL Active Storage và cùng file SQLite. Mọi thứ ở giữa đều là mã nguồn mới và gọn gàng hơn. Bộ kiểm tra độ tương thích trong repo Rust xác nhận kết quả: 956 trên 956 bài kiểm tra đều vượt qua trên năm seed khác nhau gồm HTML, DOM, cây khả năng truy cập, asset, khung Cable và ảnh chụp màn hình.

Đăng nhập để góp ý, chỉnh sửa

Nguồn chính

  1. THẢO LUẬNnoteflakeslobste.rs
Bản Markdown