Database สำหรับ continuous delivery

Chokchai Phatharamalai
odds.team
Published in
1 min readNov 13, 2023
Photo by Tobias Fischer on Unsplash

ตอนทำ continuous delivery สำหรับ stateless database เป็นเรื่องง่ายแล้วในสมัยนี้ เช่น ถ้าใช้ k8s แค่ทำ rolling deployment ก็จบแล้ว ไม่ซับซ้อนอะไร

แต่การ migrate SQL database โดยไม่ให้มี down time นี่สิ เป็นปัญหาที่ปวดหัวที่สุด

ลองจินตนาการระบบที่ทำงาน 24/7 ดู นั่นมีข้อมูลถูกอัพเดทตลอดเวลา วิธีที่ดีที่สุดคือการเอา request ที่จะ save ลง database ไปใส่ queue ก่อน แล้วพอ migrate เสร็จ ค่อย consume ของใน queue ไป save ลง database เรียกง่าย ๆ ว่า take consistency hit คือยอมเสียความสมบูรณ์ของข้อมูลไปสักพัก ดีกว่ายอมปิดระบบ (availability hit)

การเลือกทางนี้ user อาจจะเจอว่า save ข้อมูลเสร็จแล้ว แต่ไม่เห็นข้อมูลใหม่สักพักหนึ่ง ซึ่งในบางกรณีอาจจะดีกว่าปิดระบบไปเลย

เทคนิคด้านบนช่วยลดให้ migrate database ได้ง่ายขึ้น แต่ลองคิดดูว่าถ้าโชคร้าย deploy ไม่สำเร็จแล้วต้อง rollback หล่ะ แค่คิดก็เหนื่อยแล้ว

Serverless database

ตอนไปงาน QCON 2023 ที่ซานฟรานซิสโกที่ผ่านมา ผมได้รู้จักกับ serverless database ชื่อ neon ที่มี feature ในการ fork database ออกมาเป็นก้อนใหม่ทันที ซึ่งการมี option นี้ทำให้การ migrate database บนระบบที่ให้บริการตลอดเวลาง่ายขึ้นเยอะ โดยเฉพาะตอน rollback ก็สลับไปก้อนที่ fork เก็บไว้ก่อน migrate ก็ได้แล้ว

สรุป

ถ้าความเสี่ยงหรือความแพงในการ deliver ถูกลง เราก็จะทำมันได้บ่อยยิ่งขึ้น ยิ่งทำบ่อย change ที่เกิดขึ้นในแต่ละรอบที่ deploy ก็ขนาดเล็กลงตาม ส่งผลให้ความเสี่ยงและความแพงในการ deliver ลดลงไปอีก

Serverless database นอกจากไม่ต้อง maintain เองแล้ว ยังมี feature ที่ทำให้ migrate database ได้ง่ายสำหรับ service ที่ให้บริการตลอดเวลาด้วย เหมาะกับการทำ Software as a Service มาก ในอนาคตน่าจะมีทางเลือกอื่น ๆ ออกมาให้ใช้เยอะขึ้นอีก

อ้างอิง

--

--