Nasıl algılamak ve "slashdotted" olmak yaşayabilir?

28 Cevap php

Anormal derecede yüksek trafik ani hayatta kalmak için iyi bir yolu nedir?

Temel HTML sayfaları, en az grafik, veritabanı üzerinde gereksiz bir yük koymak olabilir devre dışı widget'lar ve böylece-on geçin: Benim düşünce bazı tetikleyici de, benim web sitesi geçici bir "düşük bant genişliği" moduna geçiş gerektiğidir.

Benim düşüncelerim şunlardır:

  • CPU kullanımını izlemek
  • Monitör bant genişliği
  • Monitör istekleri / dakika

Edit: Ben statik içerik veya içerik dağıtım ağına geçiş, önbelleğe alma gibi seçenekleri ile tanıdık, ve benzeri bir araç olarak hayatta kalmak için, bu yüzden belki soru web sitesi üzereyken biri nasıl algıladığı üzerinde daha fazla odaklanması gerektiğini aşırı haline gelir. (Diğer hayatta kalma yöntemlerine cevaplar elbette hala bekliyoruz daha olmasına rağmen.) Web sitesi Linux ve PHP üzerinde Apache çalıştıran olduğunu söylüyorlar. Bu muhtemelen en yaygın yapılandırma ve insanların maksimum sayıda cevapları yardım kazanmak için izin vermelidir. Sağlar başka sunucu ve yük dengeleme satın alma gibi pahalı seçenekler kullanılamaz olduğunu varsayalım - çoğumuz için en azından Slashdot bir söz için hazırlanıyor para harcamak bir şey değil, bir kez-in-a-ömür boyu olay olacak, ve .

28 Cevap

Hiç kimse iyimserlik, önbellek ve yük dengesi hemen hemen her şey hayatta gerekir yük dengeleme ... HAProxy, vb bahsetti. Söyleniyor, ben stackoverflow bir yük dengeleyici arkasında ise emin değilim ;)

Bu akıllı önbelleğe alma ve düşük bant genişliği modları sadece bağlantı yeterli bant genişliği yoksa yararsız olabilir, bu yüzden sunucu bağlantısı yeterli yağ sağlayacağız söz değer. Örneğin, ev DSL bağlantısı barındırabilir etmeyin.

Ben slashdotted olma, tecrübe konuşuyor. Binlerce insan aynı anda ev arkadaşı George Foreman ızgara içine monte edilmiş bir bilgisayar fotoğrafları indirmek için çalışıyoruz çünkü hiç İnternet'e erişemez zaman eğlenceli değil. Güvenlik duvarı yok miktarı sizi kurtaracak.

Temelleri:

  1. Bir true, Windows guru sürece Windows üzerinde yüksek hacimli sitelerini barındırmak için çalışmayın. Bu yapılabilir, ama bu maliyet sorunu karşısında zaman.
  2. Her yerde yapabilirsiniz statik içerik (yani, hiçbir veritabanı sorgularını) kullanın.
  3. Cache-kontrol başlıkları hakkında bilgi edinin ve görüntüleri ve diğer statik varlıklar için düzgün kullanmak.
  4. Eğer, lighttpd ya da bir başka yüksek performanslı web sunucusu kullanabilirsiniz eğer en azından, Apache kullanabilirsiniz, ancak.

Gerçek cevaplar:

  1. Gerçekten SQL biliyorum, ve yavaş sorguları analiz zaman harcamak. En sayfa yükler düz sorguları bir saniyeden daha fazla ihtiyaç olmamalıdır.
  2. Yükleme gerçekten nerede olduğunu belirleyin. Bir medya-ağır bir site ise, (Akamai, ya da diğer bazı hizmet gibi) başka bir yerde içerik barındırma düşünün. Bir veritabanı ağır bir site varsa, çoğaltma düşünün.
  3. Sizin için çalışacak çoğaltma ne tür biliyorum. Eğer okuma-ağır site varsa, standart MySQL master / slave replikasyon ince olmalıdır. Eğer devam yazma bir sürü varsa, MySQL Cluster gibi, çok ana kurulum çeşit gerekir (veya 'geçişli' veya 'şelale' çoğaltması araştırmak) olacak.
  4. Eğer PHP çağrı önleyebilirsiniz - yani önbelleğe alınmış bir statik sayfa (HTML) kopya (Wordpress önbelleğe eklentileri çoğu ne olduğu) var. Apache çok daha hızlı, hatta basit merhaba dünya PHP komut daha statik dosyaları hizmet vermektedir.

"Flaş Kalabalıklar" sağ kalan yaklaşık Here's oldukça uzun ama son derece bilgilendirici bir makale.

İşte onların çözüm önerilerini ele durum için kendi senaryo:

Bu yazıda, biz garaj yenilikçi dediğimiz bir karakterin gözünden ölçekleme soru düşünün. Garaj yenilikçi, yaratıcı teknik anlayışlı ve iddialı. O web üzerinde Next Big Thing için büyük bir fikri vardır ve garajda oturan bazı yedek sunucularını kullanarak uygular. Hizmet ve çalışıyor zaman zaman yeni ziyaretçi çekiyor, reklam ve abonelik bazı yetersiz gelir yapar. Birgün, belki de onu site ikramiye isabet edecektir. Maybe it will reach the front page of Slashdot or Digg; maybe Valleywag or the New York Times will mention it.

Our innovator may get only one shot at widespread publicity. If and when that happens, tens of thousands of people will visit her site. Since her idea is so novel, many will become revenue-generating customers and refer friends. But a flash crowd is notoriously fickle; the outcome won't be nearly as idyllic if the site crashes under its load. Many people won't bother to return if the site doesn't work the first time. Still, it is hard to justify paying tens of thousands of dollars for resources just in case the site experiences a sudden load spike. Flash crowds are both the garage innovator's bane and her goal.

One way out of this conundrum has been enabled by contemporary utility computing.

Yazıda daha sonra garaj yenilikçi tür depolama dağıtım ağlarını kullanarak ve yüksek ölçeklenebilir veritabanları, uygulama gibi, atabileceğiniz adımlar bir dizi önerdi.

Ben coralCDN yoluyla yönlendirilecek birkaç popüler siteler tarafından belirtilen tüm URL'leri yeniden yazmak.

Apache için bir örnek:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_USER_AGENT} !^Googlebot
RewriteCond %{HTTP_USER_AGENT} !^CoralWebPrx
RewriteCond %{QUERY_STRING} !(^|&)coral-no-serve$
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?digg\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?fark\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?somethingawful\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?kuro5hin\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?engadget\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?boingboing\.net [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?del\.icio\.us [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?delicious\.com
RewriteRule ^(.*)?$ http://example.com.nyud.net/$1 [R,L]
</IfModule>

Bunu test stres sürece web sitenizin ağır yükler hayatta olup olmadığını bilmek için hiçbir yolu basitçe yok. siege gibi bir şey kullanın ve performans problemleri yalan yere bakın. Bu çok hızlı bir şekilde bellekte büyür mı? Bu eşzamanlı bağlantı bir grup ile yavaşlamaya başlıyor mu? Bu veritabanına erişmek için sonsuza alarak başlamak mı?

Performans sorunları yalan nerede biliyor sonra, o zaman onlardan kurtulmak meselesi haline gelir. Ne yazık ki, sizin özel durumunuza hakkında daha fazla bilmeden bundan çok daha fazla detaya, ama burada optimizasyonlar bahsediyorsun akılda tutmak zor. Eğer performans sorunları var BİLİYOR Böylece, sadece hareket etmelidir.

Ve ben mutlaka sadece bir kez bir ömür boyu olay için hazırlanıyor değil iddia ediyorum. DOS saldırıları hala olur, bu nedenle sitenizin slashdotted almaz bile yerinde hazırlıkları olması iyi.

Eğer içerik gziplemek eğer ben hemen hemen tüm durumlarda size yardımcı olacak kafamın üst kapalı düşünebilirsiniz tek şey. Bu bant genişliği tasarrufu ve tüm modern tarayıcılarda bir performans sorunu çok fazla olmadan destekleyecektir.

Içerik yazmak ya meraklılarının hitap edebilir bir hizmet vermemektedir ;)

Asıl soru "slashdotted gereken tek ve en etkili yolu nedir" olduğunu

Bu gerçek bir sorun varsa, siteme trafiği yönlendirmek.

Ben öncül yanlış olduğunu düşünüyorum: really really want slashdotted olsun, aksi takdirde ilk etapta bir web sitesi var olmazdı. Bir çok daha iyi bir soru nasıl ekstra trafik ele yapmak nedir? Ve hatta bu gerçekten iki soru olduğunu:

  1. Teknik olarak nasıl ek sunucu yük yönetirim?
  2. Umarım bazıları ayrılmamak alabilirsiniz böylece nasıl, yeni kullanıcıları selamlıyorum mi?

Slashdot teslim alma asla demek, sadece sıkıcı olmayan geek içerik yazmak.

Bir slashdotting gelen trafik dayanacak istiyorsanız, web sunucusu ... Apache hakkında daha bize? IIS? Diğer?

Bulut koy!

Bu muhtemelen kişisel bloglar vb için uygun değil ama büyük siteleri için hosting bu çözecektir bulut. Örneğin Amazon EC2, bu strateji hakkında bir şey bu para bir ton mal olacak olması.

Tüm görüntüler için bir CDN kullanarak daha küçük bir ölçekte, / statik içerik tekrar fiyat önemli değerlendirmek, biraz da yardımcı olabilir. Amazon S3 i en çok duymak CDN.

Yüksek trafik deneyimi siteler için, Akamai kendi altyapı rağmen sitesi, hızlı olağanüstü ölçeklenebilir ve güvenilir yapmak için iyi bir çözümdür. Akamai sitenizin dünyada yerleri önbelleğe alacak bir servis (ücretsiz değil). Son işimde, e-ticaret katalog onlara ve bizim sunucuları üzerinden önbelleğe alınmış aşağı gidebiliriz ve onların sepetinize ekleyerek denedim sürece kimse bilemez. Ayrıca, bizim görüntü sunucuları kez aşağı gitmek vardı ve Akamai önbelleğe alma yine bizi kurtardı.

Popüler hale asla.

Bu işe olsa, gerçek yararlı değil. Eğer çok kısa üzerinde ölçeklenebilir altyapı gerekenler. Google Gears ya da Amazon'un web servisleri gibi bir şey bile Slashdot Google veya Amazon boğmak için gitmiyor, çünkü bunun için ideal görünüyor. İsterseniz kendi sunucu ağ sağlayıcısı herhangi bir önceden ayarlanmış bant genişliği sınırı sizi kesmek için gitmiyor emin olun. Sadece ani sivri işlemek için herhangi bir gevşeklik olmadan normal trafiği taşımak için süzme değiliz ki yeterli donanım satın.

Bu yapıldığında, ya da en azından yardımcı olabilir yolları vardır. "Slashdot-kanıt" için Google arama ve bunları bir dizi bulabilirsiniz:

  • Slashdot-proof your server with FreeCache - Boing Boing
  • Simple Thoughts Blog is now Slashdot Proof

vb

Ben sadece failed Bu bir grin düşünüyorum

Önbellek ... zor. Bir başak oluşursa rekor vurur, ve, sayfa varlık hit tamamen statik bir kopyasını yazmak, o hizmet vermektedir. İyi bir önbellek sistemi ile 100-2 DB sorguları Kesme zayıf slashdotting yaşayabilir, ama herhangi bir DB sorguları sahip hala hazır değil, ciddi bir yük altında ölü bir site neden olur.

Içerik beni biraz güncel fazla fakat daha hızlı erişilebilir olabilir ki DB önbelleğe düzeyini artırın. İçerik% 100 tutarlı olması zorunda değildir Doğal olarak, bu geçerlidir.

Ayrıca Nagios sunucu sağlığını izlemek için kullanabilirsiniz. Gereksinimlere dayalı, belirli koşullarda, web siteniz için modları geçmek için varolan bir SQL dosyası tetikleyebilir.

Örneğin, "'düşük' = UPDATE settings_table SET bant genişliği;" add SQL dosyası içine ve mysql bunu çalıştırmak ve şartlar normale geri döndüğümde tam tersini yapmak.

nearlyfreespeech.net tabiri caizse bir yarı-bulut ve bu gibi durumlarda bir ton yardımcı olur. Yukarıda Diğerleri belirtildiği gibi, katmanlı önbelleğe çok yardımcı olur. Yerine veritabanı memcached bilgilerin parçaları çekin, bir ters proxy var önünüzde (veya CDN aka dağıtılmış ters proxy, Panther Ağlar ucuz).

netstat -plant | awk '$4 ~ /:80\>/ {print}' | wc -l

Bu size Apache sunucu için tüm bağlantıları gösterecektir. Sen Apache hizmetine bağlantıların toplam sayısını hesaplamak ve belirli bir eşiğe ulaştığında bir uyarı verecektir, bir CGI komut dosyası oluşturabilirsiniz. Ne bu noktada yapmak için başka bir soru.

Umarım sunucu hazırlanır.

Önbelleğe kullanın!

Eğer WordPress kullanıyorsanız (örneğin), sen WP-Super-Cache gibi bir şey kullanabilirsiniz. Düzenli PHP kullanarak ediyorsanız memcache dahil kullanabileceğiniz seçenekler hala bir dizi vardır. Yoksa sadece normal squid style önbelleğe kullanabilirsiniz.

Kullandığınız herhangi bir önbellek sitenizin :-) (veya slashdot / digg-proof) kurşun geçirmez yardımcı olacaktır

Ben Digg ile onlara ulaşabilirsiniz biliyor ve onlar da sizin sitenizi kara listeye talep. Muhtemelen Slashdot ile aynı yapabilirsiniz.

Eğer inşa tüm sayfalar, hiçbir veritabanı statik ve görüntüleri kullanmayın emin olun.

Aslında, burası kötü yapmıyor.

Önbellek verileri.

Aynı her yükü görüntülenir alır şey görüntülemek için veritabanına gereksiz Gezileri bir sunucu öldürür budur. Bir dosyaya çıktı yazmak ve bunun yerine kullanın. Çoğu CMSS ve çerçeveler inşa önbelleğe sahip (ama bunu açmak için var) ama kendi çalışırken en zor bir görev değildir.

Istek mercan CDN olmadıkça, Coral CDN otomatik yönlendirme.

Bu yapıldığında, ya da en azından yardımcı olabilir yolları vardır. "Slashdot-kanıt" için Google arama ve bunları bir dizi bulabilirsiniz:

vb

. Htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} slashdot\.org [NC]
RewriteRule .* - [F]

Tek kelime: Knipex