
หลังจากอ่านบทความเรื่อง The MVP Dilemma: Scale Now or Scale Later?ว่าด้วยเรื่องของการ scale ระบบงานว่ามีแนวคิดที่น่าอย่างไรบ้างจึงทำการจดบันทึกสิ่งที่น่าสนใจไว้นิดหน่อย

จากการไปแบ่งปันเรื่องของ Software Architecture ในมุมมองด้านโครงสร้างพบว่าจะมีโครงสร้างของระบบหลายรูปแบบแต่ส่วนใหญ่ที่พบคือ จะแยกเป็น tier ต่าง ๆ ออกมาแล้วแต่ละ tier จะมีขนาดที่ใหญ่มาก ๆ ตามเวลาหรือจำนวน featureไม่ว่าจะเป็น web tier, business tier, service tier และ database tierโดยการโตแบบนี้จะเรียกว่า Monolithหรือบ่อยครั้งจะเรียกว่า Legacy system นั่นเองส่งผลให้ดูแลรักษายาก พัฒนายาก build นานscale ยาก !!

นั่งดูการสัมภาษณ์เรื่อง Scaling Rails & Postgres to Millions of Users at Microsoft: Lessons & Takeawaysซึ่งเป็นผู้เขียนหนังสือ High Performance PostgreSQL for Rails เล่าถึงประสบการณ์ในการพัฒนาระบบงานด้วย Railsและการ scale PostgreSQL database เพื่อรองรับการใช้งานของผู้ใช้งานจำนวนมากทั้งการ monitoring และระบบที่ซับซ้อนมาดูว่ามีเรื่องอะไรที่น่าสนใจบ้าง

วิธีการสำหรับการ scale database ให้รองรับข้อมูล และ traffic ที่มากขึ้นนั้น มีหลายวิธียกตัวอย่างเช่น การขยายเครื่องให้ใหญ่ขึ้น การเพิ่มเรื่องให้มากขึ้น การจัดทำ index แต่ถ้ามีข้อมูลในแต่ละ table มากขึ้น ก็ใหญ่ ดังนั้นต้องทำ partition เพื่อให้ table เล็กลง และ index มีขนาดเล็กลง การทำ replication เช่น master-slave, multi-master เป็นต้น เพื่อแยกระหว่างการ read กับ write data ออกจากกัน การทำ house keeping ของข้อมูล ให้มีใช้และเก็บเท่าที่จำเป็น

อ่านบทความเรื่อง Best practices can slow your application down จากทาง Stack Overflow โดยได้อธิบายว่า ไม่ค่อยทำตาม best practice ในการพัฒนาระบบมาเลยทั้งการออกแบบ เขียน code ที่ช่วยให้อ่านและดูแลได้ง่ายรวมถึงการทดสอบ และ deploy ระบบเป็นเรื่องที่น่าสนใจมาก ๆ ว่า แล้วตัดสินใจกันอย่างไร ?ว่าจะเลือกไปทางไหนในการพัฒนาระบบ

ในเรื่องของการ scale ระบบนั้น ถือเป็นเรื่องสำคัญ โดยระบบที่ deploy ด้วย Kubernetes นั้น สามารถจัดการแบบง่าย ๆ ด้วย Deployment และ ReplicaSet แต่ก็ยังคงต้องทำแบบ manual ดังนั้น Kubernetes จึงได้สร้าง Horizontal Pod Autoscaler (HPA) ขึ้นมา เพื่อช่วยให้การ scale ในระดับ Pod แบบอัตโนมัติได้ โดยค่า default นั้นจะดูค่าจากการใช้งาน resource เช่น CPU เป็นต้น รวมทั้งยังใช้งานยากพอสมควร ถ้าสามารถทำการ custom ได้ รวมทั้งทำงานร่วมกับ metric อื่น ๆ ได้ น่าจะดีและมีประโยชน์กว่านั่นจึงเป็นที่มาของ Kubernetes Event Driven Autoscaling (KEDA)