Elektriklikedi’de yazdıklarımı yavaş yavaş buraya da alıyorum.

Konumuz çok trafik alan bir sitede bandwidthten tasarruf yolları. Büyük ihtimalle kullanılan multimedia içerikleri olabildiğince sıkıştırmak, statikleri GZIP ile sıkıştırmak, değişmeyen dosyalara 304 dönmesi için mod_cache kullanmak vb. bunları biliyorsunuz. Benim işim bilinmeyenlerle.

Hazır Javascript kütüphaneleri (Prototype, jQuery, MooTools, YUI vb.) kullanıyorsanız illa ki rastlamışsınızdır; sitelerinde minify edilmiş JavaScript kodları indirme linki bulunmasının yanı sıra, bir de prodüksiyon ortamına hazır linkler bulunur. Genellikle adresleri cdn. şeklinde başlar. İşte burada bir CDN yani Content Delivery Network ile karşı karşıyasınız demektir. Uzunca CDN’in yararları hakkında konuşmayacağım; genel olarak bir CDN dünya çapında sunucuları bulunan ve ilgili dosya çağrıldığında geotargeting kullanarak size fiziksel olarak en yakın sunucusundan ilgili datayı pompalayan bir servistir. Başlıca kullanım sebebi hız ve erişilebilirlik (availability) tir. Düşünün, jQuery libraryini sitemize bağladık diyelim CDN’lerini kullanarak. Sayfa her load edildiğinde dosya tarafımıza inecek. Hem de sayfada libraryin hazır hale gelmesini bekleyen bir ton kod olduğunu düşünürsek; bunun oldukça hızlı olması beklenir. Bir de bunu webmasterları benim gibi jQuery kullanmayı tercih eden siteyi dünyadaki binlerce hatta milyonlarca kişinin aynı anda çağırdığını düşünelim.

Diğer bir durum Akamai tarzı media server hizmetleridir, özde CDN olmalarına rağmen bu tarz yerler hakikaten “media” delivery etmek üzerinedir; zengin multimedya dosyalarını dünyadaki içeriğe aç internet kullanıcılarına bitmez bir bandwidth ile pompalarlar.

Tabii bunların hepsinin güzel bir de ücreti var.

Fasulyenin faydalarını saydık.  Sadede gelelim.

Örnek üzerinden gidelim, son projemiz “Bir Özür Dileme Projesi” deli gibi hit alıyor. Hele ki Habertürk’te 30 dakika boyunca siteden bahsedildiğinde Apache’deki o kaçınılmaz son olan “server ran out of threads to serve requests” gerçeğiyle bile karşılaştık… Ki sunucu tarafımdan optimize; makina da baba sayılır.. Digg’den bile paçayı kurtarmıştı, TV yemedi.

İçerik olarak az metin, çok görsel var. Bir kişinin tüm siteyi gezmesi bize 1.5MB civarı yük getiriyor ki, fazla ve gereksiz bir yük. Önümüzde iki seçenek vardı. Birincisi lighttpd tarzı “light” bir server daha kurup; statikleri oradan pompalamak. Uzun vadede gerekli bir çözüm, fakat acil çözüm gerektiğinde (TV’de şöyle iyi böyle güzel diye anlatılırken sitenin açılmadığını düşünün) yetersiz.

Bana da acil çözüm gerekliydi. Ne yaptım; ücretsiz CDN kullandım. Coral CDN.

http://www.coralcdn.org/ adresinde zaten ayrıntılar var. Too good to be true duruyor fakat denedim, doğru. Kullanım da acayip basit. Hatta kendi sitenizin sonuna .nyud.net ekini ekleyerek çatırt diye kullanmaya başlayabilirsiniz.

E tabi gireceklere adresi sonunda nyud.net varken vermek pek akıl karı değil. Sık değişme ihtimali olan sayfaları da komple cachedan vermek de öyle. O zaman biraz Voodoo büyüsü yapmamız gerekiyor..

“ Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. ”
— Brian Moore / bem@news.cmc.net

Evet, mod_rewrite tabii ki..

RewriteEngine On
RewriteBase /

# Coral
RewriteCond %{HTTP_USER_AGENT} !^CoralWebPrx
RewriteCond %{QUERY_STRING} !(^|&)coral-no-serve$
RewriteRule ^images/(.*)$ http://%{HTTP_HOST}.nyud.net:8080/images/$1 [R,L]

Evet, bunu .htaccess dosyanıza yapıştırdığınızda büyülü olarak tüm images klasörünüz Coral CDN üzerinden host ediliyor. Biraz büyüyü açıklayalım ki ülke kazansın..

Satır No’suna göre açıklama
1: HTTP User Agent CoralWebPrx Değilse
2: VE querystring olarak coral-no-serve gelmemişse
3: Kişinin tüm images klasörü altındaki requestlerini Coral’a yönlendir.

1 niye var? Basit; olmasa sonsuz döngü oluşurdu. Coral CDN’in çalışabilmesi için ilgili dosyayı sizden indirmesi lazım malum. O satır olmasa Coral’ı da kendine yönlendirmiş olacaktınız; patlardı. 2 de benzer bir sebepten orda.

Bu satırlarla beraber ortalama 1MB civarı olan kullanıcı başına harcadığımız bandwidth, düştü 100KB’a. Sizden resim isteyen tüm kullanıcılara ufacık tefecik bir 302 redirect gidiyor (301 kullanmayın patlarsınız arama motorlarında); içeriğin babasını Coral serve ediyor.

Üstelik sırf imaj için de değil. Örneğin yazılımınızın yeni versiyonu çıktı. Binlerce kişi de kullanıyor, çok seveni var. Zaten akıllı bir programcı olarak yazılımınıza auto update ve version check özelliği eklemiştiniz. Dolayısıyla bugün programınızı açan kullanıcılar yeni güncelleme olduğunu gördü. Hemen de indirmek istediler tabi. Yazılım installerınız da olsun 6MB.

1000 kişi kullansa oldu 6GB; çoğunun da aynı anda indirmeye yüklendiğini düşünürsek bandwidthinizin sağlam olması lazım. Ama shared hostingde barınıyorsunuz; aylık limitiniz 10GB. Ne yapacaksınız?

Burada bazı akıllı geçinen kişiler gidip programlarını rapidshare’a atıyorlar, üç beş de puan kazanırız hesabına. Sen kullanıcına değer vermezsen, kullanıcı ne yapsın seni. Zaten rapid de puan işini kaldırdı. Dolayısıyla kullanın Coral’ı, rahat edin.