Siteniz iyice büyüdü ve S.O.S vermeye mi başladı? O halde lütfen okumaya devam edin..

Aah aaahh nerede o eski güzel günler: Hani sizin için büyük anlamlar ifade eden web sitenize girdiğinizde; anında sayfaların açıldığı, resimlerin bir çırpıda geldiği sayfalar arasında dolaşmanın göz açıp kapamaktan daha hızlı olduğu o güzel günler…

Kendi ekibinizi kurmuştunuz, iş planlarınızı hazırlamıştınız ve büyük bir hevesle sitenizi açarak Internetteki yerinizi almıştınız. Hiç bir masraftanda kaçınmamıştınız, hatta kendi yazılımcılarınıza yazdırmıştınız ve yine birkça U luk sunucular satınalmıştınız.. Anlaşma yaptığınız datacenter a sunucularınızı yerleştirmiştiniz.

Siteyi yayına aldığınızda, ilk öngörünüze göre ziyaretçi sayınız ve işlem sayılarınız fazla olmayacaktı bununla birlikte zamanla sitenizin bilinirliliği artacak ve sizde ona göre sitenizin alt yapısını iyileştirecektiniz. Önce bir iş yapsın sonra alt yapıyı iyileştiririz, hiç olmassa kodları yeniden yazdırırız ya da piyasadaki en iyi sunucuları alırdınız yine olmassa yurt dışından sunucu getirtebilirdiniz..

Aradan birkaç sene geçti.. Tanındınız.. Ziyaretçi sayılarınız, günlük sayfa gösterimleriniz tahminlerinizi bile alt üst etti.. İlk açıldığınız haftada günlük ortalama 100-200 sayfa gösterimi yapıyordunuz bununla birlikte aradan geçen 3 yılın sonunda günlük ortalama 1 milyon sayfa gösterimi yapar hale geldiniz.. Sitenize de yeni özellikler eklediniz..

Ve zaman içinde farkettinizki o şıp diye açılan siteniz eskisi kadar hızlı cevap vermiyor. Hız sorunlarını, kesinti sorunlarını aşabilmek için ilk iş olarak mevcut yapıda daha etkin cache yapısı kullanmaya çalıştınız.. Mümkün olan herşeyi  cache lediniz ve veritabanına daha az istekte bulunmaya çalıştınız. Başarılıda oldunuz.. Ama bir süre! İstek çeşitliliği arttıkça cachle işleminin veriminin düştüğünü ve yine veritabanına yüklendiğinizi farkettiniz.

Veritabanı sunucunuzun işlemci ve ram kullanma oranlarının çok yükseldiğini gördünüz. Baktınız ki 8GB ramli çift işlemcili veritabanı sunucunuz fiziksel olarak yetmez hale gelmiş. Bir yileştirme hamlesi olarak daha iyi bir sunucu almaya karar verdiniz. 8GB den 16GB ramli 4 işlemcili daha pahalı bir sunucu satın alıp veritabanınızı o makineye taşıdınız. İşe yaradı da! Siteniz tekrar hızlı cevap verir hale geldi. Veritabanınızdaki takılmalar azaldı. Ancak aklınızda bir soru işareti oluştu… Ya gün gelirde bu sunucu da yetmez hale gelirse ve siteniz yine yavaşlarsa ne yapardınız!!! İçinizden bir an için daha da iyi makine alırım diye geçti ama gün gelipte o da yetmezsse ne yaparım endişesi iyice içinizi kapladı.. Özenle kurduğunuz büyüttüğünüz bir noktaya getirdiğiniz ve çook rağbet gören siteniz, tamda bu sebeple çook rağbet görmesi sebebiyle çökecek miydi.

Veritabanı sunucusunun çalışacağı sunucuyu daha kuvvetli makinede çalıştırmaya başladınız ancak bu durum sizi tatmin etmedi halen endişeliydiniz bir çözüm bulmalıydınız ve buldunuz da! Evreka!

Bir yerlerden öğrendiniz ki Master-Slave yapısı diye birşey varmış. Tüm kaydedilecek bilgileri Master veritabanına kaydedebileceğinizi, tüm okuma işlemlerini ise Slave Veritabanı sunucularından yapabileceğinizi öğrendiniz, hemen yazılımcılarınızla küçük bir istişare toplantısından sonra kararınızı aldınız: Master-Slave Sunucu yapısına geçiyoruz!

Master-Slave yapısı bir hızır gibi imdadınıza yetişti. Sanki tam da aradığınız şeydi. Her derdinizin devası gibi.. İyice yavaşlamış sitenizin tüm kodlarını taradınız ve tüm INSERT leri master a tüm SELECT leri ise Master ile aynı bilgilere sahip olan SLAVE lere gönderdiniz. 1 Master, istediğiniz sayıda Slave sunucu! Gayet esnek bir yapı gibi gözünüze göründü. Veritabanı sorgu isteklerini karşılayamadığınızda Slave sayınızı artırırdınız ve sorunu çözerdiniz.

İlk önce 1 master, 2 slavele bu yapıyı kurguladınız, sonra slave sayınız 3,4,5.. giderek arttı. Bu yapı sizi ilk başlarda çok memnun etmişti.. yaklaşık 2-3 yıl sizi idare etti de.. Ancak sorunlar yine baş göstermeye başladı.. Siteniz bir hayli büyüdü günlük sayfa gösterimleriniz 1 milyon lardan 15-20 milyonlara ulaştı.

Bu arada Master ve Slave sunucularınızı da değiştirdiniz. 16 CPU lu 128 GB ramli master sunucunuz oldu.. Diğer Slave veritabanı sunucularının da donanımlarını iyileştirdiniz 8CPU lu 64GB ramli sunuculara geçtiniz.


Web sitenizin yaşam çevriminin bir bölümü muhtemelen yukarıdaki senaryoya uygun olacaktır. Yukarıdaki yöntemi isimlendirmek gerekirse kabaca “Scaling Up” yani dikine büyüme diyebiliriz. Bu senaryodaki temel tutum her defasında daha iyi sunucu alıp eskisinin yerine koymak şeklindedir. “Scaling Up” yaklaşımının alternatifi “Scaling out” yaklaşımıdır. Enine büyüme olarak da ifade edebiliriz bu yaklaşımı.“Dikine Büyüyen Kümesteki Kartal” başlıklı yazı dizisi Scaling Up ve Scaling Out sistem mimarileri üzerine bir seri olacaktır. Serinin sonunda Scaling Out mimarisinde bir sistemin tasarlanması için temel noktaları gösteren tasarımı da sunacağım. Geleceğe yönelik çok büyük bir site kurma hayaliniz var; ancak  ileriki tarihlerde bir yerde yoğun trafiğe cevap verememesinden, tıkanıp kalmasından endişe ediyorsanız bu yazı dizisi tam size göre… Tasarlıycağımız temel mimari ile aylık milyonlar mertebesindeki sayfa gösterimlerinden trilyonlar mertebesine çıkabilmeyi garanti ediyorum..

Orhan DOĞAN
Yazılım Mühendisi
od@orhandogan.us