ทีมงาน 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
Facebook Messenger, Facebook, High Performance Computing




อ่านต่อ...