บันทึกการอ่านบทความเรื่อง 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 ปัญหา หรือ จุดคอขวดได้อย่างรวดเร็ว เพื่อแก้ไขปัญหาต่อไป