Archive for the 'Web' Category

Sitelerdeki Örümcek Sorunsalı

SpiderBir süre önce site istatiklerine bakarken son 24 saat içinde normalden %30–%40 daha fazla trafik olduğunu görüp sorunun ne olduğunu çözümlemeye karar verdim.

downloadready.com un google’da indeksli (allinurl:.downloadready.com ) 206.000 sayfası var, bir kaç popüler sitem daha var ki, Google tarafından aranabilen ortalama 1.000.000 sayfa içeriğin sahibiyim. Bu durumda robotların sitede dolaşmalarında bir sorun olmamalı diye düşünülebilir.

Ancak olayın aslının başka olduğunu anlamam çok uzun sürmedi. Internet Bant genişliği ve sunucu donanımı fiyatları ucuzladıkça yeni bir Google oluşturma hayali ile her önüne gelen spider yazıp Internet alemin “salmaya” başladı. (spider: web sitelerinin içeriklerini tarayarak yerel veritabanına kaydeden program, ağda gezen örümcek)

Normalde site yöneticileri spider’ların siteye gelmesinden mutsuz olmayabilirler. Çünkü sitenin indekslenmesi başka ziyaretçilerin siteyi farklı yollarla bulması demektir. Ancak eğer indekslenen siteler hiç bir yerde yayınlanmıyorsa? Heves ile işe başlayıp sonra bu işin ne kadar zor olacağını ve Google ile başedilemeyeceğini anlayanlar teker teker bu işi bırakıyorlar. (Altavista nın geçmişteki ihtişamını ve bugün arama içeriğini kimden aldığını düşünün) Ama işi bırakıncaya kadar da boşu boşuna Internet bant genişliği harcıyorlar.

Kim ne derse desin bant genişliği hala çok kıymetli. Hele ki sayfalar dinamik olarak üretiliyorsa (dinamik sayfa üretmeyen site kaldı mı?) o zaman

gereksiz sorgu=bant genişliği+işlemci gücü+hafıza kullanımı

demek. Ben bilgisayarımın kaynaklarını boş yere kullandırtmam! diye düşündüm ve şunları yaptım.

1. Trafiği hangi robotların yaptığını izleyin. Bunun için en ideal yol raw web log larını kullanmak (raw log: işleme tabi tutulmamış metin dosyası. access.log ismi ile kaydedilmiş olabilir) Bu dosyaya bakınca:

64.1.215.166 - - [08/Feb/2008:00:12:10 +0200] “GET /index.htm HTTP/1.0″ 200 145933 “-” “Mozilla/5.0 (Twiceler-0.9 http://www.cuill.com/twiceler/robot.html)”

Arka arkay sürekli dosya okuyan ve bu işlemi çok kısa aralıklarla yapan programlar spider ya da robot olarak adlandırılır. İlk bakışta benim tespit ettiğim gereksiz robotlar: searchme, majesctic12 ve cuill oldu.

Majestic adı verilen robot, bant genişliği ve donanım kaynakları bağışında bulunan gönüllüler tarafından yürütülen bir “dağıtılmış ağ” çalışmasıymış. Bir kulanıcının bir günde 230 GB. bant genişliği hediye ettiğini görünce bu robotu bloklamak “farz” oldu.

2. Her 3 örümceğin yazarına e-mail atarak IP adres bloğumu belirttim ve bu ip adresindeki sitelerin taranmamasını rica ettim. Sadece cuill den cevap geldi ve robots.txt dosyasına cuill robotunu eklemem istendi.

User-agent: Twiceler
Disallow: /

gibi bir satırla, güya artık cuill robotu benim sitemi indekslemeyecekti. Dediklerini yaptım ve diğer robotlarla birlikte robots.txt dosyasında robotları belirttim. Aradan geçen 1 hafta içerisinde robots.txt dosyasını okuyan robotların sadece işi kuralına göre yapan büyük robotlar olduğunu anladım. Yani maalesef bu yol işe yaramadı.

3. IPTables ile işi kökünden çözmeye karar verdim. Uygulama düzeyindeki çözümler maalesef işi spider ın insiyatifine bırakıyordu. IPTables kernel tabanlı bir paket filtreleme ve yönlendirme programı, tüm modern linux işletim sistemi çekirdeklerinde destek yüklü gelmekte.

[root@ns ~]# iptables -L

komutu ile iptables in yüklü olup olmadığını, yüklü ise hazırda verilen kuralları görebilirsiniz.

iptables ile yapabilecekleriniz saymakla bitmez, en temelinde paket filtreleyici olarak kullanabilirsiniz. Bir kaynaktan gelen, bir kaynağa giden, bir porta gelen, bir protokol ile gelen… paketleri kabul edebilir, reddedebilir ya da yönlendirebilirsiniz. Bir kaynaktan gelen paketleri filtreleyerek istemediğiniz IP adreslerinin bilgisayarınıza bağlanmasını da engelleyebilirsiniz, spider lar dahil!

iptables -I INPUT -s Engellenecek.IP.Adres.i  -j DROP

komutu ile istediğini IP adresini engellersiniz. Ben siteme gelmesini istemediğim bu 3 robotu engellemek için:

iptables -I INPUT -s 208.111.154.16  -j DROP
iptables -I INPUT -s 205.209.158.200  -j DROP
iptables -I INPUT -s 38.99.44.105  -j DROP

komutlarını verdim, sonuçları ise:

[root@ns ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
DROP       all  –  crawl-14.cuill.com   anywhere
DROP       all  –  205.209.158.200      anywhere
DROP       all  –  crawl2.nat.svl.searchme.com  anywhere

Google ya da Yahoo! nun tekel olması taraftarı değilim, bunların karşısındaki hakia türü oluşumları da destekliyorum. Ancak robotların oyunu kuralına göre oynamaları ve en azından 100 de 3 geri dönüşüm sağlamaları gerekiyor ki, onlara katlanmaya devam edebilelim.

Edit (23 Mayıs 2008): 
Paylaşılan sunucu kullananlar, Iptables kullanamadıkları için bu robotları bloke edemeyeceklerini söylediler, aynı işi yapabileceğiniz bir diğer yöntem ise .htaccess dosyası kullanmak:

webroot unda .htaccess dosyasının içine:

RewriteCond %{REMOTE_ADDR} ^IPAdresi$
RewriteRule ^.*$ http://www.google.com/ [L]
RewriteCond %{REMOTE_ADDR} ^208.111.154.16$
RewriteRule ^.*$ http://www.google.com/ [L]

gibi bir tanımlama ile IP Adresinden gelen bağlantıları google a yönlendirebilirsiniz.

Bazı kişisel robotlar da, sitenin kaynaklarını acımasızca kullanabiliyorlar. Örneğin wget ile bir site baştan aşağıya indirilebilir. Bunu engellemek için ise:

RewriteCond %{HTTP_USER_AGENT} ^(wget|FlashGet|….)  [NC]

gibi bir tanımlama yapabilirsiniz.

“Site Besleme” lerinizi Yakın!

RSS FeedBurn your feeds” daha farklı nasıl yazılırdı bilemiyorum ama galiba aslında “anladınız siz onu”.

Her blog sitesinin RSS feed i vardır. Dahası yeni nesil web tabanlı yayınlama araçlarının tamamı RSS feed desteği sunuyorlar. Arama motorlarının spider ları ya da bu amaçla özel geliştirilmiş robotlar düzenli olarak ya da çağrıldıklarında aslında basit bir XML dosyası olan feed dosyasını okuyarak site de güncel ne var ne yoksa toplayıp veritabanlarına dahil ediyorlar.

Sitenizi güncelledğinizde (örneğin yeni bir giriş yaptığınızda) feed dosyası otomatik güncellenir ve XML RPC ping sunucusuna “Ben güncellendim, gel bak” bilgisi gönderilir. Bunu otomatik olarak yapan bir programa sahip değilseniz web tabanlı ping formlarını kullanabilirsiniz.  Örneğin http://pingomatic.com/ en bilinenlerden.

Ayrıca aşağıda benim kullandığım ping sunucularını görebilirsiniz.

http://ping.feedburner.com/
http://rpc.technorati.com/rpc/ping
http://api.moreover.com/RPC2
http://blogsearch.google.com/ping/RPC2
http://ping.weblogalot.com/rpc.php
http://rpc.pingomatic.com/
http://rpc.weblogs.com/RPC2

downloadready.com un feed leri www.downloadready.com/news/feed.xml adresinde duruyor. Günlük  yaklaşık 5000 kişi tarafından okunuyor veya erişiliyordu. Son 50 programa ait veriler ve XML tagları ile siteye ciddi trafik getirmesi ve site erişimini yavaşlatması ciddi bir dezavantajdı.

FeedBurner

Bu nedenle site feed lerini www.feedburner.com ile yakmaya karar verdim. Sisteme üye olduktan sonra, feed URL sini girerek şu iki ayarı yaptım:

1. Publicize / Ping Shot servisini aktif ettim.

2. Feed Count / Activate. Burada gelen kodu siteye yapıştırdım:

<p><a href=”http://feeds.feedburner.com/downloadready”><img src=”http://feeds.feedburner.com/~fc/downloadready?bg=99CCFF&fg=444444&anim=1” height=”26″ width=”88″ style=”border:0″ alt=”" /></a></p>

downloadready.com un .htaccess dosyasında ise:

RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule news/feed.xml$
http://feeds.feedburner.com/downloadready [R=302,L]

(FeedBurner dışındaki robot ve programlar feed dosyasını feedburner.com dan okusun, bu dosyayı okumaya gelen Feedburner robotu ise sitedeki feed lere ulaşabilsin)

SONUÇ:

1. Siteye artık günde en az -7000 request yapılıyor. Sunucu yoğunluğu ve trafik kaybı engellendi.

2. Feedburner robotu her 10–30 dk. da bir feed dosyasını ziyaret ederek yenilik varsa diğer feed robotlarını da (google dahil) durumdan haberdar ediyor.

3. Feed e erişim ve klikleme detaylarını istatistik olarak takip edebiliyorum.

4. Lokal Feed dosyasına erişim sorunu olduğunda FeedBurner beni otomatik uyarıyor.

5. Ben kullanmıyorum ama Feedburner Advertising Network ile adsense hesabı kullanılarak reklam girilebiliyor.

FeedBurner.com u kullanan 650.000 publisher dan biriyim ve bugün olsa yine kullanırım!

 

Tags: , , ,