The Twelve-Factor App

บทนำ

ในยุคสมัยใหม่ ซอฟต์แวร์ถูกส่งมอบทั่วไปเป็นบริการ: เรียกว่า web apps, หรือ software-as-service. twelve-factor app เป็นหลัการสำหรับสร้างแอพพลิเคชัน software-as-a-service ที่:

หลักการ twelve-factor สามารถประยุกต์ใช้ได้กับแอพพลิเคชันที่เขียนด้วยภาษาใดๆ และซึ่งใช้ร่วมกับบริการสนับสนุนใดๆ (ฐานข้อมูล, คิว, หน่วยความจำเคช เป็นต้น).

ประวัติ

ผู้มีส่วนร่วมของเอกสารนี้ได้มีส่วนเกี่ยวข้องโดยตรงกับการพัฒนาและการใช้งานแอพพลิเคชันจำนวนมาก และเกี่ยวข้องทางอ้อมสำหรับการพัฒนา การดำเนินงาน และการขยายขนาดของแอพพลิเคชันจำนวมมหาศาลผ่านงานของเราที่แพลตฟอร์ม Heroku

เอกสารนี้สังเคราะห์จากประสบการณ์และการสังเกตทั้งหมดของพวกเราบนแอพพลิเคชัน software-as-a-service ที่หลากหลายจำนวนมาก เป็นสามเหลียมของแนวทางปฏิบัตในอุดมคติสำหรับการพัฒนาแอพพลิเคชัน ให้ความสนใจเป็นพิเศษกับพลวัตของการเจริญเติบโตของแอพพลิเคชันในช่วงเวลาหนึ่ง พลวัตของการมีส่วนร่วมระหว่างนักพัฒนาที่ทำงานกับ codebase ของแอพพลิเคชัน และหลีกเลี่ยงการใช้จ่ายของซอฟต์แวร์.

แรงจูงใจของเราเพื่อสร้างความตระหนักของปัญหาระบบบางอย่างที่เราเห็นในการพัฒนาแอพพลิเคชันสมัยใหม่ เพื่อให้คำศัพย์ที่ใช้ร่วมกันสำหรับการพูดคุยเกี่ยวกับปัญหาเหล่านี้ และนำเสนอแนวทางแก้ไขแนวกว้างสำหรับปัญหาเหล่านี้พร้อมกับคำศัพท์ที่ใช้ประกอบกัน รูปแบบนี้ได้รับแรงบันดาลใจจากหนังสือของ Martin Fowler Patterns of Enterprise Application Architecture และ Refactoring.

ใครควรจะอ่านเอกสารนี้?

นักพัฒนาที่สร้างแอพพลิเคชันซึ่งทำงานเป็นเซอร์วิซ (service) วิศวกรดำเนินงานผู้ซึ่งปรับใช้ (deploy) หรือจัดการแอพพลิเคชันดังกล่าว

The Twelve Factors

I. Codebase

มีเพียง codebase เดียวที่ติดตามด้วย version control, มีหลาย deploy

II. Dependencies

มีการประกาศและแยกการอ้างอิง (dependency) ทั้งหมดอย่างชัดเจน

III. Config

จัดเก็บการตั้งค่า (config) ไว้ในสิ่งแวดล้อมของระบบ

IV. Backing services

จัดการกับบริการสนับสนุน (backing service) ให้เป็นทรัพยากรที่แนบมา

V. Build, release, run

แยกขั้นตอนของการ build และ run อย่างเคร่งครัด

VI. Processes

รันแอพพลิเคชันเป็นหนึ่งหรือมากกว่าให้เป็น stateless processes

VII. Port binding

นำออกบริการด้วยการเชื่อมโยง port

VIII. Concurrency

ขยายออกของแอพพลิเคชันด้วยรูปแบบ process

IX. Disposability

เพิ่มความแข็งแกร่งด้วยการเริ่มต้นระบบอย่างรวดเร็วและปิดระบบอย่างนุ่มนวล

X. Dev/prod parity

รักษา development, staging และ production ให้มีความใกล้เคียงกันที่สุด

XI. Logs

จัดการ logs ให้เป็นแบบ event stream

XII. Admin processes

รันงานของผู้ดูแลระบบ/การจัดการให้เป็นกระบวนการแบบครั้งเดียว