Menu

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.

 Facebook'un Oregon'daki veri merkezi

Resim-1 : Facebook'un Oregon'daki veri merkezi

 

Vitrinde Gördükleriniz

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.

Resim-2 : Linux güvenlik için tercih ediliyor

 

Dev veri tabanları ve arşivleme

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.

Resim-3 : Facebook olduğu gibi kullanmıyor, kendine göre modifiye ediyor

 

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

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'un veritabanı da devasa boyutlardadır.

Resim-5 : Facebook'un veritabanı devasa boyutlardadır

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

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.

Resim-6 : Yepyeni problemlerle karşılaşıyorlar

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.

Resim-7 : Bu sunucuların içinde sayısız açık kaynak kod var

 

Perde Arkası

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?

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.

Resim-8 : İşin arkasındaki ekip: Facebook Engineering

 

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.

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.

Kaynak CHIP Online www.chip.com.tr (Berker Güngör)