Altı yıl gibi nispeten kısa bir sure icinde 400 milyondan fazla kullanıcıya ulaşan Facebook, sosyal ağların gucunun gercek bir gostergesi haline geldi. Facebook adını duymamış bilgisayar kullanıcısı neredeyse yok. Neredeyse her gun cıkan Facebook ilintili haberler sayesinde, bilgisayara el surmemiş insanlar bile bu sosyal ağın adına aşina oldular.

Peki ama nasıl calışıyor şu Facebook? 400 milyon kullanıcısı olan bir servisin motor kaputunun altında ne var? Coğu kullanıcının pek kafa yorduğu bir konu değil şuphesiz. Ama merak edenler icin kaputu kaldırıp bir bakalım dedik.

Facebook, her isteneni yapan ve yuz milyonlarca kullanıcının yukunu tınmadan taşıyan sihirli bir hayvancık değil. Actığınız o nispeten basit gorunumlu Facebook sayfasının ardında, cok buyuk ve karmaşık bir altyapı var. Pek cok farklı parcadan oluşan bu yapının ozel detayları tabii ki biraz ticari bir sır. Ama geri kalanı herkesin gorebileceği unsurlardan oluşuyor.

Vitrinde Gordukleriniz

Facebook'un ana altyapısını LAMP kısaltmasıyla cağ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 calıştığı cekirdektir.

Linux ve Apache
Bildiğiniz gibi, Linux hayli gelişmiş, ozellikle guvenlik acısından tercih edilen bir işletim sistemidir. Facebook'un tum program yapısı bu işletim sistemi uzerinde calışmaktadır. Apache ise yine hayli yaygın kullanılan bir sunucu yazılımıdır, internet camiasında cokca tercih edilir.

Her iki yazılımın da ortak ozellikleri, acık kaynak kodlu olmalarıdır. İkisi de geliştirilmeye acıktır. Bu da ozellikle Facebook gibi devamlı buyuyen ve yeni uygulamaları bunyesine katmaya ihtiyacı olan bir hizmet icin gereklidir.

Dev veri tabanları ve arşivleme

MySQL
Facebook'un dev veri tabanı yine bir başka populer yazılım olan MySQL veri tabanı uygulaması uzerinde calışmaktadır.

Ancak Facebook tasarımcıları bu yazılımın temel ozelliklerinden faydalanmakla birlikte, kendi ihtiyaclarına yonelik bir arşivleme yontemi de geliştirmişlerdir.

Veriler kullanıcı bazında ulaşım sıklığı ve guncelliğe gore sınıflandırılırlar.


PHP
Facebook icin kullanılan ana programlama lisanı PHP olarak secilmiştir. Dinamik yapısı ve yoğun kullanıcı desteği bu tercihte şuphesiz en onemli unsurlar olmuştur.

Hafızayı Taze Tutmak

Bir web sitesinin ihtiyacı olan tum bilgiler veritabanında toplanırlar, tabii ki bu veritabanı da sabit disklerde depolanır. Kucuk caplı bir sitede sabit disklerin hızı veritabanına olan erişimi cok fazla kısıtlamaz. Ancak site buyudukce işler değişir.

Facebook gerek kullanıcı sayısı, gerekse de bunların depolanan verilere erişme bicimi acısından cok karmaşık bir işleyişe sahiptir. Bu yuzden de benzeri tum buyuk sitelerde olduğu uzere, burada da veri tabanının onemli bir kısmı devamlı RAM uzerinde tutulur.

Bu iş icin Memcache yazılımı kullanılmaktadır. Memcache sayesinde hem sitenin devamlı cağrılan oğ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ş icin inanılmaz boyutlarda RAM gerektiğini de hatırlamak lazım! Ancak Facebook gibi yuzmilyonlarca kullanıcısı olan bir sistemde, erişim hızını kabul edilebilir seviyelerde tutmanın başka caresi de yoktur.


LAMP'ın Eksikleri

Bahsettiğimiz LAMP yazılım yığını programcılara pek cok esneklik sunar. Ote yandan LAMP yazılım destesi tamamen sorunsuz değildir. Programcılar sık sık sorunlarla karşılaşmakta, kendi aracları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 buyuk sorun, bizzat yarattıkları sistemin dev boyutlarıdır. Pek az internet servisi Facebook kadar karmaşıktır. Bu yuzden programcıların gittikce daha da buyuyen bu sitede karşılaştıkları sorunlar da coğu zaman kendine has, daha evvel pek karşılaşılmamış sorunlar olmaktadır.

Mesela PHP programlama lisanı bu boyutlarda bir uygulama duşunulerek hazırlanmış değildir. Haliyle Facebook'un ihtiyaclarını karşılamakta sık sık zorlanmaktadır. Bu yuzden de sık sık yeni araclar eklenmesi elzemdir.

Yine benzer bir şekilde, devamlı buyuyen ve şişen veritabanının ayakta kalabilmesi icin normalden daha fazla caba harcamak gerekmektedir. Facebook veritabanı, tum kullanıcılar arasında devamlı oluşan capraz ilişkilendirmeler nedeniyle inanılmaz bicimde karışıktır. Sisteme yeni bir sunucu ekleyerek depolama alanı sorununu cozmek, Facebook icin gecerli bir cozum değildir.

Perde Arkası

Buraya kadar saydığımız yazılımlar ve uygulamalar, Facebook'un gorulen yuzunu ayakta tutuyor. Ancak bir de daha geri planda calışan, ancak ozel istemle devreye giren pek cok alt uygulama var. Bunların buyuk kısmı Facebook'a ozel unsurlar ve gerektiğinde doğru aracları kullanarak yaratılmaları gerekiyor. Burada yeni uygulamaların oluşturulmasını kontrol eden uc temel doktrin var:

1) Yeni bir hizmeti ancak ihtiyac ortaya cıktığında hazırlamak ve sunmak.
2) Yeni hizmetleri rahat yaratabilmek icin, gerekecek aracları da beraberinde oluşturmak.
3) Amaca uygun programlama lisanını secmek ve kullanmak.

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

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

Scribe
Bizzat Thrift'in uzerine kurulu olan Scribe, pek cok farklı sunucudan gelen veri akışının kaydını tutmakla yukumludur. Bu kayıtlar ozellikle veritabanı yonetiminde onemli işleve sahiptir.

Cassandra da neyin nesi?

Facebook'un veritabanı ihtiyaclarının MySQL ile karşılandığını soylemiştik. Ancak MySQL tek başına yeterli değildir. Bu denli buyuk bir veritabanı icinde aradığınızı hızla bulabilmek icin ayrıca bir yoneticiye ihtiyacınız olacaktır. İşte Cassandra bu işe yarar. Facebook icinde yapılan aramaların başarıya ulaşması, Cassandra'nın pek cok sunucuya dağılmış olan verilen izini surebilmesine bağlıdır.

HipHop for PHP
Bu yazılımın ana amacı, PHP'nin yavaş kaldığı alanları guclendirmektir. Bunun icin Facebook'un ana web lisanı olan PHP ile yazılmış olan kodlar, HipHop tarafından C++ lisanına cevrilirler. Bundan sonra da doğrudan makine lisanında derlenerek, işlemlerin daha da suratli yurumesi sağlanır.

Hepsi Bu Kadar mı?
Facebook'un carklarını donduren ana yazılım ve uygulamaları kısaca anlatmaya calıştık. Tabii işin cok derinine inmeye sayfalar yetmez, ancak bu kadarı bile insana bir fikir vermeye yetebiliyor. Facebook ve benzeri servislerin sık sık ortaya cıkmamasının sebibini kolayca anlayabiliyoruz. Bu boyutlarda bir girişimin altından başarıyla kalkmak şuphesiz hic kolay değil.

milliyet / teknoloji


__________________