Facebook เผยรายละเอียดการปรับปรุงระบบเบื้องหลัง Messenger ให้ประสิทธิภาพดีกว่าเดิม

by mk
14 October 2014 - 11:38

ทีมงาน Facebook ออกมาให้รายละเอียดเชิงเทคนิคของการปรับปรุงโครงสร้างพื้นฐาน เพื่อให้ Facebook Messenger ทำงานได้รวดเร็วและมีประสิทธิภาพกว่าเดิม

Facebook บอกว่าตอนแรกสุดนั้นสร้าง Messenger ขึ้นมาเป็นระบบส่งข้อความแบบเดียวกับอีเมล แต่สุดท้ายมันก็พัฒนาตัวเองกลายมาเป็นระบบส่งข้อความด่วนที่ใช้บนอุปกรณ์พกพา อย่างไรก็ตาม โครงสร้างพื้นฐานทางไอทีกลับไม่ต่างไปจากแพลตฟอร์มดั้งเดิมมากนัก ทำให้เกิดปัญหาคอขวดและใช้ปริมาณข้อมูลมากเกินจำเป็น

ทีมงานวิศวกรของ Facebook จึงต้องปรับปรุงระบบเบื้องหลังของ Facebook Messenger ใหม่ โดยใช้เวลาประมาณหนึ่งปี การปรับปรุง Messenger แบ่งออกเป็น 2 ส่วน ได้แก่

การปรับปรุงฝั่งไคลเอนต์

  • เดิมที แอพ Messenger จะได้รับแจ้งจากเซิร์ฟเวอร์ผ่านระบบ push ว่ามีข้อมูลชิ้นใหม่ส่งเข้ามา จากนั้นแอพจะเข้าไปดึง (pull) ข้อมูลจากเซิร์ฟเวอร์ผ่านโพรโทคอล HTTPS และได้ข้อมูลเป็น JSON ขนาดใหญ่กลับมา แอพจะนำข้อมูลนี้ไปปรับปรุงหน้าจอสนทนาให้ผู้ใช้เห็นข้อความใหม่
  • ระบบใหม่ของ Messenger จะดึงข้อมูลแบบ pull เฉพาะครั้งแรกที่ติดต่อกับเซิร์ฟเวอร์ หลังจากนั้นจะแจ้งบอกรับข้อมูล (subscribe) โดยรับเฉพาะส่วนต่าง (delta) ข้อมูลชิ้นใหม่จะถูกส่งมายังแอพ Messenger ด้วยระบบ push ผ่านโพรโทคอล MQTT ที่ใช้แบนด์วิธน้อยและกินพลังงานต่ำ การสื่อสารแบบใหม่นี้ทำให้แอพไม่ต้องร้องขอข้อมูลผ่าน HTTPS ทุกครั้งแบบเดิม
  • Facebook ยังเปลี่ยนวิธีการเรียงข้อมูลจากเดิมที่ใช้ JSON มาเป็น Apache Thrift ซึ่งลดขนาดของการส่งข้อมูล (payload size) ลงได้ 50%

การปรับปรุงฝั่งเซิร์ฟเวอร์

  • เดิมที ข้อความแชทถูกเก็บลงฮาร์ดดิสก์ทั้งหมด เมื่อผู้ใช้รายหนึ่งเริ่มส่งข้อความ เซิร์ฟเวอร์ของ Facebook จะต้องเขียนข้อความนี้ลงดิสก์ให้เสร็จก่อน แล้วค่อยเรียกไคลเอนต์ของผู้รับข้อความมาอ่านข้อมูลที่อยู่บนดิสก์
  • ปัญหาของการเก็บข้อมูลแบบนี้คือไม่สามารถขยาย (scale) ได้ดีนัก เพราะดิสก์ตัวเดียวกันเก็บทั้งข้อความทั้งหมดที่คุยมา (conversation history) และข้อความล่าสุดที่คุยกัน (real-time data)
  • ระบบการเก็บข้อมูลแบบใหม่จึงเปลี่ยนมาใช้ระบบคิวที่เรียกว่า Iris (ดูภาพประกอบ) โดยจะมีพอยเตอร์ 2 ตัวทำหน้าที่ต่างกัน พอยเตอร์ตัวแรกจะบอกว่าแอพมือถืออ่านข้อความไหนเป็นข้อความล่าสุด ส่วนพอยเตอร์อีกตัวจะบอกว่าข้อความล่าสุดที่อยู่ในดิสก์คือข้อความไหน
  • เมื่อมีคนส่งข้อความมาหาเราขณะที่ออฟไลน์ เซิร์ฟเวอร์ของ Facebook จะรับข้อความนี้ไว้ในคิวแล้วเขียนลงดิสก์ พอยเตอร์ดิสก์จะเปลี่ยนตำแหน่งมายังข้อความล่าสุดที่ได้รับ
  • เมื่อเราออนไลน์ แอพ Messenger จะสื่อสารกับระบบคิวบนเซิร์ฟเวอร์เพื่อดูว่าข้อความล่าสุดในแอพคืออะไร และข้อความล่าสุดบนเซิร์ฟเวอร์คืออะไร จากนั้นระบบคิว Iris จะส่งเฉพาะข้อความใหม่ไปยังแอพบนมือถือ

ระบบคิว Iris ช่วยให้ Facebook สามารถเก็บข้อมูลลงดิสก์เป็น tier แยกตามความใหม่ของข้อความได้

  • ข้อความใหม่ล่าสุดจะถูกเก็บในหน่วยความจำของ Iris โดยตรง
  • ข้อความในสัปดาห์ที่ผ่านมา จะเก็บไว้ในระบบเก็บข้อมูลหลังบ้านของคิว Iris ซึ่งเป็น MySQL ที่รันอยู่บนหน่วยความจำแบบแฟลช
  • ข้อความที่เก่ากว่าหนึ่งสัปดาห์ (ที่มีโอกาสย้อนอ่านน้อยมาก) จะถูกเก็บไว้ในฮาร์ดดิสก์มาตรฐาน และอ่านข้อมูลเมื่อถูกเรียกใช้จากผู้ใช้เท่านั้น

ผลของการแยกเก็บข้อมูลแบบ tier ทำให้การจัดการข้อความจำนวนมหาศาลของ Facebook มีประสิทธิภาพมากกว่าเดิมมาก ผลที่ได้คือระบบใหม่ที่ลดปริมาณการรับส่งข้อมูล (ไม่รวมรูปภาพหรือวิดีโอ) ลง 40% และลดจำนวนผู้ใช้ที่พบปัญหาข้อความส่งไม่ไปลงได้ 20%

ที่มา - Facebook Engineering Blog

Blognone Jobs Premium