ลดเวลาตอบสนองของ REST API ด้วย Oj

เอาง่ายๆ เลยว่า ถ้าใครกำลังมองหาวิธีการลดเวลาตอบสนอง (Response Time) เมื่อมีการเรียกใช้ REST API บน Rails ลองมาใช้ gem ที่ชื่อว่า oj ในการสร้างหรือแปลง JSON แล้วกัน

วิธีติดตั้ง


ย้อนกลับไปที่โปรเจ็คระบบสารสนเทศเพื่อส่งต่อผู้ป่วย สำหรับหน่วยบริการในระบบหลักประกันสุขภาพถ้วนหน้า เขตพื้นที่กทม. (EHHC) เราได้พัฒนาเป็น REST API ไว้ให้แอพพลิเคชันหน้าบ้านเรียกใช้งาน ในตัวโปรเจ็คจะใช้ gem json ซึ่งเป็น stdlib ที่มากับ Ruby ในการจัดการ JSON ไม่ว่าจะสร้างหรือแปลงข้อมูลให้อยู่ในรูป JSON และดูเหมือนว่าเวลาตอบสนองที่ได้ออกมาค่อนข้างจะช้าไปหน่อย ประกอบกับเราต้องเตรียม REST API ไว้ให้ 3rd party ที่จะเข้ามาเรียกใช้เพิ่มอีก ด้วยโหลดที่จะเพิ่มขึ้นเราคงต้องหาวิธีเพิ่มประสิทธิภาพการทำงานของ server การเปลี่ยนตัวจัดการ JSON จึงเป็นจุดแรกที่น่าจะช่วยลดเวลาตอบสนองได้ดีที่สุด

แต่จากที่ได้อ่านหลายบทความ เช่น 1, 2 ก็พบว่า oj น่าจะเป็นตัวเลือกที่ดีสำหรับเรา ดังนั้นเราจึงได้สร้าง API อย่างง่ายขึ้นมาทดสอบโดยให้มีการดึงข้อมูลคนจำนวน 1000 คน ซึ่งแต่ละคนจะมีข้อมูลชื่อ นามสกุล และเลขประชาชนจำลอง

Migration

Create dummy data

จากนั้นเราวัดประสิทธิภาพของ server ด้วย Apache Benchmark (AB) ซึ่งเราแบ่งการทดสอบเป็น 2 ชุด โดยแต่ละชุดเรากำหนดค่าคงที่ในของจำนวน request การดึงข้อมูลเท่ากับ 100 requests แต่มี concurrent ที่แตกต่างกันคือ 10 และ 5

Concurrent เท่ากับ 10

Using oj N=100, C=10

Using json N=100, C=10

Concurrent เท่ากับ 5

Using oj N=100, C=5

Using json N=100, C=5

เครื่องที่ใช้สำหรับทำเป็น Server คือ Macbook Pro (2019), CPU 2.6 GHz 6-Core Intel Core i7, RAM 32GB โดยผลลัพท์ที่ได้จะให้ผลแตกต่างกันขึ้นอยู่กับสเปคของ Server แต่จากผลลัพท์ที่ได้ก็พอจะสรุปได้ว่าการใช้งาน oj แทน json นั้นให้ผลที่ดีกว่าทั้งเรื่องของ RPM, เวลา และภาพรวมทั้งหมด

References