Rails Engines nổi lên như giải pháp thay thế mạnh mẽ cho Microservices trong phát triển ứng dụng modular

Nhóm Cộng đồng BigGo
Rails Engines nổi lên như giải pháp thay thế mạnh mẽ cho Microservices trong phát triển ứng dụng modular

Cộng đồng Rails đang ngày càng chuyển hướng sang Rails Engines như một giải pháp để xây dựng các ứng dụng modular, được thúc đẩy bởi các cuộc thảo luận xung quanh dự án Active Storage Dashboard. Sự chuyển đổi này thể hiện sự hoài nghi ngày càng tăng đối với kiến trúc microservices và sự đánh giá cao trở lại đối với các ứng dụng monolithic với cấu trúc nội bộ tốt hơn.

Độ phức tạp của Microservices thúc đẩy việc tìm kiếm các giải pháp thay thế

Cuộc tranh luận trong cộng đồng cho thấy sự thất vọng rộng rãi với việc triển khai microservices. Nhiều nhà phát triển báo cáo rằng các nhóm thường áp dụng microservices vì tính modular thay vì nhu cầu mở rộng thực sự, dẫn đến độ phức tạp không cần thiết. Cuộc thảo luận làm nổi bật cách microservices ban đầu được thiết kế để phá vỡ các ứng dụng monolithic, nhưng thường tạo ra nhiều vấn đề hơn là giải quyết chúng.

Hầu hết thời gian mọi người chuyển sang microservices vì lý do sai lầm và họ sẽ hối hận về điều đó trong nhiều năm.

Rails Engines cung cấp một giải pháp trung gian hấp dẫn. Chúng cho phép các nhà phát triển tạo ra các module hoàn chỉnh, độc lập trong một ứng dụng duy nhất, bao gồm controllers, views, models, routes và database migrations. Cách tiếp cận này cung cấp các lợi ích về tính modular mà các nhóm tìm kiếm mà không có chi phí vận hành của hệ thống phân tán.

Các thành phần của Rails Engine

  • Controllers, views và models
  • Routes và database migrations
  • Assets và configuration files
  • Có thể mount trong các ứng dụng Rails hiện có
  • Hỗ trợ tương thích đa phiên bản ( Rails 5.2 đến 7.1)

Lợi ích kỹ thuật của kiến trúc dựa trên Engine

Ví dụ Active Storage Dashboard minh họa cách Rails Engines có thể đóng gói chức năng phức tạp trong khi vẫn duy trì sự đơn giản. Không giống như microservices, engines chia sẻ cùng một kết nối cơ sở dữ liệu, hệ thống xác thực và pipeline triển khai với ứng dụng chủ. Điều này loại bỏ các thách thức phổ biến của hệ thống phân tán như độ trễ mạng, service discovery và tính nhất quán dữ liệu.

Các nhà phát triển trong cộng đồng đặc biệt đánh giá cao cách engines xử lý việc tách biệt các mối quan tâm trong các triển khai monolithic. Các ứng dụng Rails truyền thống đã hỗ trợ nhiều loại service - web servers chạy Puma trong khi background jobs sử dụng Sidekiq - tất cả đều chia sẻ cùng một codebase. Engines mở rộng mô hình này bằng cách cho phép tách biệt logic mà không cần phân phối vật lý.

Tính năng của Active Storage Dashboard

  • Số liệu lưu trữ theo thời gian thực và thống kê sử dụng
  • Khả năng lọc nâng cao cho quản lý tệp tin
  • Tài nguyên có thể tải xuống để tuân thủ dữ liệu
  • Giao diện dashboard có thể tùy chỉnh
  • Hỗ trợ lưu trữ mạng và lưu trữ nhân bản

Những hiểu biết thực tế về triển khai Engine

Cuộc thảo luận trong cộng đồng tiết lộ các cân nhắc thực tế cho việc phát triển engine. Namespacing phù hợp ngăn chặn xung đột giữa engines và ứng dụng chủ. Tính linh hoạt trong cấu hình cho phép engines thích ứng với các hệ thống xác thực và yêu cầu ứng dụng khác nhau. Khả năng tương thích cross- Rails version đảm bảo engines hoạt động trên các môi trường dự án khác nhau.

Triển khai database-agnostic và các phụ thuộc bên ngoài tối thiểu giảm ma sát tích hợp. Thay vì dựa vào các third-party gems cho các tính năng như pagination, các engines được thiết kế tốt triển khai chức năng cốt lõi trực tiếp, giảm xung đột phiên bản và chi phí bảo trì.

Các Thực Hành Tốt Nhất Trong Phát Triển Engine

  • Sử dụng namespace phù hợp để tránh xung đột
  • Giảm thiểu các phụ thuộc bên ngoài
  • Các chiến lược xác thực có thể cấu hình
  • Triển khai độc lập với cơ sở dữ liệu
  • Tài liệu toàn diện và các ví dụ minh họa

Quan điểm ngành về các lựa chọn kiến trúc

Cuộc tranh luận mở rộng ra ngoài Rails đến các quyết định kiến trúc rộng hơn. Một số nhà phát triển bảo vệ microservices cho các trường hợp sử dụng cụ thể như khả năng phục hồi và mở rộng độc lập. Tuy nhiên, sự đồng thuận trong cộng đồng cho thấy rằng hầu hết các ứng dụng không yêu cầu độ phức tạp mà microservices mang lại.

Rails Engines đại diện cho một cách tiếp cận trưởng thành đối với tính modular đã tồn tại trong nhiều năm nhưng nhận được ít sự chú ý hơn so với các mô hình kiến trúc mới hơn. Chúng cung cấp khả năng tái sử dụng code trên các dự án, phân tách monolith dần dần và cơ hội phân phối open source - tất cả mà không có độ phức tạp vận hành của hệ thống phân tán.

Cuộc thảo luận nhấn mạnh một sự thay đổi cơ bản trong cách các nhà phát triển nghĩ về kiến trúc ứng dụng. Thay vì mặc định sử dụng hệ thống phân tán, các nhóm đang khám phá lại sức mạnh của các ứng dụng monolithic có cấu trúc tốt được tăng cường với các thành phần modular như Rails Engines.

Tham khảo: Buidling Modular Rails Applications: A Deep Dive into Ralls Engines Through Active Storage Dashboard