Tags:
Node Thumbnail

ทีมงาน 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 จะส่งเฉพาะข้อความใหม่ไปยังแอพบนมือถือ

No Description

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

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

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

ที่มา - Facebook Engineering Blog

Get latest news from Blognone

Comments

By: tanapon000 on 14 October 2014 - 19:52 #753467
tanapon000's picture

อยากคุยแชทพร้อมกับเล่นเฟสบุคด้วย ทำได้ไหม

By: parnunu
iPhoneAndroidWindows
on 14 October 2014 - 19:57 #753469 Reply to:753467

Chat Head ?

By: pasathaioum5
AndroidSymbianWindows
on 14 October 2014 - 20:04 #753471 Reply to:753469

iOS user?

By: tangmo01
In Love
on 14 October 2014 - 22:25 #753509 Reply to:753467

Me too.

By: lancaster
Contributor
on 14 October 2014 - 20:52 #753487

หรือนี่คือสาเหตุที่ล่มบ่อยๆเมื่อช่วง 1-2 เดือนก่อน

By: chatcpe
iPhoneWindows PhoneAndroidBlackberry
on 14 October 2014 - 21:54 #753496
chatcpe's picture

เจอบัคด้วยแหล่ะ ว่าจะแจ้งดีไหม

By: Fzo
ContributorAndroid
on 14 October 2014 - 22:42 #753514
Fzo's picture

ช่วงนี้ทำไมโทรด้วยเสียงไม่ได้เลยครับ ?


WE ARE THE 99%

By: tomyum
ContributorAndroidWindows
on 14 October 2014 - 23:39 #753536
tomyum's picture

ยอมรับว่าแอพใหม่เขียนมาได้ดีมาก ให้ประสบการณ์ที่ดี และลื่นหัวแตก

By: Bluetus
iPhone
on 14 October 2014 - 23:39 #753537
Bluetus's picture

รำคาญที่ต้อง Switch แอพง่ะ... กลับมาเป็นแบบเดิมได้ไหม

T____T

By: Zentana
iPhoneWindowsIn Love
on 14 October 2014 - 23:44 #753539 Reply to:753537

+1 เหมือนกันเลย ต้องสลับไปสลับมา

By: rukia
iPhone
on 15 October 2014 - 12:15 #753720
rukia's picture

Switch ไปมานี่พอจะทำใจกดได้
แต่ทำไมกด noti แล้ว app msg ขึ้นมาไม่มีปุ่มกดกลับไป app fb เพลียเลย..