Facebook'un çarkları nasıl dönüyor?

Facebook gibi dev bir sistemi döndüren çarkları hiç merak ettiniz mi? Facebook nasıl çalışıyor?

Altı yıl gibi nispeten kısa bir süre içinde 400 milyondan fazla kullanıcıya ulaşan Facebook, sosyal ağların gücünün gerçek bir göstergesi haline geldi. Facebook adını duymamış bilgisayar kullanıcısı neredeyse yok. Neredeyse her gün çıkan Facebook ilintili haberler sayesinde, bilgisayara el sürmemiş insanlar bile bu sosyal ağın adına aşina oldular.

Peki ama nasıl çalışıyor şu Facebook? 400 milyon kullanıcısı olan bir servisin motor kaputunun altında ne var? Çoğu kullanıcının pek kafa yorduğu bir konu değil şüphesiz. Ama merak edenler için kaputu kaldırıp bir bakalım dedik.

Facebook, her isteneni yapan ve yüz milyonlarca kullanıcının yükünü tınmadan taşıyan sihirli bir hayvancık değil. Açtığınız o nispeten basit görünümlü Facebook sayfasının ardında, çok büyük ve karmaşık bir altyapı var. Pek çok farklı parçadan oluşan bu yapının özel detayları tabii ki biraz ticari bir sır. Ama geri kalanı herkesin görebileceği unsurlardan oluşuyor.

Vitrinde Gördükleriniz

Linux güvenlik için tercih ediliyor

Facebook'un ana altyapısını LAMP kısaltmasıyla çağrılan bir dizi uygulama oluşturur. Linux, Apache, MySQL ve PHP uygulamalarının bir karışımı olan LAMP, farklı yazılımlar ve programlama lisanlarının bir arada çalıştığı çekirdektir.

Linux ve Apache
Bildiğiniz gibi, Linux hayli gelişmiş, özellikle güvenlik açısından tercih edilen bir işletim sistemidir. Facebook'un tüm program yapısı bu işletim sistemi üzerinde çalışmaktadır. Apache ise yine hayli yaygın kullanılan bir sunucu yazılımıdır, internet camiasında çokça tercih edilir.

Her iki yazılımın da ortak özellikleri, açık kaynak kodlu olmalarıdır. İkisi de geliştirilmeye açıktır. Bu da özellikle Facebook gibi devamlı büyüyen ve yeni uygulamaları bünyesine katmaya ihtiyacı olan bir hizmet için gereklidir.

Dev veri tabanları ve arşivleme

Facebook olduğu gibi kullanmıyor, kendine göre modifiye ediyor

MySQL
Facebook'un dev veri tabanı yine bir başka popüler yazılım olan MySQL veri tabanı uygulaması üzerinde çalışmaktadır.

Ancak Facebook tasarımcıları bu yazılımın temel özelliklerinden faydalanmakla birlikte, kendi ihtiyaçlarına yönelik bir arşivleme yöntemi de geliştirmişlerdir.

Veriler kullanıcı bazında ulaşım sıklığı ve güncelliğe göre sınıflandırılırlar.


PHP
Facebook için kullanılan ana programlama lisanı PHP olarak seçilmiştir. Dinamik yapısı ve yoğun kullanıcı desteği bu tercihte şüphesiz en önemli unsurlar olmuştur.

Hafızayı Taze Tutmak

Facebook'un veritabanı devasa boyutlardadır

Bir web sitesinin ihtiyacı olan tüm bilgiler veritabanında toplanırlar, tabii ki bu veritabanı da sabit disklerde depolanır. Küçük çaplı bir sitede sabit disklerin hızı veritabanına olan erişimi çok fazla kısıtlamaz. Ancak site büyüdükçe işler değişir.

Facebook gerek kullanıcı sayısı, gerekse de bunların depolanan verilere erişme biçimi açısından çok karmaşık bir işleyişe sahiptir. Bu yüzden de benzeri tüm büyük sitelerde olduğu üzere, burada da veri tabanının önemli bir kısmı devamlı RAM üzerinde tutulur.

Bu iş için Memcache yazılımı kullanılmaktadır. Memcache sayesinde hem sitenin devamlı çağrılan öğeleri, hem de en sık erişilen kullanıcı verileri devamlı dinamik hafızaya alınarak, siteye olan erişimin hızlandırılması sağlanır. Tabii bu iş için inanılmaz boyutlarda RAM gerektiğini de hatırlamak lazım! Ancak Facebook gibi yüzmilyonlarca kullanıcısı olan bir sistemde, erişim hızını kabul edilebilir seviyelerde tutmanın başka çaresi de yoktur.

LAMP'ın Eksikleri

Yepyeni problemlerle karşılaşıyorlar

Bahsettiğimiz LAMP yazılım yığını programcılara pek çok esneklik sunar. Öte yandan LAMP yazılım destesi tamamen sorunsuz değildir. Programcılar sık sık sorunlarla karşılaşmakta, kendi araçlarını geliştirmek zorunda kalmaktadırlar. Ancak bunun ana sebebi kullanılan yazılımların kusurlu olmasından kaynaklanmaz.

Facebook programcılarının karşılarındaki en büyük sorun, bizzat yarattıkları sistemin dev boyutlarıdır. Pek az internet servisi Facebook kadar karmaşıktır. Bu yüzden programcıların gittikçe daha da büyüyen bu sitede karşılaştıkları sorunlar da çoğu zaman kendine has, daha evvel pek karşılaşılmamış sorunlar olmaktadır.

Mesela PHP programlama lisanı bu boyutlarda bir uygulama düşünülerek hazırlanmış değildir. Haliyle Facebook'un ihtiyaçlarını karşılamakta sık sık zorlanmaktadır. Bu yüzden de sık sık yeni araçlar eklenmesi elzemdir.

Yine benzer bir şekilde, devamlı büyüyen ve şişen veritabanının ayakta kalabilmesi için normalden daha fazla çaba harcamak gerekmektedir. Facebook veritabanı, tüm kullanıcılar arasında devamlı oluşan çapraz ilişkilendirmeler nedeniyle inanılmaz biçimde karışıktır. Sisteme yeni bir sunucu ekleyerek depolama alanı sorununu çözmek, Facebook için geçerli bir çözüm değildir.

Perde Arkası

Bu sunucuların içinde sayısız açık kaynak kod var

Buraya kadar saydığımız yazılımlar ve uygulamalar, Facebook'un görülen yüzünü ayakta tutuyor. Ancak bir de daha geri planda çalışan, ancak özel istemle devreye giren pek çok alt uygulama var. Bunların büyük kısmı Facebook'a özel unsurlar ve gerektiğinde doğru araçları kullanarak yaratılmaları gerekiyor. Burada yeni uygulamaların oluşturulmasını kontrol eden üç temel doktrin var:

1) Yeni bir hizmeti ancak ihtiyaç ortaya çıktığında hazırlamak ve sunmak.
2) Yeni hizmetleri rahat yaratabilmek için, gerekecek araçları da beraberinde oluşturmak.
3) Amaca uygun programlama lisanını seçmek ve kullanmak.

Arka planda çalışan hizmetleri oluşturmak ve ayakta tutmak için kullanılan ayrı bir yazılım demeti vardır. Tıpkı LAMP gibi, bu demetin de farklı öğeleri mevcuttur. Gelin bunlara da bakalım.

Thrift
Thrift, farklı lisanlarda yazılan uygulamaların çalıştırılabildiği esnek bir protokoldur. C++, Python, Perl, Java, Erlang gibi pek çok programlama lisanını destekler.

Scribe
Bizzat Thrift'in üzerine kurulu olan Scribe, pek çok farklı sunucudan gelen veri akışının kaydını tutmakla yükümlüdür. Bu kayıtlar özellikle veritabanı yönetiminde önemli işleve sahiptir.

Cassandra da neyin nesi?

İşin arkasındaki ekip: Facebook Engineering

Facebook'un veritabanı ihtiyaçlarının MySQL ile karşılandığını söylemiştik. Ancak MySQL tek başına yeterli değildir. Bu denli büyük bir veritabanı içinde aradığınızı hızla bulabilmek için ayrıca bir yöneticiye ihtiyacınız olacaktır. İşte Cassandra bu işe yarar. Facebook içinde yapılan aramaların başarıya ulaşması, Cassandra'nın pek çok sunucuya dağılmış olan verilen izini sürebilmesine bağlıdır.

HipHop for PHP
Bu yazılımın ana amacı, PHP'nin yavaş kaldığı alanları güçlendirmektir. Bunun için Facebook'un ana web lisanı olan PHP ile yazılmış olan kodlar, HipHop tarafından C++ lisanına çevrilirler. Bundan sonra da doğrudan makine lisanında derlenerek, işlemlerin daha da süratli yürümesi sağlanır.

Hepsi Bu Kadar mı?
Facebook'un çarklarını döndüren ana yazılım ve uygulamaları kısaca anlatmaya çalıştık. Tabii işin çok derinine inmeye sayfalar yetmez, ancak bu kadarı bile insana bir fikir vermeye yetebiliyor. Facebook ve benzeri servislerin sık sık ortaya çıkmamasının sebibini kolayca anlayabiliyoruz. Bu boyutlarda bir girişimin altından başarıyla kalkmak şüphesiz hiç kolay değil.

Sonraki Haber

Forum