ไมโครซอฟท์เล่าประสบการณ์ย้ายระบบจาก .NET Framework เป็น .NET Core, ย้ายจากวินโดวส์เป็นลินุกซ์

by mk
8 October 2022 - 12:10

ไมโครซอฟท์เขียนบล็อกเล่าประสบการณ์ย้ายระบบจัดการธุรกรรมภายในของตัวเอง ที่เรียกรวมๆ ว่า Microsoft Commerce (มีเซอร์วิสประมาณ 700 ตัว) จากเดิมที่เขียนด้วย .NET Framework รันบนวินโดวส์ มาสู่ .NET Core ที่รันบนลินุกซ์

เหตุผลในการย้ายมาจากไมโครซอฟท์ต้องการย้ายระบบไปรันบน Azure ใช้สถาปัตยกรรม container/kubernetes (AKS) แต่พบว่ารันด้วยลินุกซ์จะเหมาะสมมากกว่า ดังนั้นไมโครซอฟท์จึงต้องย้ายจาก .NET Framework มาเป็น .NET Core ที่รันได้ข้ามแพลตฟอร์มก่อน

ไมโครซอฟท์ทดลองย้ายเซอร์วิสตัวหนึ่งชื่อ Global Lookup Service (GLS) มีหน้าที่ตรวจสอบว่าผู้ใช้อยู่ที่ไหน และอยู่ใกล้ศูนย์ข้อมูลไหนมากที่สุด เซอร์วิสตัวนี้กระจายอยู่ในศูนย์ข้อมูล 4 เขตทั่วโลก มีโหลดที่ 100,000 รีเควสต์ต่อวินาที เดิมรันอยู่บน .NET Framework 4.6.2 ใน Windows VM อีกที

กระบวนการย้ายเริ่มจากเปลี่ยน .NET Framework 4.6.2 เป็น .NET Core 3.1 (ภายหลังอัพเกรดเป็น .NET 5 และ .NET 6 ตามลำดับ) ความซับซ้อนของการย้ายขึ้นกับเซอร์วิสแต่ละตัวว่าพึ่งพาฟีเจอร์ของ .NET แค่ไหน บางตัวอาจแค่เปลี่ยนรันไทม์อย่างเดียวก็พอ ในขณะที่บางตัวก็อาจแก้โค้ดเพิ่มด้วย

การเปลี่ยนจาก .NET Framework 4.6.2 ที่เก่าแล้ว (ออกปี 2016) มาเป็น .NET Core 3.1 ที่ใหม่ขึ้น ช่วยให้มีประสิทธิภาพเพิ่มขึ้นที่ระดับรันไทม์ทันที (ลดจำนวนคอร์ซีพียูลงได้ 35% และลด latency 78%) จากนั้นเมื่ออัพเกรดเป็น .NET 5 และ 6 ประสิทธิภาพโดยรวมก็เพิ่มขึ้นตามอีก แถมกระบวนการอัพเกรดเวอร์ชันไม่ยากเท่ากับตอนย้ายจาก .NET Framework มาเป็น .NET Core แล้ว

หลังย้าย .NET เสร็จเรียบร้อย ก็เป็นคิวของการย้ายระบบปฏิบัติการจากวินโดวส์เป็นลินุกซ์ ซึ่งเจอปัญหาว่าโค้ดเดิมเขียนเพื่อวินโดวส์ มีปัญหาอย่างการใช้ \ (backslash), การเรียก COM หรือ API บางอย่างของวินโดวส์ (เช่น Win32 File API), การใช้เว็บเซิร์ฟเวอร์ IIS ของวินโดวส์ จึงจำเป็นต้องค่อยๆ ทยอยแก้ไขไปทีละส่วน

ตัวอย่างการใช้เธร็ดที่ลดลงหลังการย้ายมาเป็น .NET Core

ที่มา - Microsoft

Blognone Jobs Premium