12 เม.ย. 2023 เวลา 00:30 • ความคิดเห็น

ความสำคัญของ Performance Engineering

หากจะมีหนึ่งสิ่งที่เป็นทักษะติดตัวที่ผมมีไม่ค่อยเหมือนชาวบ้าน ก็คงจะเป็นทักษะในการทำให้ระบบทำงานได้ดีขึ้น เร็วขึ้น หรือที่ปัจจุบันคนเรียกทักษะในสาขานี้ว่า Performance Engineering
ทักษะนี้เริ่มต้นมาจากค่ายคอมพิวเตอร์โอลิมปิก ที่นักเรียนที่ไปเข้าค่ายต้องหาวิธีการเขียนโปรแกรมให้แก้ไขปัญหาได้เร็วที่สุด โดยอาศัยความรู้ความเข้าใจไม่ว่าเป็นเรื่องของคณิตศาสตร์, Data Structure หรือ Algorithm ให้โปรแกรมทำงานให้เร็วที่สุด ซึ่งเริ่มมาตั้งแต่การแก้ไขปัญหาง่าย ๆ ยอดฮิตในเวลานั้น เช่น N-queen, Magic Square, Rubik, Tower of Hanoi
2
ในวันนั้น เครื่องคอมพิวเตอร์ช้ากว่าในสมัยนี้มาก คอมพิวเตอร์ที่ใช้กัน เริ่มเดิมทีเป็นเครื่องที่ใช้ CPU Intel 80386 ซึ่งคอมพิวเตอร์ในปัจจุบันเร็วกว่านับเป็นหมื่นเท่า โปรแกรมที่เขียนขึ้นในวันนั้นจึงต้องพยายามใช้วิธีต่าง ๆ นานาในการทำให้มันเร็วที่สุด
ผมจึงได้มีทักษะนี้ติดตัวมาตั้งแต่เวลานั้น และเมื่อมีโอกาสก็จะนำทักษะเหล่านี้มาทำให้เกิดประโยชน์กับงานที่ทำอยู่ตลอดเวลา และเป็นหนึ่งในทักษะที่ผมต้องยอมรับว่าสอนคนอื่นให้มีทักษะแบบนี้เป็นเรื่องที่ทำได้ยาก
แต่วันนี้จะมาเล่าให้ฟังว่า ทำไม ประสิทธิภาพมันถึงสำคัญ?
ลองดูตัวอย่างของมุกตลกที่ผมเคยได้ยินมา
เรื่องมีอยู่ว่า ชายคนหนึ่งเป็นช่างทาสีที่ทาสีได้เร็วมาก และถูกมอบหมายให้ทาสีกำแพงที่ยาวเฟื้อย วันแรกเขาสามารถทาสีกำแพงได้ 100 เมตร วันสองเขาทากำแพงได้ 50 เมตร วันที่สามได้ 33 เมตร วันที่ 4 เขาทาได้ 25 เมตร (ตัวเลขสมมติ จำรายละเอียดไม่ได้)
หัวหน้าเขาสงสัยจึงถามเขาว่า ทำไมวันแรกก็เห็นทำงานได้เร็วดี จึงตัดสินใจจ้างเขา แต่ทำไมวันหลัง ๆ เขาถึงทาสีช้าลงเรื่อย ๆ ล่ะ จนตอนนี้ช้ากว่าคนอื่นเสียอีก
เขาจึงตอบหัวหน้าว่า ที่เขาทาช้า เพราะเขาต้องเดินกลับมาจุ่มแปรงทาสีในถังสีที่จุดเริ่มต้นตลอดเลยน่ะสิ (ไม่รู็เก็ตมุกมั้ย)
หากช่างทาสีฉลาดกว่านี้สักนิด เขาคงรู้จักที่จะยกถังสีไปพร้อมกับเขา เวลาที่เขาทาสี และจะทำให้เขาไม่ต้องเดินกลับไปกลับมาให้เสียเวลา
การเขียนโปรแกรมก็เช่นกัน การเขียนโปรแกรมที่ฉลาด กับไม่ฉลาดให้ผลแตกต่างกันมาก อย่างในเรื่องของ Time Complexity Algorithm ที่มีความซับซ้อนของเวลาที่แย่ที่สุด (Time Complexity) ที่แย่มาก ๆ อย่าง O(2^N)
ซึ่งเวลาที่ใช้แปรผัน 2^N เมื่อ N เพิ่มขึ้นมากไปเรื่อย ๆ เวลาที่จะใช้ก็จะแย่ลงอย่างรวดเร็ว ในขณะที่ Algorithm ที่มีความซับซ้อนของเวลาที่แย่ที่สุดเป็น O(1) จะใช้เวลาที่คงที่ ไม่ว่า N จะเปลี่ยนไปมากเช่นไร
นี่จึงเป็นปัจจัยที่กำหนดประสิทธิภาพของระบบมากกว่าเครื่องที่เราใช้ว่ามันจะเร็วจะแรงมากเพียงใด เพราะเครื่องที่เร็วอย่างมาก ก็เร็วกว่าเพียงไม่กี่เท่าเท่านั้น แต่ Algorithm ที่แย่กว่า สามารถช้ากว่าได้หลายล้านเท่าอย่างง่ายดาย
งานของผมจึงเป็นงานที่หาวิธีที่ดีที่สุดในการประมวลผลข้อมูล ที่สามารถนำไปสู่การพัฒนาประสิทธิภาพที่ดีขึ้นแบบคาดไม่ถึง บางครั้งอาจจะเร็วเพิ่มขึ้นเพียงไม่กี่เท่าตัว แต่บางครั้งก็สามารถเร็วกว่าเป็นร้อย ๆ พัน ๆ เท่าก็ได้
และงานที่ท้าทายที่สุด คือ งานที่ต้องส่งมอบประสิทธิภาพกันที่หน้างาน หลาย ๆ ครั้งที่ระบบพบกับปัญหาเรื่องชองประสิทธิภาพจนทำให้ระบบล่มแล้วล่มอีก เราต้องหาให้เจอวันนั้นเวลานั้น ว่าปัญหาอยู่ที่ใด และพยายามทำให้ระบบกลับมาทำงานได้เร็วที่สุด
คำพูดหนึ่งที่ idol ของผม Martin Thompson อดีต CTO ของ LMAX ชอบใช้คือคำว่า Mechanical Sympathy คือ ความเห็นอกเห็นใจกับเครื่องจักร ที่เข้าใจว่า คอมพิวเตอร์ทำงานได้อย่างไร และรู้วิธีที่จะทำให้มันทำงานได้ดีที่สุด และพอเราเข้าใจมัน เราก็จะสามารถหาจุดที่สามารถแก้ไขให้ระบบกลับมาทำงานได้เร็วที่สุด
ความท้าทายเวลาที่เจอปัญหาที่ระบบ Production ก็คือ ทุกสิ่งทุกอย่างที่มีปัญหา มันดูเหมือนจะ "สาย" เกินไปที่จะแก้ แต่เราก็ต้องหามุมหาจุดที่พอ "ปะผุ" ให้ระบบทำงานต่อไปได้ก่อน ซึ่งกลายเป็นทั้งศาสตร์ และศิลป์ในการแก้ไขปัญหานั้น ๆ
ใครที่กำลังหา "จุดแข็ง" ของตัวเองอยู่ในวงการเทคโนโลยี ทักษะนี้ก็เป็นทักษะหนึ่งที่พึงมีครับ
โฆษณา