ทำไมโค้ดจึงรันฉลุยบนเครื่องเรา แต่พังไม่เป็นท่าบนคลาวด์
เจาะเบื้องหลังปัญหาคลาสสิกของโปรแกรมเมอร์ เมื่อโค้ดทำงานได้ดีบนแล็ปท็อปประสิทธิภาพสูง แต่กลับช้าลงถึง 10 เท่าบนเซิร์ฟเวอร์จริง

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- ความแตกต่างของระบบปฏิบัติการและขนาดหน้าจอสร้างปัญหา UI
- ชิปตระกูล M ของ Apple แรงกว่าเซิร์ฟเวอร์บนคลาวด์ทั่วไป
- เซิร์ฟเวอร์ทดสอบอายุเกินสศตวรรษทำให้ระบบแฮชรหัสผ่านช้าลง 10 เท่า
ประโยคคลาสสิกอย่างคำว่าโค้ดทำงานได้ปกติบนเครื่องของฉัน น่าจะเป็นคำพูดคุ้นหูของนักพัฒนาซอฟต์แวร์ทุกคนเมื่อเกิดปัญหาซอฟต์แวร์ไม่ทำงานตามคาดบนเครื่องของเพื่อนร่วมทีม
เบื้องหลังปัญหานี้มีตัวแปรมากมายที่มักมองข้ามไป ตั้งแต่ระบบปฏิบัติการที่ต่างกัน เบราว์เซอร์หลายค่าย ไปจนถึงสถาปัตยกรรมของซีพียูที่แตกต่างกันอย่างสิ้นเชิง
ตัวอย่างเช่นการออกแบบหน้าเว็บให้สวยงามบนจอภาพขนาด 27 นิ้วหรือ 32 นิ้ว แต่กลับแสดงผลผิดเพี้ยนเมื่อเปิดบนหน้าจอแล็ปท็อปขนาดเล็ก หรือกรณีที่ผู้ใช้งานแบ่งหน้าจอเพื่อเปิดเว็บไซต์หลายหน้าพร้อมกัน ทำให้แถบด้านข้างสุดเท่ที่พัฒนาขึ้นมาพังไม่เป็นท่า

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ฝั่งของแบ็กเอนด์บริการก็มีความท้าทายไม่แพ้กัน ในปัจจุบัน Apple ทำผลงานได้ยอดเยี่ยมในการพัฒนาฮาร์ดแวร์แล็ปท็อปด้วยชิปตระกูล M ที่มีประสิทธิภาพสูงมาก
อย่างไรก็ตาม โค้ดที่คุณพัฒนาไม่ได้รันอยู่บนชิปตระกูล M ในระบบคลาวด์ แต่ส่วนใหญ่จะรันอยู่บนเซิร์ฟเวอร์ที่ใช้สถาปัตยกรรม x86-64 ซึ่งโดยทั่วไปมักไม่มีประสิทธิภาพสูงเท่ากับแล็ปท็อปราคาแพงที่บริษัทซื้อให้พนักงาน เว้นแต่คุณจะยอมจ่ายเงินเพิ่มให้กับผู้ให้บริการคลาวด์
"turned on telemetry, did another login, and sure enough, it was 10x slower in the test environment as compared to my laptop"
Dev.to User
ประสบการณ์จริงเรื่องนี้เกิดขึ้นเมื่อครั้งที่ผู้พัฒนาได้ตรวจสอบชุดโค้ดสำหรับการแฮชรหัสผ่านผู้ใช้ และพบว่ามีการใช้อัลกอริทึมที่ตกรุ่นไปแล้ว จึงทำการค้นคว้าและอัปเดตอัลกอริทึมใหม่พร้อมทดสอบบนแล็ปท็อปส่วนตัวจนทุกอย่างดูเรียบร้อยดี
ปัญหาสภาพแวดล้อมการพัฒนาที่ไม่ตรงกับระบบจริง (Dev-Production Parity) เป็นหนึ่งในอุปสรรคคลาสสิกของการพัฒนาซอฟต์แวร์ การใช้คอนเทนเนอร์เช่น Docker ช่วยลดช่องว่างนี้ได้ระดับหนึ่ง แต่ความต่างของฮาร์ดแวร์ระดับล่างสุดอย่างซีพียูและอายุของเซิร์ฟเวอร์ยังคงเป็นปัจจัยควบคุมยาก
เมื่อนำโค้ดขึ้นสู่ระบบทดสอบบนคลาวด์ ปรากฏว่าการเข้ารหัสรหัสผ่านช้ากว่าบนแล็ปท็อปถึง 10 เท่า เมื่อตรวจสอบอย่างละเอียดจึงพบว่าสภาพแวดล้อมทดสอบใช้เซิร์ฟเวอร์ที่มีอายุมากกว่าหนึ่งทศวรรษด้วยเหตุผลด้านต้นทุน
ท้ายที่สุดแล้ว แม้ว่าโค้ดจะรันได้สมบูรณ์แบบบนเครื่องของคุณ แต่เครื่องของคุณไม่ใช่สถานที่ที่โค้ดชุดนั้นจะต้องทำงานไปอีกหลายปีข้างหน้า
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น