Arsitektur Facebook [ditutup]

169

Saya telah mencari artikel / info tentang arsitektur di Facebook, tantangan & cara mereka mengatasinya. Apa yang mereka gunakan & mengapa mereka gunakan. Bagaimana mereka mengukur & apa keputusan desain untuk apa yang mereka lakukan dll. Pendukung utama adalah untuk belajar. Mengetahui tentang situs yang menangani lalu lintas besar seperti itu memberi banyak petunjuk bagi arsitek, dll. Untuk mengingat hal-hal tertentu saat merancang situs baru. Saya membagikan apa yang saya temukan.

  1. Grafik Ilmu & Sosial Facebook (Video)
  2. Skala di Facebook
  3. Arsitektur Obrolan Facebook
  4. Blog Facebook
  5. Arsitektur dan Desain Cassandra Facebook
  6. Catatan Teknik Facebook
  7. Quora - Arsitektur Facebook
  8. Facebook untuk 600 juta pengguna
  9. Hadoop & penggunaannya di Facebook
  10. Erlang di Facebook: Chat Architecture
  11. Caching Kinerja Facebook
  12. Arsitektur Facebook Connect

Saya memiliki 2 tautan lagi tetapi tidak dapat memposting karena batasan di situs ini. Juga, silakan bagikan jika ada yang lebih baik (tidak perlu terkait dengan Facebook saja).

PS - Saya tidak dapat menemukan tempat yang baik untuk berbagi penelitian ini, karena itu inisiatif ini. Semoga ini bisa membantu seseorang.

Srikar Appalaraju
sumber
2
2. Skala di Facebook (Video) - infoq.com/presentations/Scale-at-Facebook 3. Facebook Chat - infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju
2
Juga highscalability.com tampaknya menjadi tempat yang bagus untuk belajar tentang arsitektur untuk banyak situs populer. Tidak tahu berapa banyak dari ini benar & berapa banyak spekulatif, tapi itu di luar sana & hanya sesuatu untuk mengunyah ...
Srikar Appalaraju
1
The rekayasa facebook blog kadang-kadang memiliki wawasan yang signifikan ke dalam arsitektur dan skala tantangan mereka.
Colin Pickard
Karena ini secara teknis bukan pertanyaan nyata, Anda dianjurkan untuk memindahkan informasi ke wiki tag FB untuk menyimpan informasi di sana jika pertanyaan ini dihapus. Terima kasih.
Gordon
@Gordon bagaimana cara menambahkan tag FB Wiki? Bukankah tag 'Facebook' sudah ada di sana? Itu tidak cukup?
Srikar Appalaraju

Jawaban:

33

Yah Facebook telah mengalami BANYAK perubahan dan awalnya tidak dirancang untuk menjadi efisien. Itu dirancang untuk melakukan pekerjaannya. Saya sama sekali tidak tahu seperti apa kode itu dan Anda mungkin tidak akan menemukan banyak info tentang itu (untuk alasan keamanan dan hak cipta yang jelas), tetapi lihatlah API. Lihatlah seberapa sering itu berubah dan seberapa banyak itu tidak berfungsi dengan baik, lagi, atau sama sekali.

Saya pikir kartu as terbesar di lengan mereka adalah Hiphop. http://developers.facebook.com/blog/post/358 Anda dapat menggunakan HipHop sendiri: https://github.com/facebook/hiphop-php/wiki

Tetapi jika Anda bertanya kepada saya itu adalah tugas yang sangat ambisius dan mungkin membuang-buang waktu. Hiphop hanya mendukung begitu banyak, ia tidak bisa begitu saja mengubah semuanya menjadi C ++. jadi apa maksud dari ini? Ya, ini memberitahu kita bahwa Facebook TIDAK sepenuhnya mengambil keuntungan dari bahasa PHP. Ini tidak menggunakan 5.3 terbaru dan saya berani bertaruh masih ada banyak yang kompatibel dengan PHP 4. Kalau tidak, mereka tidak bisa menggunakan HipHop. HipHop ADALAH IDE YANG BAIK dan perlu untuk tumbuh dan berkembang, tetapi dalam kondisi saat ini itu tidak benar-benar berguna bagi banyak orang yang membangun aplikasi PHP BARU.

Ada juga PHP ke JAVA melalui hal-hal seperti Resin / Quercus. Sekali lagi, itu tidak mendukung semuanya ...

Hal lain yang perlu diperhatikan adalah bahwa jika Anda menggunakan modul PHP non-standar, Anda tidak akan dapat mengubah kode itu menjadi C ++ atau Java. Namun ... Mari kita lihat modul PHP. Mereka dikompilasi dalam C ++. Jadi jika Anda dapat membangun modul PHP yang melakukan hal-hal (seperti parse XML, dll.) Maka Anda pada dasarnya (minus beberapa interaksi) bekerja pada kecepatan yang sama. Tentu saja Anda tidak bisa hanya membuat modul PHP untuk setiap kebutuhan yang mungkin dan seluruh aplikasi Anda karena Anda harus mengkompilasi ulang dan itu akan jauh lebih sulit untuk dikodekan, dll.

Namun ... Ada beberapa modul PHP praktis yang dapat membantu mengatasi masalah kecepatan. Meskipun pada akhirnya, kami memiliki hal yang luar biasa ini dikenal sebagai "cloud" dan dengan itu, kami dapat mengatur skala aplikasi kami (termasuk PHP) sehingga tidak masalah lagi. Perangkat keras menjadi lebih murah dan lebih murah. Amazon baru saja menurunkan harga (lagi) berbicara tentang.

Jadi, selama Anda membuat kode aplikasi PHP di sekitar gagasan bahwa itu perlu skala satu hari ... Maka saya pikir Anda baik-baik saja dan saya tidak benar-benar yakin saya akan melihat Facebook dan apa yang mereka lakukan karena ketika mereka melakukannya, itu adalah dunia yang sama sekali berbeda dan sekarang mencoba untuk menahan infrastruktur itu dan memeliharanya ... Nah, Anda mendapatkan hal-hal seperti HipHop.

Sekarang bagaimana HipHop akan membantu Anda? Tidak akan. Tidak bisa. Anda baru mulai, Anda dapat menggunakan PHP 5.3. Saya sangat merekomendasikan melihat ke dalam kerangka kerja PHP 5.3 dan semua manfaat baru yang dibawa oleh PHP 5.3 ke tabel bersama dengan pustaka SPL dan juga memikirkan database Anda juga. Kemungkinan besar Anda menyajikan konten dari basis data, jadi periksa MongoDB dan jenis basis data lainnya yang tidak memiliki skema dan berorientasi dokumen. Mereka jauh lebih cepat dan lebih baik untuk jenis situs web / aplikasi yang paling "umum".

Lihatlah perusahaan-perusahaan BARU seperti Foursquare dan Smugmug dan beberapa perusahaan lain yang memanfaatkan teknologi BARU dan BAGAIMANA mereka menggunakannya. Untuk sesukses Facebook, jujur ​​saya tidak akan melihat mereka untuk "bagaimana" membangun situs web / aplikasi yang efisien. Saya tidak mengatakan mereka tidak memiliki orang yang sangat (sangat) berbakat yang bekerja di sana yang memecahkan masalah (mereka) secara kreatif ... Saya juga tidak mengatakan bahwa Facebook bukan ide yang bagus secara umum dan itu bukan sukses dan Anda seharusnya tidak mendapatkan ide darinya .... Saya hanya mengatakan bahwa jika Anda dapat melihat seluruh kode sumbernya, Anda mungkin tidak akan mendapat manfaat dari itu.

Tom
sumber
1
menyetujui sebagian besar dari apa yang Anda katakan. Tautan itu hanya untuk rasa ingin tahu. Kadang-kadang Anda melihat sebuah teknologi & mengatakan "hei! Itu keren" ...
Srikar Appalaraju
Secara acak meninjau kembali jawaban saya di sini dua hal. # 1, saya percaya C dan bukan C + + teknis saya buruk ... Tapi yang lebih penting # 2, Phalcon adalah kerangka kerja PHP yang lebih baru yang mengubah banyak ke ekstensi PHP untuk kecepatan. Meskipun banyak kode Anda sendiri tidak akan berjalan di C tentu saja dan perpustakaan lain yang Anda gunakan kemungkinan tidak akan baik. Namun, itu ide cerdas seperti HipHop untuk memeras kinerja ekstra.
Tom
... dan di sini kita pergi lagi dengan kartu as di lengan mereka. Melihat ke belakang beberapa tahun kemudian kita memiliki bahasa Hack ini (lahir dari barang HipHop dengan IDE sendiri tidak kurang). Apakah itu tumbuh menjadi sesuatu yang lebih baik? Kita lihat saja nanti. Bisakah ini membantu Anda? Mungkin, tetapi sekarang sepertinya Anda juga akan dapat membangun seperti Facebook. Hanya butuh sekitar 4 tahun =) Meskipun secara pribadi, saya tidak akan begitu cepat minum kool-aid.
Tom
1
Melihat jawabannya sekarang, saya kagum pada hal-hal yang terjadi di dunia teknologi. Tidak hanya HipHop mendukung versi terbaru PHP, Facebook juga mengembangkan HHVM yang bahkan lebih cepat.
Gopi Krishna
Ya, saya terkadang mendapatkan notifikasi yang membawa saya kembali ke masalah ini. Sungguh luar biasa melihat bagaimana hal-hal telah berubah dan bagaimana HipHop berevolusi menjadi HHVM (dan kemungkinan bagaimana Facebook menciptakan kembali dirinya di bawah selimut - lihat semua kemajuan JS yang menakjubkan juga yang mereka lakukan). Masuk akal bagi saya. Jika Anda memiliki perusahaan yang sangat sukses dengan banyak uang dan karyawan ... Mengapa tidak berinvestasi kembali dalam R&D di beberapa titik, kan?
Tom
18

Facebook menggunakan struktur LAMP . Layanan back-end Facebook ditulis dalam berbagai bahasa pemrograman yang berbeda termasuk C ++, Java, Python, dan Erlang dan mereka digunakan sesuai dengan kebutuhan. Dengan LAMP, Facebook menggunakan beberapa teknologi, untuk mendukung sejumlah besar permintaan, seperti

  1. Memcache - Ini adalah sistem cache memori yang digunakan untuk mempercepat situs web yang digerakkan oleh basis data dinamis (seperti Facebook) dengan menyimpan data dan objek dalam RAM untuk mengurangi waktu membaca. Memcache adalah bentuk utama caching Facebook dan membantu meringankan beban basis data. Memiliki sistem caching memungkinkan Facebook untuk secepat mengingat data Anda.

  2. Hemat (protokol) - Ini adalah kerangka panggilan prosedur jarak jauh ringan untuk pengembangan layanan lintas-bahasa scalable. Hemat mendukung C ++, PHP, Python, Perl, Java, Ruby, Erlang, dan lainnya.

  3. Cassandra (database) - Ini adalah sistem manajemen basis data yang dirancang untuk menangani sejumlah besar data yang tersebar di banyak server.

  4. HipHop untuk PHP - Ini adalah transformator kode sumber untuk kode skrip PHP dan dibuat untuk menghemat sumber daya server. HipHop mengubah kode sumber PHP menjadi C ++ yang dioptimalkan. Setelah melakukan ini, ia menggunakan g ++ untuk mengkompilasinya ke kode mesin.

Jika kita membahas lebih detail, maka jawaban untuk pertanyaan ini lebih panjang. Kami dapat memahami lebih banyak dari postingan berikut:

  1. Bagaimana Cara Kerja Facebook?
  2. Manajemen Data, gaya Facebook
  3. Desain basis data Facebook?
  4. Struktur basis data Facebook wall
  5. Facebook "suka" struktur data
Somnath Muluk
sumber
7

"Mengetahui tentang situs yang menangani lalu lintas besar seperti itu memberi banyak petunjuk bagi arsitek, dll. Untuk mengingat hal-hal tertentu saat merancang situs baru"

Saya pikir Anda mungkin dapat belajar banyak dari desain Facebook, sama seperti Anda dapat dari desain sistem perangkat lunak besar yang sukses. Namun, bagi saya tampaknya Anda tidak perlu mengingat desain Facebook saat ini ketika merancang sistem baru.

Mengapa Anda ingin dapat menangani lalu lintas yang harus ditangani Facebook? Kemungkinannya adalah Anda tidak akan pernah harus melakukannya, tidak peduli seberapa berbakatnya Anda seorang programmer. Facebook sendiri tidak dirancang sejak awal untuk skalabilitas sebesar itu, yang mungkin merupakan pelajaran paling penting untuk dipelajari darinya.

Jika Anda ingin belajar tentang sistem perangkat lunak non-sepele, saya dapat merekomendasikan buku "Membedah Aplikasi C #" tentang pengembangan IDE SharpDevelop. Itu tidak dicetak, tetapi tersedia secara online gratis . Buku ini memberi Anda sekilas ke aplikasi nyata dan memberikan wawasan tentang IDE yang berguna bagi seorang programmer.

Jørgen Fogh
sumber
1
ya, mungkin tidak banyak orang yang perlu berurusan dengan lalu lintas yang padat. tetapi selalu baik untuk memahami skalabilitas dan bagaimana perusahaan hebat seperti Facebook menangani lalu lintas yang padat. Mungkin ada beberapa manfaat desain yang bagus yang dapat dipelajari dari :)
triliunan
@nanshi: Saya setuju bahwa itu berguna untuk belajar. Maksud saya adalah Anda harus mengingat apa yang Anda rancang. Mendesain skalabilitas sejak hari pertama mempersulit perubahan apa yang dilakukan oleh program. Dalam kebanyakan situasi, kesederhanaan lebih penting. Selain itu, Facebook dikelola oleh banyak orang. Masing-masing orang hanya harus menjadi ahli di bagian sistem.
Jørgen Fogh
saya mengerti maksud Anda. setuju :)
triliunan