Azure ได้เปิดเผยกลยุทธ์และวิธีการปฏิบัติที่ทีมงานได้ใช้เพื่ออัปเดตบริการ SQL Server บน Cloud ให้ล่าสุดอยู่เสมอโดยกระทบกับลูกค้าน้อยที่สุด

แน่นอนความความท้าทายของการอัปเดตบริการบน Cloud ย่อมประกอบไปด้วยผู้ใช้งานนับล้านคนที่คาดหวังเรื่อง Availability และ Reliability แถมยังมีธุรกิจที่สำคัญๆ อย่างธนาคารอีกด้วย ซึ่งวันนี่ทีมงานของ Azure ได้เผยถึงวิธีการที่พวกเขาใช้เพื่อบริหารจัดการ SQL Server ให้ล่าสุดอยู่เสมอโดยกระทบกับลูกค้าน้อยที่สุดครับ
วิธีการโดยทั่วไปทีมงานจะต้องหยุดโปรเซสของ SQL Server จากนั้นต้องทำการ Replica และ Failover ไปเครื่องอื่น ซึ่งทีมงานได้มีการวางแผนให้กำหนดการอยู่ในกรอบ SLA 99.995% ดังนี้
- พัฒนาฟีเจอร์ Resumable index Rebuild และ Accelerated Database Recovery ขึ้นมาเพื่อแก้ปัญหาผลกระทบที่ต้องยกเลิก Transaction และการ Query ที่ยังทำงานอยู่ อย่างไรก็ตามทีมงานยอมรับว่ามีบางการใช้งานไม่สามารถ Resumable แบบอัตโนมัติได้
- มีการทำ Replica หลายแห่งให้กับทุก Database รวมถึงยังเตรียม Hot Standby รองรับไว้เสมอ
- พยายามทำการ Fail Over น้อยที่สุดแต่หากจำเป็นต้องทำจริงๆ จะอัปเดตทุกส่วนพร้อมกันทีเดียว เช่น OS, Service Fabric และ SQL Server
- ใช้ Scheduling เพื่อหลีกเลี่ยงเวลาปฏิบัติงานของธุรกิจใน Regions ที่แตกต่างกัน
- พยายาม Abort ตัว Active Transaction ให้น้อยที่สุด
- ศึกษารูปแบบการใช้ Workload เพื่อตัดสินใจว่า Fail Over ช่วงเวลาไหนกระทบน้อยที่สุด
อย่างไรก็ตามประเด็นที่ทีมงาน Azure ไฮไลต์ในครั้งนี้คือการทำ Hot Patching หรือการแก้ไขโค้ดในหน่วยความจำโดยไม่ต้องมีการรีสตาร์ทโปรเซส ซึ่งทีมงานไปแก้ไขโค้ด C++ ใน SQL Engine โดยไม่ต้องรีสตาร์ท sqlservr.exe ด้วยเหตุนี้จึงไม่เกิดการ Failover และไม่กระทบต่อการใช้งานของลูกค้านั่นเอง โดยวิธีการนี้มีข้อจำกัดคือไม่เหมาะกับการเปลี่ยนแปลงปริมาณมากอย่างอัปเดตฟีเจอร์หลัก แต่ Azure ชี้ว่าเคสการอัปเดตกว่า 80% ไม่ใช่การอัปเดตหลัก ซึ่ง Azure ได้เริ่มใช้วิธีการ Hot Patching กับ Production มาตั้งแต่ปี 2018 ให้ SQL Server หลายล้านเครื่องแล้วซึ่งช่วยเพิ่มประสิทธิภาพการ Patch ได้กว่า 50% ดังนั้นทางทีมงาน Azure จึงสามารถผสมผสาน 2 วิธีเพื่ออัปเดตบริการ SQL Server Database ให้ล่าสุดได้เสมอนั่นเอง
ที่มา : https://azure.microsoft.com/en-us/blog/hot-patching-sql-server-engine-in-azure-sql-database/