สรุปการพัฒนา Application แบบ The Twelve-Factor แบบสั้นๆง่ายๆ

22

สรุปการพัฒนา Application แบบ The Twelve-Factor แบบสั้นๆง่ายๆ

Cr. xbsoftware

การพัฒนา Application แบบ 12 Factors
– เป็น Concept ของการทำงานบน Cloud เป็นแนวปฏิบัติที่ออกแบบมาเพื่อช่วยในการพัฒนาและบริหารจัดการ Application บน Cloud ซึ่งเป็นการทำ Tools หรือเครื่องมือต่างๆ เข้ามาช่วยในการจัดการ

1. CodeBase (ฐานโค้ด)
– Application ต้องมีฐานโค้ดเดียวกัน คือ ในการพัฒนา Application ควรมีที่สำหรับจัดเก็บ Source Code อยู่ในที่เดียวกันเพื่อให้สมาชิกในทีมสามารถแบ่งกันพัฒนาได้ โดยที่พัฒนาจากที่เดียวกัน ทำให้ Deploy ได้หลาย Version เช่น Development, Staging และ Production โดยแต่ละเวอร์ชั่นใช้ฐานโค้ดเดียวกันแต่แตกต่างที่ Configuration
– Tool ที่ใช้งาน เช่น Git (Version Control)

2. Dependencies (การจัดการ Dependencies หรือ Library)
– Application ต้องประกาศ Dependencies ทั้งหมดที่จำเป็นใน Manifest (เช่น Package.json สำหรับ NodeJS) ไม่ควรนำไปรวมกับ SourceCode และจัดการโดยแยกออกจากระบบ (System-wide Dependencies) เพื่อให้ทั้งทีมจัดการได้ง่าย

3. Config (การตั้งค่า)
– การตั้งค่าควรแยกออกจากโค้ด (Config File) โดยใช้ Environment Variables เพื่อให้สามารถเปลี่ยนแปลงได้ง่ายสำหรับการ Deploy ในแต่ละ Environment

4. Backing Services (บริการสำรอง)
– บริการที่ Application พึ่งพาควรมีการจัดทำบริการสำรอง

5. Build, Release, Run (แบ่งขั้นตอนการพัฒนา)
– Application ควรมีขั้นตอนที่ชัดเจนในการ Build (เตรียมโค้ด), Release (รวมโค้ดและตั้งค่า) และ Run (การทำงานจริง) เพื่อแยกการจัดการในแต่ละขั้นตอนออกจากกัน

6. Processes (กระบวนการ)
– Application ควรประกอบด้วย Procress ที่ไม่เก็บสถานะ (Stateless) โดยการเก็บข้อมูลควรถูกแยกไปยังฐานข้อมูลหรือบริหารอื่น เพื่อให้ทำงานได้อย่างอิสระ คือไม่ควรให้ Application ทำงานที่เดียวกันทั้งหมด เพื่อทำให้ดูแลง่ายและ Scale ง่าน

7. Port Binding (การกำหนดพอร์ต)
– Application ควรกำหนดการเชื่อมต่อผ่าน Port Binding โดยใช้ HTTP Server ของตัวเอง ซึ่งทำให้มีความยืดหยุ่น ถ้าไม่มีการทำก็จะทำให้แอฟพลิเคชันอาจจะไม่สามารถใช้งงานได้ในกรณีที่มีการกำหนด Environemnt ในการพัฒนาที่แตกต่างกัน ซึ่งอาจจะมีการใช้งานคนละ Port

8. Concurrency (การทำงานหลายกระบวนการ)
– Application ต้องสามารถทำงานหลานกระบวนการได้พร้อมกันโดยแยกการทำงานที่แตกต่างออกเป็น Procress ย่อยๆ เพื่อให้สามารถปรับขนาดการใช้ง่าย จะเกิดขึ้นเมื่อมีการใช้งานจำนวนมากๆ จะต้องมีการขยาย Service ให้โดยอัตโนมัติเพื่อให้รองรับการใช้งาน

9. Disposability (ความสามารถในการหยุดและเริ่มใหม่)
– Process ควรสามารถหยุดหรือเริ่มใหม่ได้ง่ายและรวดเร็ว โดยไม่ทำให้ Application ทำงานล้มเหลว เมื่อมีการล่มต้องสามารถฟื้นกลับได้เองหรือมีการเกิดขึ้นใหม่เพื่อทดแทนตัวที่ล่มไป

10. Development / Production Pority (ความสอดคล้องระหว่าง Dev และ Prod)
– Environment ของการพัฒนา ควรมีความสอดคล้องกันมากที่สุด เพื่อป้องกันปัญหาที่อาจจะเกิดจากความแตกต่างกันของสภาพแวดล้อม เพื่อให้สามารถทำงานได้อย่างต่อเนื่อง

11. Logs (การจัดการ Logs)
– Application ไม่ควรจัดการ Logs โดยตรง แต่ควรมีการส่ง Logs เป็น Event Stream เพื่อให้บริการอื่นๆ จัดการ

12. Admin Processes (กระบวนการบริการจัดการ)
– คำสั่งบริการจัดการชั่วคราว (เช่น Migrationp หรือ Cron Job) ควรแยกออกจาก CodeBase หลักและสามารถ run ได้ใน Environment ที่มีการ Deploy Application

Cr. https://vedcraft.com/