Hiện thực hóa twelve-factors với AWS Well-Architected Framework

by Michael Phorn on 17 FEB 2025 in Architecture, AWS Well-Architected, AWS Well-Architected Framework, Intermediate (200) 

Các tổ chức quan tâm đến việc cải thiện tốc độ phát triển theo nguyên tắc của twelve-factor app có thể tìm thấy lợi ích trong việc hiểu cách thực hiện những khái niệm này trên Amazon Web Services (AWS). Trong bài viết này, tôi sẽ giúp bạn liên hệ các khái niệm twelve-factors app khi thiết kế giải pháp trên AWS.

Twelve-factors

Hãy bắt đầu với tổng quan nhanh về twelve-factors. The Twelve-Factor App được xuất bản năm 2011 bởi Adam Wiggins, là sự hợp tác giữa các nhà phát triển tại Heroku. Ông đã xuất bản nó vào thời điểm các nhà phát triển đang chuyển từ mô hình viết ứng dụng software-as-a-service (SaaS) trong môi trường cloud riêng sang việc lưu trữ ứng dụng trên nhà cung cấp cloud như AWS. Mục đích của họ là cung cấp “một tập hợp các giải pháp khái niệm rộng” để xây dựng các ứng dụng có tính di động và khả năng phục hồi. Các nguyên tắc tập trung vào việc giảm gánh nặng vòng đời phần mềm, bao gồm giới thiệu ứng dụng, bảo trì và vận hành, cho đến khi ngừng sử dụng. Những nguyên tắc này được tóm tắt trong 12 yếu tố sau:

  1. Codebase
  2. Dependencies
  3. Config
  4. Backing services
  5. Build, release, run
  6. Processes
  7. Port binding
  8. Concurrency
  9. Disposability
  10. Development and production environment parity
  11. Logs
  12. Admin process

Đây là những nguyên tắc thực hành tốt nhất cho ứng dụng có tính di động và khả năng phục hồi.

Tại AWS, chúng tôi có Well-Architected Framework để nắm bắt các thực hành tốt nhất về cloud và kiến trúc, bao gồm các thực hành tương tự như twelve-factors. Framework này đến từ nhiều năm kinh nghiệm tập thể của AWS Solutions Architect trong việc xây dựng giải pháp cho các lĩnh vực kinh doanh và trường hợp sử dụng khác nhau. Kết quả là các kiến trúc hỗ trợ hệ thống bảo mật, hiệu suất cao, có khả năng phục hồi và hiệu quả về chi phí trên cloud. Nếu bạn chịu trách nhiệm về cơ sở hạ tầng hoặc ứng dụng, Framework giúp bạn – dù là CTO, kiến trúc sư, nhà phát triển hay thành viên nhóm vận hành – hiểu được lợi ích và đánh đổi của các quyết định phải đưa ra.

Lịch sử tóm tắt của AWS Well-Architected Framework

AWS đã xuất bản phiên bản đầu tiên của Framework vào năm 2012, và chúng tôi đã phát hành whitepaper AWS Well-Architected Framework vào năm 2015. Sau lần giới thiệu ban đầu, chúng tôi đã thêm trụ cột Operational Excellence vào năm 2016 và phát hành các whitepaper theo trụ cột cụ thể và AWS Well-Architected Lenses vào năm 2017. Năm sau đó, AWS Well-Architected Tool được ra mắt.

Trong khi twelve-factors tập trung vào đặc điểm ứng dụng, AWS Well-Architected Framework cung cấp hướng dẫn về kiến trúc. Khi kiến trúc của bạn trải qua đánh giá Well-Architected, bạn có thể đáp ứng hướng dẫn cho ứng dụng twelve-factors dễ dàng hơn. Với một số yếu tố, Framework giúp nhà phát triển ứng dụng ủy quyền một số trách nhiệm từ ứng dụng cho cơ sở hạ tầng. Cả hai framework đều nhằm giúp bạn cung cấp ứng dụng và dịch vụ mạnh mẽ, có khả năng mở rộng và tập trung vào cloud. AWS Well-Architected Framework giúp bạn củng cố các cơ chế này.

Sáu trụ cột của AWS Well-Architected Framework

Hãy khám phá sáu trụ cột của AWS Well-Architected Framework, mục tiêu của từng trụ cột và nơi các khái niệm twelve-factors giao thoa với hướng dẫn của AWS.

Các hình sau đây cho thấy twelve factors và cách chúng ánh xạ với các quy trình trong AWS, được mô tả trong phần này.

  1. Operational excellence 

Trụ cột operational excellence giúp bạn đánh giá khả năng hỗ trợ phát triển và vận hành workload hiệu quả của tổ chức. Bạn có thể sử dụng các chủ đề trong trụ cột này để đánh giá cách vận hành giải pháp của mình. Trụ cột này hướng dẫn bạn kiểm tra cấu trúc tổ chức, kiểm tra các cơ chế và xác định các rào cản có thể làm chậm khả năng đổi mới. Kết quả bao gồm vòng phản hồi cải tiến liên tục để vận hành cơ sở hạ tầng và giải pháp.

Các yếu tố bạn nắm bắt thông qua operational excellence là codebase (I) và development and production environment parity (X). Codebase quy định rằng chỉ có một codebase duy nhất được sử dụng để triển khai mọi nơi, phản ánh mục đích giảm gánh nặng vận hành trong việc duy trì phần mềm. Lập luận cho việc sử dụng một codebase duy nhất là để đảm bảo tính nhất quán, khả năng truy xuất nguồn gốc và hiệu quả trong toàn bộ vòng đời phát triển thống nhất. Yếu tố thứ hai là development and production environment parity, khuyến khích các nhà phát triển tạo ra các bản triển khai nhỏ hơn nhưng thường xuyên hơn. Nó cũng khuyến khích các nhà phát triển duy trì sự tương đồng không chỉ của phần mềm cốt lõi mà còn của các backing services giữa các môi trường. Sự tương đồng của môi trường góp phần tạo nên quy trình phát triển và triển khai suôn sẻ hơn. Ngoài ra, sự tương đồng này giúp các nhà phát triển phát hiện vấn đề trong môi trường non-production một cách nhất quán hơn.

Các dịch vụ AWS có thể giúp bạn đạt được operational excellence là AWS CodeConnections, AWS CodePipeline, AWS CloudFormation, AWS Systems Manager, Amazon CloudWatch, AWS Config, AWS CloudTrail, Amazon EventBridge, AWS X-Ray, AWS Organizations, AWS Control Tower, AWS Trusted Advisor, AWS Service Catalog, AWS Proton, Amazon CodeGuru (Preview), AWS Lambda, Amazon Simple Queue Service (Amazon SQS), Amazon Simple Notification Service (Amazon SNS), và AWS StepFunctions.

  1. Security 

Trụ cột security mô tả cách sử dụng công nghệ AWS Cloud để bảo vệ dữ liệu, hệ thống và tài sản nhằm cải thiện tư thế bảo mật. Tại AWS, chúng tôi ủng hộ shared responsibility model áp dụng cho trụ cột security. AWS chịu trách nhiệm cung cấp môi trường an toàn để quản lý và vận hành hệ thống của bạn, nhưng trách nhiệm của bạn là triển khai các best practice phù hợp với yêu cầu của mình. Trụ cột security mô tả các best practice như xem xét cách quản lý danh tính cho người và máy, giúp bạn lưu trữ bí mật một cách an toàn.

Yếu tố config (III) có thể được ánh xạ tới trụ cột security, khuyến nghị bạn lưu trữ các biến và items phụ thuộc vào môi trường dưới dạng environment variables. Điều này cho phép di chuyển giữa các triển khai mà không cần cập nhật code. Các cài đặt cấu hình như chuỗi kết nối database, API keys, credentials và thông tin nhạy cảm khác nên tách biệt khỏi application code. Tại AWS, chúng tôi cung cấp các dịch vụ có thể được sử dụng để đáp ứng yêu cầu này một cách an toàn, bao gồm AWS Secrets Manager, AWS Systems Manager Parameter Store, AWS Certificate Manager và AWS Key Management Service (KMS).

Các dịch vụ AWS có thể giúp bạn đạt được security là AWS Identity and Access Management (IAM), Amazon GuardDuty, AWS Shield, AWS Web Application Firewall (WAF), Amazon Inspector, AWS CloudHSM, Amazon Macie, AWS Security Hub, AWS Config, AWS CloudTrail, Amazon VPC (Virtual Private Cloud), AWS Direct Connect, Amazon Cognito, AWS Firewall Manager, AWS Network Firewall và AWS IAM Access Analyzer.

  1. Reliability 

Trụ cột reliability bao gồm khả năng của workload thực hiện chức năng dự định một cách chính xác và nhất quán khi cần thiết. Reliability có nghĩa là kiến trúc và hệ thống của bạn:

  • Mở rộng tài nguyên phù hợp để đáp ứng nhu cầu
  • Giảm thiểu gián đoạn do cấu hình sai hoặc vấn đề mạng tạm thời
  • Phục hồi khi xảy ra gián đoạn

Tự động hóa việc mở rộng và phục hồi là best practices trong trụ cột reliability.

Vì twelve-factors giúp các nhà phát triển tạo ra ứng dụng đáng tin cậy, nhiều yếu tố được phân loại dưới trụ cột reliability của AWS Well-Architected Framework. Backing services (IV) giải thích rằng bạn nên có tính linh hoạt để tích hợp các dịch vụ. Theo cách này, khi hệ thống gặp vấn đề về tính khả dụng, ứng dụng có thể thay thế dịch vụ gặp sự cố mà không cần thay đổi mã. Bạn nên chọn tài nguyên phù hợp cung cấp khả năng mở rộng trong khi tối ưu hóa chi phí. Dependencies (III) mô tả rằng các ứng dụng khai báo và cô lập dependencies để trở nên modular và tự chứa. Điều này tăng tốc phục hồi bằng cách đơn giản hóa việc thiết lập cho các handlers của mã ứng dụng. Các ứng dụng tuân thủ yếu tố processes (VI) chạy như một tập hợp các stateless processes để hỗ trợ mở rộng. Điều này tương đương với việc tạo microservices có thể mở rộng lên hoặc xuống tùy thuộc vào workload hoặc đưa vào các instances bổ sung khi một instance bị lỗi. Disposability (IX) gợi ý rằng các processes của ứng dụng có thể được khởi động và dừng nhanh chóng, điều này làm cho ứng dụng có khả năng phục hồi sau lỗi và có thể thích ứng để mở rộng một cách linh hoạt.

Các dịch vụ AWS có thể giúp bạn đạt được reliability là Amazon EC2 Auto Scaling, Elastic Load Balancing (ELB), Amazon RDS Multi-AZ, Amazon Simple Storage Service (Amazon S3), AWS CloudFormation, Amazon Route53, AWS Shield, AWS Backup, Amazon CloudWatch, AWS Systems Manager, AWS Global Accelerator, Amazon Aurora, AWS Lambda, Amazon DynamoDB và AWS Transit Gateway.

  1. Performance efficiency

Các nguyên tắc trong trụ cột performance efficiency tập trung vào việc sử dụng tài nguyên điện toán để xây dựng kiến trúc trên AWS, đảm bảo hiệu năng bền vững khi nhu cầu thay đổi và công nghệ phát triển. Các chủ đề trong trụ cột này bao gồm đơn giản hóa việc sử dụng công nghệ phù hợp với mục tiêu, khả năng mở rộng toàn cầu trong vài phút và giảm thời gian, công sức cần thiết để cung cấp dịch vụ.

Yếu tố concurrency (VIII) ưu tiên quản lý các process, cần stateless và cho phép horizontal scaling, thúc đẩy hiệu quả hiệu năng. Yếu tố backing services (IV) cũng thuộc danh mục này vì nó quy định tính linh hoạt trong tích hợp. Sự linh hoạt này giúp ứng dụng tối đa hóa hiệu năng bằng cách sử dụng đúng tài nguyên đáp ứng yêu cầu về khả năng mở rộng và hiệu năng.

Các dịch vụ AWS hỗ trợ đạt được performance efficiency bao gồm Amazon EC2, Amazon EC2 AutoScaling, Amazon EBS, Amazon S3, Amazon Aurora, Amazon DynamoDB, Amazon ElastiCache, Amazon CloudFront, Application Auto Scaling, Elastic Load Balancing (ELB), AWS Lambda, Amazon API Gateway, AWS Step Functions, Amazon SQS, Amazon Kinesis, AWS Global Accelerator, Amazon Aurora, AWS X-Ray, Amazon CloudWatch và AWS Compute Optimizer.

  1. Cost optimization 

Trụ cột cost optimization cung cấp hướng dẫn về khả năng vận hành hệ thống và mang lại giá trị kinh doanh với chi phí thấp nhất. Các đánh giá cost optimization giúp tránh chi phí không cần thiết, phân tích và phân bổ chi tiêu, sử dụng mô hình định giá phù hợp.

Mối quan hệ của yếu tố build, release, run (V) ủng hộ việc tách biệt quy trình và kỷ luật nghiêm ngặt trong xử lý triển khai ứng dụng hiệu quả. Điều này phù hợp với trụ cột cost optimization vì hoạt động hiệu quả về chi phí thường là kết quả của quy trình và cơ chế được thiết kế tốt. Các dịch vụ AWS hỗ trợ yếu tố build, release, run là AWS CodeBuild và AWS CodeDeploy.

Các dịch vụ AWS khác hỗ trợ cost optimization bao gồm AWS Cost Explorer, AWS Budgets, AWS Data Exports, AWS Trusted Advisor, AWS Compute Optimizer, EC2 Spot Instances, AWS Savings Plans, Amazon S3 Intelligent-Tiering, AWS Lambda, Amazon Aurora, Application Auto Scaling, AWS Organizations, AWS Resource Groups, Tag Editor, AWS Marketplace, AWS License Manager, AWS Glue và Amazon Athena.

  1. Sustainability

Trụ cột sustainability tập trung vào việc giảm thiểu tác động môi trường khi chạy workload trên cloud. Các chủ đề bao gồm xem xét vòng đời dữ liệu và chính sách lưu trữ như phương pháp chỉ sử dụng những gì cần thiết.

Yếu tố disposability (IX) phù hợp với sustainability vì nó nhấn mạnh khả năng khởi động và tắt nhanh chóng của ứng dụng khi cần. Điều này mang lại sự linh hoạt và tối ưu hóa việc sử dụng tài nguyên trong vòng đời ứng dụng.

Các dịch vụ AWS hỗ trợ đạt được sustainability bao gồm AWS Customer Carbon Footprint Tool, Amazon EC2 AutoScaling, AWS Lambda, Amazon EC2 Spot Instances, Amazon EBS gp3 volumes, Amazon S3 Intelligent-Tiering, Amazon S3 Lifecycle configurations, AWS Graviton processors, Amazon Aurora Serverless, Amazon RDS Multi-AZ deployments, AWS Compute Optimizer, AWS Well Architected Tool và Amazon CloudWatch.

Các yếu tố còn lại

Port binding, logs và admin processes không được phân loại cụ thể vào các trụ cột của AWS Well-Architected Framework. Tuy nhiên, các yếu tố này có thể được giải quyết như một phần thiết yếu của các dịch vụ mà AWS cung cấp.

Yếu tố thứ bảy: Port binding

Yếu tố port binding quy định rằng ứng dụng nên được gắn với một cổng cụ thể khi được host như một ứng dụng web, với mục đích làm cho ứng dụng hoàn toàn độc lập. Trong bối cảnh AWS, chúng tôi cung cấp nhiều cách để đạt được nguyên tắc này, tùy thuộc vào cách ứng dụng được triển khai trên AWS. Khi triển khai port binding trên AWS, chúng tôi cung cấp các tính năng như bảo mật, service discovery và dynamic port mapping để đơn giản hóa và bảo mật ứng dụng thông qua các dịch vụ như Amazon EC2, Amazon ECS, Amazon EKS, AWS Elastic Beanstalk, AWS App Runner.

Yếu tố thứ mười một: Logs

Yếu tố logs quy định rằng ứng dụng nên xử lý process đang chạy như một luồng sự kiện ra các file được quản lý hoàn toàn bởi môi trường thực thi. AWS cung cấp nhiều loại logging để ghi lại các khía cạnh khác nhau của ứng dụng và cơ sở hạ tầng hỗ trợ. CloudWatch là dịch vụ quản lý logging tập trung để giám sát, lưu trữ và cung cấp quyền truy cập vào các file log từ các dịch vụ AWS.

Yếu tố thứ mười hai: Admin processes

Yếu tố admin processes khuyến nghị các nhà phát triển ứng dụng thực hiện các tác vụ quản trị một cách riêng biệt để giảm thiểu tác động đến ứng dụng chính. Tại AWS, yếu tố này được thực hiện thông qua việc tách biệt control plane và data plane. Control plane chịu trách nhiệm quản lý, cấu hình và kiểm soát cơ sở hạ tầng mạng hoặc hệ thống, trong khi data plane chịu trách nhiệm xử lý dữ liệu người dùng hoặc lưu lượng thực tế. Sự tách biệt này là một phần vốn có của các dịch vụ AWS. Chúng tôi tin rằng sự tách biệt này cho phép AWS cung cấp các dịch vụ có khả năng mở rộng, tính sẵn sàng cao, an toàn và hiệu quả.

Áp dụng AWS Well-Architected Framework

Framework không nên được coi là một danh sách kiểm tra sau khi phát triển hoàn tất. Thay vào đó, việc đánh giá nên được thực hiện trong giai đoạn thiết kế để giúp bạn học hỏi và áp dụng các best practice về kiến trúc. Khi kết thúc phát triển, các kiến trúc sư nên xây dựng một giải pháp tạo điều kiện thuận lợi cho việc xây dựng và triển khai dịch vụ nhanh hơn, rủi ro thấp hơn. Framework không phải là tài liệu tĩnh, và khi AWS phát triển, các kiến trúc sư tiếp tục học hỏi từ việc làm việc với khách hàng và hoàn thiện định nghĩa về well-architected.

Kết luận

Nếu bạn đã quen thuộc với twelve-factors hoặc muốn phát triển ứng dụng twelve-factors trên AWS, hãy tìm hiểu thêm về AWS Well-Architected Framework. Hãy cân nhắc bắt đầu một dự án đánh giá để tự khám phá các câu hỏi chi tiết trong mỗi danh mục hoặc nếu bạn có workload cụ thể đang làm việc. Bạn có thể sử dụng một trong nhiều AWS Well-Architected Tool lenses để tập trung áp dụng các best practice này vào các dịch vụ bạn đang sử dụng. Để bắt đầu đánh giá lens, hãy xem AWS Well-Architected Tool, có thể truy cập miễn phí thông qua AWS Management Console.

Về tác giả

Michael Phorn

Michael Phorn là Sr. Solutions Architect hỗ trợ ngành dịch vụ tài chính, chuyên về khách hàng thanh toán. Ông đã làm việc trong lĩnh vực AI, machine learning và phát triển phần mềm doanh nghiệp hơn một phần tư thế kỷ.