นั่งดูการสัมภาษณ์เรื่อง Scaling Rails & Postgres to Millions of Users at Microsoft: Lessons & Takeaways
ซึ่งเป็นผู้เขียนหนังสือ High Performance PostgreSQL for Rails
เล่าถึงประสบการณ์ในการพัฒนาระบบงานด้วย Rails
และการ scale PostgreSQL database
เพื่อรองรับการใช้งานของผู้ใช้งานจำนวนมาก
ทั้งการ monitoring และระบบที่ซับซ้อน
มาดูว่ามีเรื่องอะไรที่น่าสนใจบ้าง ?
ในการพัฒนาระบบงาน monolithic ด้วย Rails นั้น
ช่วยให้นักพัฒนาไม่ต้องไปสนใจการจัดการ database มากนัก
เพราะว่าใช้งานผ่าน Active Record ไปเลย
ทำให้การพัฒนามีความ productive สูงมาก
แต่เมื่อมีคนใช้งานมากขึ้น เกิด concurrency มากขึ้น มีการเปลี่ยนแปลงมากยิ่งขึ้น
จึงทำให้เราต้องเข้ามาทำความเข้าใจมากยิ่งขึ้น
ว่า Active Record มันทำงานอย่างไร
จากเดิมรูปแบบของทีมไม่ได้แบ่งเป็นตำแหน่งที่ชัดเจน
ทุกคนช่วยดูแลทั้งหมด
เมื่อเกิดปัญหาที่ database ขึ้นมา
ทีม developer จำเป็นต้องเข้ามาจัดการและ tuning database
ว่า code ที่ตัวเองเขียนนั่น สร้างปัญหาอะไร และจะแก้อย่างไร ?
แนวทางในการจัดการเรื่อง Architecture และ Database หลัก ๆ เป็นดังนี้
- เริ่มดูว่าระบบงานมีอัตราการ read และ write เป็นอย่างไร เพื่อแบ่งกลุ่มของงาน เช่น content, comment และ like เป็นต้น
- PostgreSQL มีข้อดีด้วยการการันตีความถูกต้อง เมื่อเกิด concurrency แต่ก็แลกมาด้วย overhead ด้าน performance ที่สูงเช่นกัน
- สร้างความเข้าใจให้ application developer เข้าใจเกี่ยวกับ database performance ว่าสิ่งที่สร้างขึ้นมานั้น ส่งผลต่อการทำงานของ database อย่างไร เพื่อจะไม่เลือกแนวทางที่แย่เข้ามาในระบบงาน
- เมื่อมี traffic เข้ามาเยอะ ๆ จะเริ่มเกิดการแบ่ง traffic ออกตามรูปแบบการใช้งาน เช่น แยก read และ write ไปตามแต่ละ instance ไปเลย เพื่อทำการ optimize การทำงานง่ายและเหมาะสมขึ้น
- จึงทำให้ต้องมาสนใจเรื่อง replication มากขึ้น
- แต่เมื่อข้อมูลใน table หนึ่ง ๆ ใหญ่เกินไป ก็ต้องมาเรียนรู้และใช้งานการทำ sharding data ดังนั้นเรื่องของ monolithic architecture ก็ต้องพึงระวังด้วยว่าได้เวลาปรับปรุงแล้วหรือยัง
- โดยความรู้ต่าง ๆ เหล่านี้ต้อง share ความรู้ให้ทั้งทีม ไม่ได้ผูกติดกับคนใดหนึ่งเท่านั้น
- การจัดการ connection pool, monitoring สำคัญมาก ๆ เพื่อให้รู็ถึงปัญหาต่าง ๆ อย่างรวดเร็ว เพื่อให้แก้ไขได้เร็ว
- จะใช้อะไรก็ต้องเข้าใจมันด้วย เช่น ใช้งาน PostgreSQL ก็ต้องเข้าใจ operation model ของมันด้วย เพื่อช่วยลดข้อผิดพลาดในการใช้งาน
ลองนำไปประยุกต์ใช้งานกันดูครับ