สถาปัตยกรรม Facebook [ปิด]


169

ฉันได้อ่านบทความ / ข้อมูลเกี่ยวกับสถาปัตยกรรมที่ Facebook ความท้าทายและวิธีการที่พวกเขาเล่นงาน สิ่งที่พวกเขาใช้และเหตุผลที่พวกเขาใช้ พวกเขาจะปรับขนาดได้อย่างไรและอะไรคือการตัดสินใจออกแบบสำหรับสิ่งที่พวกเขาทำ ฯลฯ การสนับสนุนหลักคือการเรียนรู้ การรู้เกี่ยวกับเว็บไซต์ที่รองรับปริมาณการใช้งานจำนวนมากนั้นมีคำแนะนำมากมายสำหรับสถาปนิกและอื่น ๆ เพื่อระลึกถึงบางสิ่งในขณะที่ออกแบบไซต์ใหม่ ฉันแบ่งปันสิ่งที่ฉันพบ

  1. วิทยาศาสตร์ Facebook & กราฟสังคม (วิดีโอ)
  2. สเกลที่ Facebook
  3. สถาปัตยกรรม Facebook Chat
  4. บล็อก Facebook
  5. สถาปัตยกรรมและการออกแบบ Facebook Cassandra
  6. หมายเหตุวิศวกรรม Facebook
  7. Quora - สถาปัตยกรรม Facebook
  8. Facebook สำหรับผู้ใช้ 600 ล้านคน
  9. Hadoop & การใช้งานที่ Facebook
  10. Erlang ที่ Facebook: แชทสถาปัตยกรรม
  11. การแคชประสิทธิภาพ Facebook
  12. สถาปัตยกรรม Facebook Connect

ฉันมี 2 ลิงก์เพิ่มเติม แต่ไม่สามารถโพสต์ได้เนื่องจากข้อ จำกัด ในเว็บไซต์นี้ นอกจากนี้โปรดแบ่งปันหากใครมีอะไรที่ดีกว่า (ไม่จำเป็นต้องเกี่ยวข้องกับ Facebook เท่านั้น)

ป.ล. -ฉันไม่สามารถหาสถานที่ที่ดีที่จะแบ่งปันการวิจัยนี้ได้ดังนั้นความคิดริเริ่มนี้ หวังว่านี่จะช่วยใครซักคน


2
2. สเกลที่ Facebook (วิดีโอ) - infoq.com/presentations/Scale-at-Facebook 3. การแชทบน Facebook - infoq.com/news/2008/05/facebookchatar Architecture
Srikar Appalaraju

2
นอกจากนี้ยังhighscalability.comดูเหมือนว่าจะเป็นสถานที่ที่ดีในการเรียนรู้เกี่ยวกับสถาปัตยกรรมสำหรับจำนวนมากของเว็บไซต์ยอดนิยม ไม่มีความคิดว่าเรื่องนี้มีความจริงมากน้อยเพียงใดและมีการเก็งกำไรมากนัก แต่มันออกมามีอะไรสักอย่างที่จะแทะเล็ม ...
Srikar Appalaraju

1
บล็อกวิศวกรรม Facebookบางครั้งมีข้อมูลเชิงลึกที่สำคัญเข้ากับสถาปัตยกรรมและปรับความท้าทายของพวกเขา
Colin Pickard

เนื่องจากเทคนิคนี้ไม่ใช่คำถามจริงคุณจึงควรย้ายข้อมูลไปที่แท็ก FBเพื่อเก็บข้อมูลไว้ในกรณีที่คำถามนี้ถูกลบ ขอบคุณ
Gordon

@Gordon วิธีเพิ่มแท็ก FB Wiki? ไม่มีแท็ก 'Facebook' อยู่แล้วใช่ไหม นั่นไม่เพียงพอหรือ
Srikar Appalaraju

คำตอบ:


33

Facebook มีการเปลี่ยนแปลงมากมายหลายอย่างและไม่ได้ออกแบบมาเพื่อให้มีประสิทธิภาพ มันถูกออกแบบมาเพื่อทำงาน ฉันไม่ทราบเลยว่าโค้ดมีลักษณะอย่างไรและคุณอาจไม่พบข้อมูลมากนัก (เพื่อความปลอดภัยและเหตุผลด้านลิขสิทธิ์ที่ชัดเจน) แต่ลองดูที่ API ดูว่ามันเปลี่ยนแปลงบ่อยแค่ไหนและเท่าไหร่มันทำงานไม่ถูกต้องอีกต่อไปหรือเลย

ฉันคิดว่าแขนที่ใหญ่ที่สุดของพวกเขาคือ Hiphop http://developers.facebook.com/blog/post/358 คุณสามารถใช้ HipHop ได้ด้วยตัวเอง: https://github.com/facebook/hiphop-php/wiki

แต่ถ้าคุณถามฉันว่ามันเป็นงานที่ทะเยอทะยานและเสียเวลามาก Hiphop รองรับมากเท่านั้นไม่สามารถแปลงทุกอย่างเป็น C ++ ได้ แล้วนี่บอกอะไรเรา มันบอกเราว่า Facebook ไม่ได้ใช้ประโยชน์จากภาษา PHP อย่างเต็มที่ ไม่ได้ใช้ 5.3 ล่าสุดและฉันยินดีที่จะเดิมพันว่ายังมีอีกมากที่เข้ากันได้กับ PHP 4 มิฉะนั้นพวกเขาไม่สามารถใช้ HipHop ได้ HipHop เป็นไอเดียที่ดีและต้องการเติบโตและขยาย แต่ในสถานะปัจจุบันมันไม่ได้มีประโยชน์สำหรับคนจำนวนมากที่กำลังสร้างแอพ PHP ใหม่

นอกจากนี้ยังมี PHP ไปยัง JAVA ผ่านสิ่งต่าง ๆ เช่น Resin / Quercus อีกครั้งมันไม่รองรับทุกอย่าง ...

อีกสิ่งที่ควรทราบคือถ้าคุณใช้โมดูล PHP ที่ไม่ได้มาตรฐานคุณจะไม่สามารถแปลงรหัสนั้นเป็น C ++ หรือ Java ได้ อย่างไรก็ตาม ... มาดูโมดูล PHP กันดีกว่า พวกเขาจะรวบรวมใน C ++ ดังนั้นถ้าคุณสามารถสร้างโมดูล PHP ที่ทำสิ่งต่าง ๆ (เช่นการแยกวิเคราะห์ XML เป็นต้น) คุณก็จะต้องทำงานด้วยความเร็วเท่าเดิม แน่นอนว่าคุณไม่สามารถสร้างโมดูล PHP สำหรับทุกความต้องการที่เป็นไปได้และแอปทั้งหมดของคุณเพราะคุณจะต้องคอมไพล์ใหม่และมันจะยากกว่าในการเขียนโค้ด ฯลฯ

อย่างไรก็ตาม ... มีบางโมดูล PHP ที่มีประโยชน์ที่สามารถช่วยแก้ปัญหาเรื่องความเร็วได้ แม้ว่าในตอนท้ายของวันเรามีสิ่งที่น่ากลัวนี้เรียกว่า "คลาวด์" และด้วยเราสามารถปรับขนาดแอปพลิเคชันของเรา (รวม PHP) ดังนั้นมันจึงไม่สำคัญอีกต่อไป ฮาร์ดแวร์กำลังถูกลงและถูกลง Amazon เพิ่งลดราคาลง (อีกครั้ง) พูดถึง

ตราบใดที่คุณเขียนรหัสแอป PHP ของคุณด้วยแนวคิดที่ว่ามันจะต้องมีขนาดหนึ่งวัน ... จากนั้นฉันคิดว่าคุณสบายดีและฉันก็ไม่แน่ใจจริงๆว่าฉันจะดู Facebook และสิ่งที่พวกเขาทำเพราะเมื่อ พวกเขาทำมันมันเป็นโลกที่แตกต่างอย่างสิ้นเชิงและตอนนี้พยายามที่จะยึดโครงสร้างพื้นฐานนั้นและรักษามันไว้ ... เอาละคุณได้สิ่งต่าง ๆ อย่างฮิปฮอป

ตอนนี้ฮิปฮอปจะช่วยคุณได้อย่างไร มันจะไม่ มันไม่สามารถ คุณเริ่มใหม่คุณสามารถใช้ PHP 5.3 ฉันขอแนะนำให้ดูในกรอบงาน PHP 5.3 และประโยชน์ใหม่ทั้งหมดที่ PHP 5.3 นำมาไว้ในตารางพร้อมกับไลบรารี SPL และคิดถึงฐานข้อมูลของคุณด้วย คุณมักจะแสดงเนื้อหาจากฐานข้อมูลดังนั้นให้ตรวจสอบ MongoDB และฐานข้อมูลประเภทอื่น ๆ ที่มีโครงสร้างน้อยกว่าและใช้เอกสารเป็นหลัก พวกมันเร็วกว่าและดีกว่าสำหรับเว็บไซต์ / แอพประเภทสามัญที่สุด

ดู บริษัท ใหม่ ๆ เช่น Foursquare และ Smugmug และ บริษัท อื่น ๆ ที่ใช้เทคโนโลยีใหม่และพวกเขาใช้งานอย่างไร เพื่อที่จะประสบความสำเร็จอย่าง Facebook ฉันจะไม่มองพวกเขาอย่างจริงจังว่า "วิธี" ในการสร้างเว็บไซต์ / แอพที่มีประสิทธิภาพ ฉันไม่ได้บอกว่าพวกเขาไม่มีคนเก่ง (มาก) ที่ทำงานที่นั่นซึ่งกำลังแก้ปัญหาอย่างสร้างสรรค์ ... ฉันยังไม่ได้บอกว่า Facebook ไม่ใช่ความคิดที่ดีโดยทั่วไปและไม่ใช่ ประสบความสำเร็จและคุณไม่ควรได้รับแนวคิดจากมัน .... ฉันแค่บอกว่าถ้าคุณสามารถดูซอร์สโค้ดทั้งหมดของพวกเขาคุณอาจจะไม่ได้รับประโยชน์จากมัน


1
เห็นด้วยกับสิ่งที่คุณพูด ลิงก์เหล่านั้นเป็นเพียงเพื่อความอยากรู้อยากเห็น บางครั้งคุณมองไปที่ชิ้นส่วนของเทคโนโลยีและพูดว่า "เฮ้! เยี่ยมเลย" ...
Srikar Appalaraju

สุ่มทบทวนคำตอบของฉันที่นี่สองสิ่ง # 1 ฉันเชื่อว่า C และไม่ใช่ C ++ ทางเทคนิคของฉันไม่ดี ... แต่ที่สำคัญกว่า # 2 Phalcon เป็นเฟรมเวิร์ก PHP รุ่นใหม่ที่สามารถแปลง PHP ส่วนขยายให้เร็วขึ้นได้ แม้ว่าโค้ดส่วนใหญ่ของคุณจะไม่ทำงานใน C แน่นอนและไลบรารี่อื่น ๆ ที่คุณใช้น่าจะไม่เหมือนกัน อย่างไรก็ตามมันเป็นความคิดที่ฉลาดเหมือนฮิปฮอปที่จะบีบประสิทธิภาพพิเศษบางอย่างออกมา
Tom

... และที่นี่เราไปอีกครั้งพร้อมเอซตัวนั้น มองย้อนกลับไปหลายปีต่อมาเรามีภาษาแฮ็คนี้ (เกิดจากสิ่งที่ฮิปฮอปที่มี IDE ของตัวเองไม่น้อยกว่า) มันโตขึ้นเพื่อเป็นสิ่งที่ดีกว่าไหม? เราจะเห็น ช่วยได้ไหม อาจ แต่ตอนนี้ดูเหมือนว่าคุณก็จะสามารถสร้างเช่นเดียวกับ Facebook ใช้เวลาเพียงประมาณ 4 ปี =) แม้ว่าโดยส่วนตัวแล้วฉันจะไม่ดื่มเครื่องดื่มแบบคูล
ทอม

1
เมื่อมองไปที่คำตอบในตอนนี้ฉันรู้สึกทึ่งกับสิ่งที่เกิดขึ้นในโลกของเทคโนโลยี HipHop ไม่เพียง แต่รองรับ PHP เวอร์ชันล่าสุดเท่านั้น Facebook ยังพัฒนา HHVM ที่เร็วยิ่งขึ้นอีกด้วย
Gopi Krishna

ใช่ฉันได้รับการแจ้งเตือนบางครั้งที่นำฉันกลับมาที่เรื่องนี้ มันยอดเยี่ยมมากที่เห็นว่าสิ่งต่าง ๆ เปลี่ยนแปลงไปอย่างไรและวิวัฒนาการของ HipHop เป็น HHVM ได้อย่างไร (และน่าจะเป็นไปได้ที่ Facebook กำลังสร้างสรรค์ตัวเองใหม่ภายใต้หน้าปก - ดูความก้าวหน้าของ JS ที่น่าทึ่งทั้งหมดที่พวกเขาทำ) มันสมเหตุสมผลสำหรับฉัน หากคุณมี บริษัท ที่ประสบความสำเร็จอย่างล้นหลามด้วยเงินและพนักงานมากมาย ... ทำไมไม่ลองลงทุนใน R&D อีกครั้งใช่ไหม?
Tom

18

Facebook จะใช้โครงสร้างโคมไฟ บริการแบ็คเอนด์ของ Facebook เขียนด้วยภาษาการเขียนโปรแกรมที่แตกต่างหลากหลายรวมถึง C ++, Java, Python และ Erlang และใช้ตามความต้องการ ด้วย LAMP Facebook ใช้เทคโนโลยีบางอย่างเพื่อรองรับคำขอจำนวนมากเช่น

  1. Memcache - เป็นระบบแคชหน่วยความจำที่ใช้เพื่อเร่งเว็บไซต์ที่ใช้ฐานข้อมูลแบบไดนามิก (เช่น Facebook) โดยการแคชข้อมูลและวัตถุใน RAM เพื่อลดเวลาในการอ่าน Memcache เป็นรูปแบบหลักของ Facebook ในการแคชและช่วยแบ่งเบาภาระฐานข้อมูล การมีระบบแคชช่วยให้ Facebook สามารถดำเนินการได้อย่างรวดเร็วเหมือนกับการเรียกคืนข้อมูลของคุณ

  2. Thrift (โปรโตคอล) - เป็นกรอบการเรียกขั้นตอนระยะไกลที่มีน้ำหนักเบาสำหรับการพัฒนาบริการข้ามภาษาที่ปรับขนาดได้ Thrift รองรับ C ++, PHP, Python, Perl, Java, Ruby, Erlang และอื่น ๆ

  3. Cassandra (ฐานข้อมูล) - เป็นระบบการจัดการฐานข้อมูลที่ออกแบบมาเพื่อจัดการกับข้อมูลจำนวนมากที่กระจายออกไปทั่วเซิร์ฟเวอร์จำนวนมาก

  4. HipHop สำหรับ PHP - มันเป็นหม้อแปลงแหล่งที่มาสำหรับรหัสสคริปต์ PHP และถูกสร้างขึ้นเพื่อประหยัดทรัพยากรเซิร์ฟเวอร์ HipHop แปลงซอร์สโค้ด PHP เป็น C ++ ที่ปรับให้เหมาะสม หลังจากทำสิ่งนี้มันจะใช้ g ++ เพื่อคอมไพล์รหัสเครื่อง

หากเราเข้าไปดูรายละเอียดเพิ่มเติมให้ตอบคำถามนี้อีกต่อไป เราสามารถเข้าใจเพิ่มเติมได้จากโพสต์ต่อไปนี้:

  1. Facebook ทำงานอย่างไร
  2. การจัดการข้อมูลสไตล์ Facebook
  3. ออกแบบฐานข้อมูล Facebook?
  4. โครงสร้างฐานข้อมูลของ Facebook wall
  5. โครงสร้างข้อมูล Facebook "ชอบ"

7

"การรู้เกี่ยวกับเว็บไซต์ที่รองรับปริมาณการใช้งานจำนวนมากนั้นมีตัวชี้มากมายสำหรับสถาปนิกและอื่น ๆ เพื่อรับทราบบางสิ่งในขณะที่ออกแบบไซต์ใหม่"

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

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

หากคุณต้องการเรียนรู้เกี่ยวกับระบบซอฟต์แวร์ที่ไม่น่าสนใจฉันสามารถแนะนำหนังสือ "การผ่าแอปพลิเคชัน C #" เกี่ยวกับการพัฒนา SharpDevelop IDE มันเป็นออกจากพิมพ์ แต่มันก็สามารถออนไลน์ หนังสือช่วยให้คุณมองเห็นแอปพลิเคชั่นจริงและให้ข้อมูลเชิงลึกเกี่ยวกับ IDE ซึ่งมีประโยชน์สำหรับโปรแกรมเมอร์


1
ใช่แล้วอาจมีคนไม่มากที่ต้องจัดการกับการจราจรที่หนาแน่น แต่มันก็ดีที่จะเข้าใจความสามารถในการปรับขนาดได้และวิธีการที่ บริษัท ที่ยอดเยี่ยมเช่น Facebook จัดการกับปริมาณการใช้งานที่หนักหน่วง อาจจะมีบางส่วนบุญการออกแบบที่ดีสามารถเรียนรู้จาก :)
ล้านล้าน

@nanshi: ฉันยอมรับว่ามันมีประโยชน์ในการเรียนรู้จาก ประเด็นของฉันคือคุณควรคำนึงถึงสิ่งที่คุณกำลังออกแบบ การออกแบบเพื่อขยายขีดความสามารถตั้งแต่วันที่ 1 ทำให้ยากต่อการเปลี่ยนแปลงสิ่งที่โปรแกรมทำ ในสถานการณ์ส่วนใหญ่ความเรียบง่ายสำคัญกว่า นอกจากนี้ Facebook นั้นดูแลโดยผู้คนมากมาย แต่ละคนเหล่านั้นจะต้องเป็นผู้เชี่ยวชาญในส่วนของระบบ
Jørgen Fogh

ฉันเห็นประเด็นของคุณ เห็นด้วย :)
ล้านล้าน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.