จากบทความเรื่อง Scaling productivity on microservices at Lyft (Part 2): Optimizing for fast local development
ทำการอธิบายถึงการเพิ่ม productivity ของการพัฒนาระบบของ Lyft
ซึ่งมีโครงสร้างของระบบตามแนวคิด Microservicesว่าทำอย่างไร
จึงจะช่วยให้ developer experience ดีขึ้น
โดยสามารถทำงานได้บนเครื่อง local หรือเครื่องนักพัฒนาแต่ละคนให้ได้มากที่สุด
มาดูกันว่าทางทีมของ Lift ทำอย่างไรกันบ้าง ?
เริ่มที่ขั้นตอนการพัฒนาจะประกอบด้วย 2 ส่วนคือ
- Inner dev loop คือการแก้ไขและ run test บนเครื่อง local ของนักพัฒนา
- Outer dev loop คือ CI/CD process นั่นเอง ซึ่งอยู่ในอีกระบบหนึ่ง จะทำงานเมื่อตรวจสอบการเปลี่ยนแปลงใน version control ที่กำหนดไว้
แสดงดังรูป
โดยสิ่งที่ขาดหายไปใน Inner Dev Loop คือ
การทำให้เหมือนหรือคล้าย Outer Dev Loop นั่นคือ
การมีเรื่องของ CI/CD process นั่นเอง
ถ้าสามารถทำได้บนเครื่อง local ของนักพัฒนาก่อน
น่าจะช่วยลดเวลาของการตรวจสอบจากการเปลี่ยนแปลงต่าง ๆ ได้ดี
โดยการ run บน local นั้น ทางทีมไม่ได้ใช้งาน Container เช่น Docker
เพราะว่ามีปัญหามากมาย
รวมทั้งกินทรัพยากรมากอีกด้วย
ดังนั้นจึงทำการติดตั้งแบบปกติบนเครื่องไปเลย
โดยใช้เครื่องมือต่าง ๆ มาช่วยจัดการ environment หรือ virtual environment เช่น
- Python จะใช้ AActivator
- Node จะใช้ Nodeenv
ที่สำคัญจะ run เพียง service เดียวเท่านั้น
เพื่อลดการใช้ทรัพยากรรวมทั้งง่ายต่อการใช้งานและทำความเข้าใจ
ขั้นตอนของการ run service เป็นดังนี้
- ทำการตรวจสอบ environment ว่ามี software และ configuration ตามที่กำหนดไว้หรือไม่
- ทำการสร้าง virtual environment ขึ้นมา
- ทำการ start data store หรือ database ขึ้นมา
- ทำการ start proxy app ขึ้นใช้สำหรับจัดการการเรียกข้อมูลจาก service อื่น ๆ ทำให้ง่ายต่อการ mock นั่นเอง
- ทำการ initial ข้อมูลใน database จาก script ที่สร้างไว้
- สุดก็ทำการ run server ขึ้นมา เพื่อทำการมดสอบหรือใช้งานต่อไป
โดยที่ Proxy app แสดงการทำงานดังรูป
โดยรวมแล้วเป็นแนวคิดที่น่าสนใจ
น่าลองนำมาประยุกต์ใช้งานเหมือนกัน