บันทึกการอ่านบทความเรื่อง How Discord Reduced Websocket Traffic by 40%
โดยทำการอธิบายแนวทางการลด traffic ของ websocket ลง
ซึ่ง websocket นั้นเป็นการติดต่อสื่อสารแบบ realtime ของระบบงานนั่นเอง
มาดูกันว่ามีอะไรที่้น่าสนใจบ้าง ?

เริ่มด้วยปัญหาที่เกิดขึ้นก่อน

หลัก ๆ คือ bandwidth ในระบบ websocket ใช้งานนั้น เยอะมาก ๆ
ส่งผลให้การเชื่อมต่อระบบกับ mobile app นั้นช้ามาก ๆ
สรุปต้นเหตุของปัญหานี้มาได้ดังนี้

  • ข้อมูลที่ส่งไปมา เป็น plain text ในรูปแบบ JSON และมีข้อมูลที่ไม่ได้ใช้จำนวนมาก
  • ในการส่งข้อมูลพบว่ามีการส่งข้อมูลซ้ำซ้อนกันเยอะมาก ๆ
  • เรื่อง network ของ mobile device ที่มีข้อจำกัด

จากปัญหาเหล่านี้ จึงเริ่มการแก้ไข เพื่อปรับปรุงระบบให้ดีขึ้น

วิธีการแก้ไขมีดังนี้

เปลี่ยนจาก plain text มาเป็น binary format ซึ่งใช้ MessagePack

จะเห็นได้ว่าลดขนาดของข้อมูลที่ส่งไปมาได้ประมาณ 35%
ในการแก้ไขจะเขียนตัว encode ข้อมูลก่อนส่งและรับจาก websocket
แถมส่งผลต่อ latency เพียงเล็กน้อยเท่านั้น

แต่ยังไม่พอเพียงเท่านี้ ยังทำการบีบอัดข้อมูลให้เล็กลงไปอีก
แต่ผลที่ตามมาคือ การใช้งาน CPU สูงขึ้น
แต่เมื่อเทียบกับขนาดของข้อมูล และ performance ที่ดีขึ้น
ก็ถือว่ายอมรับได้

ต่อมาก็มาดูที่ข้อมูลที่ส่งไปมา ว่ามีข้อมูลอะไรที่ไม่จำเป็นต่อการใช้งาน
ก็ทำการลบทิ้งไป
รวมทั้งการส่งข้อมูลเดิมซ้ำ ๆ แล้วมีการจัดเก็บในฝั่ง client อยู่แล้ว
ก็จะไม่ส่งซ้ำอีก
เช่นในครั้งแรกของการดังข้อมูลและสถานะของผู้ใช้งานว่าเป็นอย่างไร
เช่น offline เป็นต้น
แต่เมื่อเปลี่ยนสถานะเป็น online ก็ไม่ต้องส่งข้อมูลผู้ใช้งานมาก็ได้
ส่งมาเพียง id ก็เพียงพอแล้ว
นั่นคือ การส่งข้อมูลของ state ที่เปลี่ยนไปเท่านั้น
ช่วยให้ลดขนาดของข้อมูลลงไปได้อีกเยอะแล้ว

แต่การแก้ไขด้วยวิธีการต่าง ๆ เหล่านี้ ก็ทำให้เกิดปัญหาตามมาเช่นกัน

เช่น

  • ความซับซ้อนที่สูงขึ้น
  • ความเข้ากันได้กับ client ใน version เดิม ซึ่งตรงนี้ก็ต้องค่อย ๆ migrate และ update กันไปด้วย
  • การ debug binary data จะยากและซับซ้อนมากยิ่งขึ้น ซึ่งต้องสร้างเครื่องมือมา debug กัน แต่ในการพัฒนาจะให้งานข้อมูล JSON format เพื่อให้เข้าใจได้ง่ายขึ้น ดังนั้นระบบงานจึงต้องมีเรื่องของการ config ให้เปลี่ยนไปมาได้ เป็นอีกเรื่องที่น่าสนใจ

เป็นอีกเรื่องการแก้ไขปัญหาที่น่าสนใจ
ลองศึกษาเพิ่มเติมกันดู

สรุปแล้วเรื่องของ real time application นั้น จะต้องสนใจในเรื่อง

  • รูปแบบของข้อมูลที่ส่งไปมา
  • ข้อมูลที่ส่งไปมาเหมาะสมหรือไม่
  • เรื่องของการบีบอัดข้อมูลก็ต้องพิจารณา เพราะว่ามีทั้งข้อดีและข้อเสีย
  • เรื่องของ compatability สำคัญมาก ๆ ต้องวางแผนให้ดี
  • ระบบที่ดีต้องมีระบบ monitoring ที่ดี หรือ การทดสอบที่ดี เพื่อให้เรา detect ปัญหา หรือ จุดคอขวดได้อย่างรวดเร็ว เพื่อแก้ไขปัญหาต่อไป