Scroll to top
Khám phá Rails 8.0 - Đột phá mới trong triển khai và bảo mật ứng dụng web

Khám phá Rails 8.0 - Đột phá mới trong triển khai và bảo mật ứng dụng web

ByYuto 15/11/2024 02:16
14min read

Khám phá tất cả tính năng mới của Rails 8.0, tích hợp bộ adapter Solid mạnh mẽ cho SQLite, Propshaft thay thế Sprockets. Rails 8 mang đến giải pháp triển khai, bảo mật và quản lý hiệu quả, tối ưu cho mọi ứng dụng web hiện đại.

Triển khai ứng dụng web hiện đại ngày nay – vừa nhanh, vừa an toàn và dễ cập nhật – đã trở nên khó khăn đến mức nhiều lập trình viên ngại làm nếu thiếu PaaS (Platform-as-a-Service). Nghe có vẻ vô lý, đúng không? Việc triển khai đâu cần phải tốn kém vậy chỉ để dễ dùng và thân thiện hơn. Đây chính là vai trò của mã nguồn mở, và Rails 8 xuất hiện để giải quyết điều đó.

Vậy nên, phiên bản chính thức của Rails 8.0 đã sẵn sàng! Phiên bản mới này tích hợp rất nhiều tính năng đáng giá. Dưới đây là những điểm mới nổi bật của Rails 8.0 mà bạn không nên bỏ qua.

Khám phá Rails 8.0 - Đột phá mới trong triển khai và bảo mật ứng dụng web

Kamal 2 + Thruster: Bước đột phá trong Rails 8.0

Rails 8 đã tích hợp sẵn Kamal 2, giúp bạn dễ dàng triển khai ứng dụng ở bất kỳ đâu. Kamal chỉ cần một cú lệnh kamal setup là có thể biến một server Linux hoàn toàn mới thành một server cho ứng dụng web của bạn. Chỉ cần cung cấp địa chỉ IP và SSH key, bạn đã sẵn sàng để vào production chỉ trong chưa đầy hai phút!

Điều khiến Kamal thực hiện nhanh gọn là nhờ Rails đã được chuẩn bị sẵn một Dockerfile tối ưu, giúp biến ứng dụng thành một container production-ready. Bạn chỉ cần một tài khoản registry như Docker Hub hay AWS ECR để lưu trữ image của mình.

Trong Rails 8, Dockerfile này được nâng cấp với proxy mới mang tên Thruster, nằm trước Puma web server để tăng tốc độ tải X-Sendfile, cache và nén tài nguyên. Nhờ vậy, bạn không cần thêm Nginx hay bất kỳ server nào khác, container mặc định của Rails đã sẵn sàng nhận traffic từ internet ngay lập tức.

Kamal 2 còn tích hợp thêm proxy Kamal Proxy thay thế cho Traefik. Proxy này hỗ trợ deploy không downtime, SSL tự động qua Let’s Encrypt, và cho phép chạy nhiều ứng dụng trên cùng một server mà không cần cấu hình phức tạp.

Bộ công cụ còn được cải tiến với tính năng bảo mật tích hợp 1password, Bitwarden, và LastPass, cùng tính năng alias mới như kamal console để mở console của Rails từ local. Đây là gói công cụ đầy đủ từ triển khai đến vận hành ứng dụng trong môi trường production.

Khám phá Rails 8.0 - Đột phá mới trong triển khai và bảo mật ứng dụng web

Cắt giảm dependency để đơn giản hóa Rails

Một phần của việc giúp Rails dễ triển khai hơn là giảm bớt các dịch vụ bổ trợ cần thiết để chạy ứng dụng. Trước đây, Rails yêu cầu MySQL hoặc PostgreSQL và cả Redis để sử dụng toàn bộ tính năng như job processing, caching, và WebSockets. Giờ đây, tất cả đều có thể thực hiện với SQLite nhờ ba adapter mới:

  • Solid Cable
  • Solid Cache
  • Solid Queue

Những adapter này đều dựa trên một nguyên lý: ổ đĩa đã đủ nhanh để giảm bớt phụ thuộc vào RAM cho nhiều tác vụ. Với sự phát triển của ổ SSD và NVMe nhanh gấp nhiều lần so với ổ đĩa quay truyền thống, Rails giờ đây tận dụng được sức mạnh của ổ lưu trữ mới để đơn giản hóa hệ thống mà vẫn đảm bảo hiệu năng.

Solid Cable: Giải pháp thay thế Redis cho WebSocket

Solid Cable loại bỏ nhu cầu sử dụng Redis để làm server pubsub, đảm nhận việc truyền tải thông điệp WebSocket từ ứng dụng đến các client ở các tiến trình khác nhau. Thay vì phụ thuộc vào Redis, Solid Cable dùng phương pháp polling nhanh và đạt tốc độ gần tương đương khi chạy cùng server trên SQLite. Điều này đáp ứng tốt cho hầu hết ứng dụng. Điểm thú vị là Solid Cable còn lưu giữ thông điệp đã gửi trong database suốt một ngày, giúp dễ dàng gỡ lỗi khi gặp vấn đề với live updates.

Solid Cache: Bộ nhớ cache không cần Redis hay Memcached

Solid Cache thay thế Redis hoặc Memcached trong việc lưu trữ các fragment HTML, giúp loại bỏ sự phụ thuộc vào dịch vụ bổ trợ. Với việc sử dụng lưu trữ trên ổ đĩa thay vì RAM, Solid Cache cho phép xây dựng bộ nhớ cache lớn hơn và tiết kiệm chi phí hơn. Điều này đồng nghĩa với việc cache có thể tồn tại lâu hơn, bao phủ nhiều yêu cầu hơn, thậm chí ở mức 95% hay 99% các yêu cầu. Hơn nữa, cache có thể được mã hóa và quản lý bằng giới hạn thời gian lưu trữ (như 30 hoặc 60 ngày), giúp dễ dàng tuân thủ các chính sách bảo mật hiện đại.

Solid Queue: Giải pháp queue mạnh mẽ không cần Redis hay Framework

Solid Queue không chỉ thay thế Redis mà còn loại bỏ nhu cầu về các framework xử lý job riêng lẻ như Resque, Delayed Job hay Sidekiq. Đối với các ứng dụng yêu cầu hiệu suất cao, nó tận dụng cơ chế FOR UPDATE SKIP LOCKED có từ PostgreSQL 9.5 và hiện cũng có trong MySQL 8.0 trở lên. Với những nhu cầu vừa phải hơn, Solid Queue cũng hoạt động tốt với SQLite, giúp đơn giản hóa quá trình triển khai ban đầu mà không cần thêm phụ thuộc.

Solid Queue có thể được tích hợp dưới dạng plugin cho Puma, mặc định trong môi trường single-server, hoặc sử dụng lệnh mới bin/jobs để khởi động một dispatcher riêng. Bạn có thể chạy nhiều dispatcher cho các hàng đợi khác nhau, dễ dàng điều chỉnh hiệu suất với cấu hình linh hoạt, từ thiết lập mặc định đến tùy chỉnh sâu khi cần.

Hệ thống này cung cấp đầy đủ tính năng mà một hệ thống queue hiện đại cần có, bao gồm kiểm soát đồng thời mạnh mẽ, tự động retry khi thất bại, thông báo lỗi, lập lịch job định kỳ, và nhiều tính năng khác.

Khám phá Rails 8.0 - Đột phá mới trong triển khai và bảo mật ứng dụng web

Đưa SQLite vào Production

Nhờ vào bộ ba adapter Solid, SQLite giờ đây có thể hỗ trợ cho Action Cable, Rails.cache, và Active Job trong Rails 8. Tuy nhiên, để SQLite thật sự sẵn sàng cho production, nhóm phát triển Rails đã đầu tư nhiều công sức để tối ưu adapter SQLite và driver Ruby, phù hợp cho môi trường thực tế.

Thay thế Sprockets bằng Propshaft

Rails 8 không chỉ tập trung vào việc cải thiện quá trình triển khai và các adapter dựa trên database, mà còn đưa Propshaft trở thành asset pipeline mặc định mới. Propshaft ra đời từ chiến dịch #NOBUILD ở Rails 7, khi Rails bắt đầu chuyển các cấu hình JavaScript phức tạp sang các công cụ chuyên dụng như bun, esbuild, và vite. Propshaft thay thế Sprockets - hệ thống cũ từ năm 2009, thời điểm khi build pipeline và JavaScript transpiler còn chưa xuất hiện, và HTTP/2 cũng chưa hỗ trợ tốt việc xử lý các file nhỏ.

Đây là một ví dụ về việc cần xé trang giấy cũ và nhìn lại vấn đề quen thuộc theo hướng tối giản. Trong thế giới #NOBUILD, asset pipeline chỉ cần thực hiện hai chức năng chính: cung cấp load path cho asset và thêm digest để cho phép cache lâu dài. Trong khi đó, Sprockets đã thực hiện hàng triệu công việc phức tạp khác và phần lớn trong số đó không còn được ưa chuộng.

Tạo nền tảng xác thực cơ bản dễ dàng với Rails 8

Khám phá Rails 8.0 - Đột phá mới trong triển khai và bảo mật ứng dụng web

Để giúp ứng dụng dễ triển khai hơn cho production, Rails 8 cũng tập trung vào việc bảo mật đơn giản hơn. Trong nhiều năm qua, Rails đã phát triển các phương thức trừu tượng hóa cho một hệ thống xác thực an toàn. Từ has_secure_password có trong Rails 5, cho đến generates_token_for :password_resetauthenticate_by trong Rails 7.1. Giờ đây, với Rails 8, tất cả đã được tích hợp thành một hệ thống xác thực hoàn chỉnh.

Chỉ cần chạy lệnh bin/rails generate authentication, bạn sẽ có sẵn các model cơ bản cho Session và User, cùng với PasswordsMailer, SessionsController, và Authentication concern. Việc còn lại của bạn chỉ là tự tạo flow đăng ký người dùng (thường được tùy chỉnh riêng cho mỗi ứng dụng). Không còn phải ngại khi tự xây dựng hệ thống xác thực của mình nữa.

Và còn nhiều điều khác có trong Rails 8

Rails 8 được phát hành chỉ sau vài tháng so với Rails 7.2, nhưng đi kèm với hàng loạt công cụ mới và vô số cải tiến. Rails 8 là framework lý tưởng để bạn xây dựng và phát triển sản phẩm một cách nhanh chóng và tiện lợi.

Đánh giá bài viết: 4.9/5 (33 đánh giá)
Bạn chưa đánh giá

Bình luận

Author
hoclaptrinh.io author
Tác giả:Yuto Yasunaga

Mình là một full stack developer, tốt nghiệp và làm việc tại Nhật Bản. Trang web này là nơi mình tổng hợp, đúc kết và lưu trữ lại những kiến thức trong quá trình học và làm việc liên quan đến IT.
Hy vọng những bài viết ở website này sẽ có ích cho bạn.