Facebook Mimarisi [kapalı]


169

Facebook'ta mimarlık, zorlukları ve bunlarla mücadele yolları hakkında makaleler / bilgiler için scrounging. Ne kullandıkları ve neden kullandıkları. Nasıl ölçeklenirler ve yaptıklarına ilişkin tasarım kararları nelerdir vb. Öğrenmenin temel dayanağı. Bu kadar yoğun trafiği işleyen siteler hakkında bilgi sahibi olmak, yeni siteler tasarlarken bazı şeyleri akılda tutmak için mimarlar vb. Bulduğumu paylaşıyorum.

  1. Facebook Bilim ve Sosyal Grafik (Video)
  2. Facebook'ta ölçeklendir
  3. Facebook Sohbet Mimarisi
  4. Facebook Blogu
  5. Facebook Cassandra Mimarlık ve Tasarım
  6. Facebook Mühendislik Notları
  7. Quora - Facebook Mimarisi
  8. 600 milyon kullanıcı için Facebook
  9. Hadoop ve Facebook'ta kullanımı
  10. Facebook'ta Erlang: Sohbet Mimarisi
  11. Facebook Performans Önbelleği
  12. Facebook Bağlantı Mimarisi

2 bağlantım daha var, ancak bu sitedeki kısıtlamalar nedeniyle gönderemiyorum. Ayrıca, daha iyi bir şey varsa lütfen paylaşın (yalnızca Facebook ile ilgili olması gerekmez).

PS - Bu araştırmayı, dolayısıyla bu girişimi paylaşmak için iyi yerler bulamadım. Umarım bu birine yardımcı olur.



2
Ayrıca highscalability.com birçok popüler site için mimarileri öğrenmek için harika bir yer gibi görünüyor. Bunun ne kadar doğru ve ne kadar spekülatif olduğuna dair bir fikrim yok, ama dışarıda ve sadece munch yapılacak bir şey ...
Srikar Appalaraju

1
Facebook mühendisliği blog bazen kendi mimarlık ve ölçekleme zorluklar hakkında önemli bilgiler vardır.
Colin Pickard

Bu teknik olarak gerçek bir soru olmadığından, bu sorunun silinmesi durumunda buradaki bilgileri korumak için bilgileri FB etiketi wiki'ye taşımanız önerilir . Teşekkürler.
Gordon

@Gordon FB Wiki etiketi nasıl eklenir? 'Facebook' etiketi zaten orada değil mi? Bu yeterli değil mi?
Srikar Appalaraju

Yanıtlar:


33

Facebook birçok değişikliğe uğradı ve başlangıçta verimli olacak şekilde tasarlanmadı. İşini yapmak için tasarlandı. Kodun neye benzediğine dair hiçbir fikrim yok ve muhtemelen (açık güvenlik ve telif hakkı nedenleriyle) hakkında çok fazla bilgi bulamayacaksınız, ancak sadece API'ye bir göz atın. Ne sıklıkta değiştiğine ve ne kadarının düzgün, artık veya hiç çalışmadığına bakın.

Onların kolundaki en büyük asın Hiphop olduğunu düşünüyorum. http://developers.facebook.com/blog/post/358 HipHop'u kendiniz kullanabilirsiniz: https://github.com/facebook/hiphop-php/wiki

Ama bana sorarsanız, bu çok iddialı ve muhtemelen zaman israfıdır. Hiphop sadece çok destekliyor, her şeyi C ++ 'ya dönüştüremiyor. Peki, bu bize ne anlatmaya çalışıyor? Bize Facebook'un PHP dilinden tam olarak faydalanmadığını söylüyor. En son 5.3'ü kullanmıyor ve hala PHP 4 uyumlu bir çok şey olduğunu iddia ediyorum. Aksi takdirde HipHop kullanamazlardı. HipHop İYİ BİR FİKİRDİR ve büyümesi ve genişlemesi gerekir, ancak şu anki durumunda YENİ PHP uygulamaları geliştiren birçok kişi için gerçekten yararlı değildir.

Ayrıca Resin / Quercus gibi şeyler üzerinden PHP JAVA var. Yine, her şeyi desteklemiyor ...

Dikkat edilmesi gereken başka bir şey, standart olmayan herhangi bir PHP modülü kullanıyorsanız, bu kodu C ++ veya Java'ya da dönüştüremeyeceğinizdir. Ancak ... PHP modüllerine bakalım. Bunlar C ++ 'da derlenmiştir. Eğer bir şeyler (PHP ayrıştırma vb.) Yapmak PHP modülleri inşa edebilirsiniz Yani, o zaman temelde (bazı etkileşim eksi) aynı hızda çalışıyor. Tabii ki sadece mümkün olan her ihtiyaç ve tüm uygulamanız için bir PHP modülü yapamazsınız çünkü yeniden derlemek zorunda kalacaksınız ve kodlamak çok daha zor olacaktır.

Ancak ... hız endişeleri ile yardımcı olabilecek bazı kullanışlı PHP modülleri vardır. Günün sonunda, "bulut" olarak bilinen bu harika şeye sahibiz ve bununla birlikte, uygulamalarımızı (PHP dahil) ölçeklendirebiliriz, böylece artık önemli değil. Donanım giderek daha ucuz hale geliyor. Amazon fiyatları tekrar konuştu.

PHP uygulamanızı bir günlük ölçeğe ihtiyaç duyacağı fikri etrafında kodladığınız sürece ... O zaman iyi olduğunu düşünüyorum ve Facebook'a ve ne yaptıklarına bile bakacağımdan emin değilim çünkü bunu yaptılar, bu tamamen farklı bir dünyaydı ve şimdi bu altyapıyı korumaya ve korumaya çalışıyor ... HipHop gibi şeyler alıyorsunuz.

Şimdi HipHop size nasıl yardımcı olacak? Olmaz. Yapamaz. Yeni başlıyorsunuz, PHP 5.3'ü kullanabilirsiniz. Ben çok PHP 5.3 çerçeveler ve PHP 5.3 SPL kütüphaneleri ile birlikte masaya getirdiği tüm yeni faydaları bakarak tavsiye ve ayrıca veritabanınızı düşünün. Büyük olasılıkla bir veritabanından içerik sunuyorsunuz, bu nedenle MongoDB ve şema içermeyen ve belge odaklı diğer veritabanlarına göz atın. Web sitesi / uygulamanın en yaygın türü için çok daha hızlı ve daha iyidir.

Foursquare ve Smugmug gibi YENİ şirketlere ve YENİ teknolojiyi kullanan ve bunu NASIL kullandıklarına bakın. Facebook kadar başarılı olduğu için, dürüstçe onlara verimli bir web sitesi / uygulama oluşturmak için "nasıl" bakmazdı. Orada çalışan (problemlerini) yaratıcı bir şekilde çözen çok (çok) yetenekli insanlara sahip olmadıklarını söylemiyorum ... Ayrıca Facebook'un genel olarak harika bir fikir olmadığını ve bunun başarılı ve ondan fikir almamalısınız .... Sadece kaynak kodlarının tamamını görüntüleyebiliyorsanız, muhtemelen bundan faydalanamayacağınızı söylüyorum.


1
söylediklerinin çoğu üzerinde anlaştılar. Bu bağlantılar sadece merak uğruna. Bazen bir teknoloji parçasına bakıyorsunuz ve "hey! Bu harika"
diyorsunuz

Buraya cevabımı rastgele iki kez tekrar gözden geçiriyorum. # 1, C inanıyorum ve C ++ teknik kötü değil ... Ama daha da önemlisi # 2, Phalcon hız için PHP uzantısına çok aşağı dönüştüren yeni bir PHP çerçevesidir. Kendi kodunuzun çoğu elbette C'de çalışmayacak ve muhtemelen kullandığınız diğer kütüphaneler de olmayacak. Ancak, bazı ekstra performansları sıkmak HipHop gibi akıllıca bir fikir.
Tom

... ve işte o as ile tekrar başlıyoruz. Yıllar sonra geriye dönüp baktığımızda bu Hack diline sahibiz (HipHop eşyalarından kendi IDE'si daha az değil). Daha iyi bir şey olarak mı büyüdü? Göreceğiz. Size yardımcı olabilir mi? Belki, ama şimdi senin gibi Facebook gibi inşa edebileceksin. Sadece yaklaşık 4 yıl sürdü =) Kişisel olarak, kool yardımını içmek o kadar hızlı olmazdı.
Tom

1
Şimdi cevaba baktığımda, teknoloji dünyasında işlerin nasıl sonuçlandığına şaşırdım. HipHop sadece PHP'nin son sürümlerini desteklemekle kalmadı, Facebook da daha hızlı olan HHVM'yi geliştirdi.
Gopi Krishna

Evet, bazen beni buna geri getiren bildirimler alıyorum. İşlerin nasıl değiştiğini ve HipHop'un HHVM'ye nasıl evrildiğini görmek (ve muhtemelen Facebook'un kapakların altında kendini nasıl yeniden keşfettiğini görmek - yaptıkları tüm muhteşem JS ilerlemelerine bakın). Bana mantıklı geliyor. Tonlarca para ve çalışanı olan çılgınca başarılı bir şirketiniz varsa ... Neden bir noktada Ar-Ge'ye yeniden yatırım yapmıyorsunuz?
Tom

18

Facebook LAMP yapısını kullanıyor . Facebook'un arka uç hizmetleri C ++, Java, Python ve Erlang dahil olmak üzere çeşitli farklı programlama dillerinde yazılmıştır ve ihtiyaca göre kullanılır. LAMP ile Facebook, çok sayıda talebi desteklemek için bazı teknolojiler kullanır.

  1. Memcache - Okuma süresini azaltmak için RAM'de veri ve nesneleri önbelleğe alarak dinamik veritabanı güdümlü web sitelerini (Facebook gibi) hızlandırmak için kullanılan bir bellek önbellekleme sistemidir. Memcache, Facebook'un birincil önbellekleme biçimidir ve veritabanı yükünü hafifletmeye yardımcı olur. Önbellek sistemine sahip olmak, Facebook'un verilerinizi hatırlamadaki kadar hızlı olmasını sağlar.

  2. Tasarruf (protokol) - Ölçeklendirilebilir diller arası hizmet geliştirme için hafif bir uzaktan yordam çağrısı çerçevesidir. Thrift, C ++, PHP, Python, Perl, Java, Ruby, Erlang ve diğerlerini destekler.

  3. Cassandra (veritabanı) - Birçok sunucuya dağılmış büyük miktarda veriyi işlemek için tasarlanmış bir veritabanı yönetim sistemidir.

  4. PHP için HipHop - PHP kod kodu için bir kaynak kodu transformatörüdür ve sunucu kaynaklarını kaydetmek için yaratılmıştır. HipHop, PHP kaynak kodunu optimize edilmiş C ++ 'a dönüştürür. Bunu yaptıktan sonra, makine koduna derlemek için g ++ kullanır.

Daha fazla ayrıntıya girersek, bu soruya cevap daha uzun olur. Aşağıdaki yayınlardan daha fazlasını anlayabiliriz:

  1. Facebook Nasıl Çalışır?
  2. Veri Yönetimi, Facebook tarzı
  3. Facebook veritabanı tasarımı?
  4. Facebook duvarının veritabanı yapısı
  5. Facebook "beğen" veri yapısı

7

"Bu kadar yoğun trafiği işleyen siteler hakkında bilgi sahibi olmak, yeni siteler tasarlarken mimarların vb.

Herhalde başarılı bir büyük yazılım sisteminin tasarımından da olabildiğince Facebook tasarımından çok şey öğrenebileceğinizi düşünüyorum. Ancak, sen gerektiğini geliyor bana değil yeni sistemler tasarlanırken göz önünde Facebook'un şu anki tasarımını tutun.

Neden Facebook'un taşıması gereken trafiği idare etmek istiyorsun? Oranlar, ne kadar yetenekli bir programcı olursanız olun, asla yapmak zorunda kalmayacağınızdır. Facebook başından beri, belki de ondan öğrenilecek en önemli ders olan bu kadar büyük ölçeklenebilirlik için tasarlanmamıştı.

Önemsiz bir yazılım sistemi hakkında bilgi edinmek isterseniz, SharpDevelop IDE'nin geliştirilmesi hakkında "Bir C # Uygulamasını Kesme" kitabını önerebilirim. Baskısı tükenmiş, ancak çevrimiçi olarak ücretsiz olarak kullanılabilir . Kitap size gerçek bir uygulama hakkında bir fikir verir ve bir programcı için yararlı olan IDE'ler hakkında bilgi verir.


1
evet, muhtemelen çok fazla insanın bu kadar yoğun bir trafikle uğraşmasına gerek yoktur. ancak ölçeklenebilirliği ve Facebook gibi büyük bir şirketin bu kadar yoğun bir trafikle nasıl başa çıktığını anlamak her zaman iyidir. Bazı iyi tasarım özellikleri öğrenilebilir :)
trilyonlar

@nanshi: Öğrenmenin faydalı olduğunu kabul ediyorum. Demek istediğim, ne için tasarladığınızı unutmamanız. 1. günden itibaren ölçeklenebilirlik için tasarım yapmak, programın yaptıklarını değiştirmeyi zorlaştırır. Çoğu durumda basitlik daha önemlidir. Ayrıca, Facebook birçok kişi tarafından korunur. Bu insanların her biri sadece sistemin bir bölümünde uzman olmak zorundadır.
Jørgen Fogh

senin değinmek istediğin noktayı anlıyorum. katılıyorum :)
trilyonlar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.