ผ่า เทคโนโลยี ที่ทำให้ facebook, twitter ให้บริการได้ร้อยล้านคนแบบ Real time ได้

Posted on พฤศจิกายน 5, 2009

2


ประมาณเดือนที่แล้ว หลายท่านคงเจอปัญหากับ Twitter หรือ Facebook ช้า หรือ บางทีไม่ยอมทำงานเอาซะดื้อๆเลย แถมเพื่อนๆ ก็บ่นๆ ว่า ห่วย ทำออกมาได้งัย น่าจะทดสอบให้หนักๆ กว่านี้   …. แหม ปัจจุบัน Facebook ต้องจัดการข้อมูลวันละ 28 Terabyte ช้านิดหน่อยคงไม่เป็นไรครับ (ประมาณกันโดย Web 2.0 Forum ~ 20 billion message i.e. text picture video ต่อเดือน)…. ผมเข้าใจคนบ่น และ ยิ่งสงสารคนทำมากกว่าครับ เพราะเรื่องสร้างโปรแกรมและ infrastructure ให้รองรับ ขอ้มูลและคนใช้ขนาดนี้ ในตำราไม่มีสอนนะครับ

 

เพื่อนๆ เคยนึกหรือไม่ครับว่า twitter และ facebook มีเครื่อง server กี่เครื่องครับ ?

 

>> ถ้าไม่ได้ติดตามก็คงตอบผิดครับ ผมเคยถามเพื่อน บางคนตอบว่า 50 บางคนบอกว่า 1000 เครื่อง ผิดหมดครับ

สำหรับ Facebook ใช้ Server ทั้งหมด (ถึงตุลาคมนี้) 30,000 เครื่องครับ

Ref: http://www.datacenterknowledge.com/archives/2009/10/13/facebook-now-has-30000-servers

ส่วน twitter  ผมค้นหาแล้วไม่มีข้อมูลบอกนะครับ แต่คิดว่าคง ราวๆ หลายพันเครื่อง

 

ผมเขียนเรื่องนี้เพราะอยากให้เพื่อนๆ ได้รู้ว่าก่อนที่จะมาเป็น twitter, Facebook ที่คนเป็นหลายๆ ร้อยล้าน ใช้กันมันยากแค่ไหน และต้องอาศัยเทคโนโลยีกันสุดโต่งทีเดียว อาจอ่านยากหน่อยเพราะต้องใช้ Technical บ้างครับ แต่ก่อนเข้าสู่ปัญหาคลาสสิคของระบบเว็บและฐานข้อมูล ผมอยากให้เพื่อนๆ ได้เรียนรู้สองเรื่อง ที่เป็นปัญหาของระบบใหญ่ๆ คือ

1. Data Access – ปกติข้อมูลจะอยู่บนฐานข้อมูลที่ถูกเก็บบนดิสก์ นี่คือ traditional ของระบบคอมพิวเตอร์ เมื่อมีการเรียกใช้งานข้อมูล server จะทำการย้ายข้อมูลจากดิสก์ มาไว้ที่ Memory  โดยทั่วไปแล้วการอ่านแบบนี้ จะค่อนข้างช้า (ตอนบูทวินโดว์ นานไหมครับ)

2. Networking latency – ปกติการใช้บริการต่างๆบน server มันจะมีโอเวอร์เฮดของการให้บริการเช่น การเชื่อมต่อ การตรวจสอบข้อมูลว่าส่งสำเร็จหรือไม่ (เวลาต่อเน็ตมีหน่วงๆ ตอนแรกไหมครับ)

เอาล่ะแค่สองเรื่องนี้ ทำให้ Facebook กับ Twitter เครียดกันเป็นแรมเดือนทีเดียว ทำไมหรือครับ ปัญหา สองอย่างข้างต้นจะไม่เกิดขึ้นจนกว่า ปริมาณของข้อมูลและโหลดจะมีขนาดจำนวนหนึ่ง (เยอะๆแหละ) ลองนึกภาพว่า มีเครื่อง server ให้บริการข้อมูลสัก สี่ ห้าคน ก็ยังพอไหว อาจช้าๆ ลงไปหน่อย แต่นึกภาพดูครับ ถ้าเพิ่มเป็น 100 คนล่ะครับ คงต้องมีอีก 80 คนบ่น และเลิกใช้ไปเลย เพราะเครื่อง server ให้บริการไม่ได้ แต่ Facebook และ twitter ให้บริการคนเป็นระดับหลายสิบล้านคนพร้อมๆ กัน (facebook มีคนใช้ สามร้อยล้านคน)

 

เทคโนโนโลยีพื้นๆ ไม่สามารถรองรับได้แน่นอน (twitter เคยผิดพลาดมาก่อนแล้ว เพราะ Design Architecture ตอนแรกแบบไม่ได้รองรับจำนวนคนใช้และปริมาณข้อมูลระดับ เทราไบท์ต่อวัน ปีที่แล้วต้องรื้อกันใหม่ยกใหญ่) Key technology คือ  Distributed Environment (เกือบๆ Clould Computing) ผมขอยกตัวอย่าง Facebook นะครับ เพราะ Facebook มีเอกสาร และเปิดเผยระบบมากกว่า twitter เพื่อความชัวร์ ผมขอผ่า Facebook ก่อนเลย

1. Facebook ใช้ การกระจายข้อมูลไปไว้ยังหลายๆ servers โดยการใช้ เทคโนโลยี Cassandra ที่รับประกัน 0% failure และยังมีการทำ Replication ข้อมูลเพื่อเป็นการ Guarantee 0% data lost

2. ลดเวลาใน Data Access ให้น้อยที่สุด โดยการใช้ เทคโนโลยี Memcached ที่สร้างความเร็วเพิ่มกว่า 30-40% โดยการเอาข้อมูลจำเป็นต่างๆ โหลดไว้ที่ Memory เลย เรียกว่า Cache

ส่วนทาง twitter โหลดข้อมูลลง Memory เกือบหมดเลย และใช้ Memcached เช่นเดียวกัน

3. ปรับการ communicate ระหว่าง server จากระบบ TCP มาเป็น UDP ช่วยลด overhead (ไม่นึกไม่ฝันว่า UDP มีประโยชน์แบบนี้ด้วย)

4. ลดจำนวนการอ่านไฟล์ภาพ โดยการเป็น batch เช่น เวลาเราโหลดภาพเยอะๆ เมื่อเวลาเราดูภาพ ถ้าไม่มีระบบนี้ server จะอ่านทีละไฟล์ ทำให้สิ้นเปลือง Data Access จึงเก็บไฟล์ภาพหลายๆไฟล์เป็นไฟล์เดียว แล้วเวลาอ่าน ก็อ่านมาทั้งก้อน ไว้ที่ Memory และอยู่ใน cache เลย

5. Web Service ที่แทบไม่มีการดีเลย์ของการให้บริการ (แทบจะ Real time)  โดยใช้ Tornado

 

ที่เล่าๆ มา ทาง Facebook ได้นำ Opensource ที่มีอยู่แล้ว มาปรับปรุง เป็นตัวใหม่ๆ จึงมึ Open source ดีๆ อีกมากมายให้ใช้กัน

 

จริงๆ Facebook ต้องการสร้าง Application ให้ใช้กันอีกมากมายบน Facebook Platform ตัวอย่างเช่น Office ที่ใช้ความสามารถของ Social Network ช่วยกันสร้าง (คล้ายๆ Google Doc) แต่กลัวว่าระบบจะตามไม่ทัน หรือเกมส์ที่ใหญ่ๆ หนักๆ

 

สรุปแล้ว Social Network ช่วยสร้างเทคโนโลยี ที่จัดการกับฐานข้อมูลเรียลไทม์ขนาดใหญ่ และจำนวนคนใช้ขนาดมหาศาล … ถ้าจะเป็นเจ้า Social Network ระดับผู้ใช้ 1000 ล้าน ท่าทางต้องมีอีกเป็นแสนๆ เครื่อง … แต่ไม่ง่ายครับ ตอนนี้ memcached ก็มี limit แต่ผมไม่ทราบว่า limit มันคือเท่าไร่ ใครต้องการรายละเอียดยิบๆ เชิญอ่านตามลิงค์ ข้างล่างไปเรื่อยๆ (ใครทำวิจัย ด้านนี้ ก็คงศึกษาไว้นะครับ อีกหน่อยอาจเอาไปทำ Real time data Mining บน Social Network นะครับ – ใช้ twitter timeline API ดึงมาไว้ใน memcached)

 

 

Facebook OPEN source detail:

http://www.facebook.com/note.php?note_id=39391378919&id=9445547199&index=0

Reference information & Blog from implementors:

http://highscalability.com/strategy-facebook-tweaks-handle-6-time-many-memcached-requests

http://blog.twitter.com/2008/05/its-not-rocket-science-but-its-our-work.html

http://highscalability.com/strategy-facebook-tweaks-handle-6-time-many-memcached-requests

http://www.infoq.com/news/2009/06/Twitter-Architecture

ติดป้ายกำกับ: , , , ,