12 điều răn

The Twelve Factors

I. Codebase
One codebase tracked in revision control, many deploys
Quản lý source code bằng Git, Git Flow,…
II. Dependencies
Explicitly declare and isolate dependencies
Quản lý thư viện mà ứng dụng phụ thuộc bằng khai báo ra file cụ thể (kiểu như package.json trong Node.js).
III. Config
Store config in the environment
Lưu cấu hình vào biến môi trường để dễ dàng thay đổi mà không thay đổi code.
IV. Backing services
Treat backing services as attached resources
Coi dịch vụ CSDL, Message Queue phía sau là tài nguyên có thêm / bớt dễ dàng. Ứng dụng tuyệt đối không nên gắn chặt sống còn vào một tài nguyên cụ thể nào vì điều này khiến hệ thống khó mở rộng.
V. Build, release, run
Strictly separate build, release and run stages
Tách bạch hoàn toàn 3 stages: build – release – run.
VI. Processes
Execute the app as one or more stateless processes
Vận hành ứng dụng bằng nhiều tiến trình không lưu giữ trạng thái (stateless process). Stateless process sẽ giúp hệ thống mở rộng tốt hơn, dễ hơn, ít lỗi hơn so với state process.
VII. Port binding
Export services via port binding
Cung cấp dịch vụ qua các port khác nhau – sử dụng port binding. Đây là mô hình API Gateway trong microservice.
VIII. Concurrency
Scale out via the process model
Mở rộng bằng thêm nhiều dịch vụ độc lập chứ không bằng cách tăng sức mạnh phần cứng.
IX. Disposability
Maximize robustness with fast startup and graceful shutdown
Khởi động nhanh – thu hồi sạch sẽ tốt hơn khởi động chậm, khi thoát không giải phóng hết bộ nhớ.
X. Dev/prod parity
Keep development, staging, and production as similar as possible
Môi trường DEV, SIT, UAT, PRD nên càng giống nhau càng tốt giúp dễ gỡ rối và chuyển từ môi trường DEV lên PRD mới nhanh và liên tục được.
XI. Logs
Treat logs as event streams
Coi log là một chuỗi sự kiện thời sự để xử lý thời gian thực.
XII. Admin processes
Run admin/management tasks as one-off processes
Quản trị hệ thống nên là một tiến trình độc lập, có thể gắn – hoặc tách ra khỏi ứng dụng đang chạy.

Leave a Reply

Your email address will not be published. Required fields are marked *