Ứng dụng Mười hai yếu tố (Phần 1)

Tram Ho

Giới thiệu

Ngày nay , phần mềm thường được chuyển giao như là 1 dịch vụ, được gọi là các web apps, hay software-as-a-service (SaaS). The Twelve-Factors App là một phương pháp để xây dựng các SaaS với các tiêu chí sau:

  • Sử dụng các định dạng theo kiểu tường thuật cho việc thiết lập tự động hóa, để cắt giảm chi phí và thời gian cho lập trình viên mới.
  • Có các quy ước rõ ràng với hệ điều hành bên dưới, cung cấp tối đa khả năng chuyển đổi giữa các môi trường thực thi.
  • Phù hợp triển khai trên các nền tảng đám mây, cắt giảm yêu cầu quản trị cho server và hệ thống.
  • Giảm thiểu sự khác nhau giữa môi trường development và môi trường production, cho phép đạt được sự linh hoạt tối đa trong phát triển liên tục.
  • Có thể mở rộng mà không cần thay đổi lớn cho các công cụ, kiến trúc, hoặc cách thức phát triển.

Phương pháp Twelve-Factors có thể áp dụng cho các ứng dụng viết bằng ngôn ngữ lập trình bất kỳ và sử dụng kết hợp bất kỳ dịch vụ backend. Như tên gọi của nó Twelve-Factors bao gồm 12 yếu tố:

  1. Codebase (Codebase được theo dõi với hệ thống quản lý phiên bản, và nhiều lần triển khai)
  2. Các phụ thuộc (Khai báo rõ ràng và phân tách các phụ thuộc)
  3. Cấu hình (Lưu trữ cấu hình trong môi trường)
  4. Dịch vụ hỗ trợ (Dịch vụ hỗ trợ như tài nguyên bổ sung)
  5. Xây dựng, phát hành, vận hành (Tách biệt hoàn toàn giữa các bước xây dựng và vận hành)
  6. Tiến trình (Vận hành ứng dụng như là một hoặc nhiều tiến trình phi trạng thái)
  7. Mở cổng mạng (Cung cấp các dịch vụ thông qua cổng mạng)
  8. Đồng bộ (Mở rộng theo chiều ngang thông qua mô hình tiến trình)
  9. Tính khả dụng (Tối ưu hóa với việc khởi động nhanh và dừng phần mềm ổn định)
  10. Sự tương đồng giữa quá trình phát triển và vận hành thực tế (Giữ cho môi trường development, staging, production giống nhau nhất có thể)
  11. Nhật ký (Nhật ký coi như là các luồng sự kiện)
  12. Tiến trình quản trị (Thực thi nhiệm vụ quản trị như là một tiến trình)

Chúng ta hãy cùng tìm hiểu rõ hơn về 12 yếu tố này:

1, Codebase

Mã code sẽ luôn được theo dõi bởi hệ thống quản lý phiên bản như là Git. Một bản lưu của cơ sở dữ liệu các phiên bản được gọi là kho mã (code repository). Một mã code là bất kỳ một repo riêng lẻ (trong một hệ thống quản lý phiên bản thống nhất như Subversion), hoặc bất kì một nhóm các repo chia sẻ cùng một commit nguồn (trong một hệ thống quản lý phiên bản kiểu phân quyển như Git).

Sẽ luôn luôn có sự tương quan 1-1 giữa mã code và ứng dụng:

  • Nếu có nhiều mã gốc, đấy không phải là một ứng dụng – mà là một hệ thống phân tán. Với các phần tử trong một hệ thống phân tán là một ứng dụng, với mỗi cá thể tuân theo luật Twelve-Factor.
  • Nhiều ứng dụng chia sẻ cùng một mã là vi phạm luật của Twelve-Factor. Giải pháp ở đây là xem xét để nhóm các mã chia sẻ thành các thư viện mà có thể được nhúng vào thông qua trình quản lý các gói phụ thuộc (dependency manager).

Chỉ có một mã gốc từng ứng dụng, nhưng sẽ có nhiều deploy của một ứng dụng. Đây là trường hợp rất phổ biến của các trang đã đi vào hoạt động. Thêm vào đó mỗi lập trình viên sẽ có một bản lưu ứng dụng đang chạy trên local, mỗi bản đều được coi là 1 deploy.

Mã code sẽ giống nhau trên các deploy, tuy phiên bản khác nhau có thể hoạt động trên mỗi deploy.

2, Các phụ thuộc

Hầu hết các ngôn ngữ lập trình đề cung cấp hệ thống để phân phối các thư viện hỗ trợ, ví dụ Rubygems cho Ruby. Các thư viện cài đặt thông qua một hệ thống gói có thể cài đặt như 1 site packages hay được nhóm trong một thư mục kèm ứng dụng (còn được gọi là “vendoring” hay “bundling”)

Một ứng dụng 12-hệ số không bao giờ phụ thuộc vào sự hiện diện tuyệt đối của các gói hệ thống. Nó khai báo toàn bộ các phụ thuộc hoàn toàn thông qua bản kê khai khai báo phụ thuộc. Hơn thế nữa nó còn sử dụng công cụ phân cách phụ thuộc trong quá trình thực thi để đảm bảo rằng không có các phụ thuộc tuyệt đối nào bị “lọt” vào trong các hệ thống xung quanh. Khai báo đầy đủ và rõ ràng các phụ thuộc được áp dụng đồng đều cho cả hệ thống sản xuất và phát triển.

Lấy ví dụ với Gem Bundler của Ruby cung cấp định dạng kê khai phụ thuộc Gemfile để khai báo gem và bundle exec để phân cách phụ thuộc. Bất kể công cụ là gì, kê khai phụ thuộc và phân cách luôn phải đi đôi với nhau

Một lợi ích khác của khai báo các phụ thuộc rõ ràng là nó đơn giản hóa qua trình cài đặt cho lập trình viên mới tiếp nhận dự án.Các lập trình viên mới có thể lấy về mã trên hệ thống phát triển của họ, chỉ với một yêu cầu là cài đặt trước ngôn ngữ lập trình và trình quản lý phụ thuộc. Chúng có thể được dùng để thiết lập mọi thứ cần để vận hành một ứng dụng với một lệnh biên dịch/xây dựng định sẵn. Ví dụ với lệnh thiết lập cho Ruby là bundle install

Các Twelve-Factor App đồng thời có thể không phụ thuộc vào bất cứ sự hiện diện của các công cụ hệ thống tuyệt đối nào. Ví dụ như các công cụ cài đặt sẵn như ImageMagick hay curl. Trong khi các công cụ trên có thể hiện diện trên đa số các hệ thống, nhưng không có gì bảo đảm là chúng sẽ hiện diện trên toàn bộ các hệ thống mà ứng dụng có thể chạy trong tương lai, hoặc có chăng phiên bản tìm thấy trên các hệ thống tương lai sẽ tương thích với ứng dụng. Nếu ứng dụng cần được cài sẵn như một công cụ hệ thống, các công cụ đó nên được đi kèm cùng với ứng dụng.

(Còn tiếp)

Tài liệu dịch: https://www.12factor.net/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo