Yüksek trafik alan bir web sitesini ölçeklendirmek için ne yapmalıyım?


14

Kapasitenin üstesinden gelmek için "ölçeklendirilmesi" gereken bir web sitesi için hangi en iyi uygulamalar yapılmalıdır? Bu, özellikle insanların bulutu düşündüğü için önemlidir, ancak temelleri kaçırıyor olabilir.

Geliştirme düzeyi görevlerden altyapıya ve yönetime kadar en iyi uygulamayı düşündüğünüz her şeyi duymak istiyorum.



Windows Server App Fabric ve önbelleğe almayı bilen biri buraya bir şey gönderebilir mi? Bu alanda uzman değilim ve daha fazla bilgi edinmek istiyorum.
goodguys_activate

AppFabric hakkında ne bilmek istersiniz?
Henrik

Bir Web Sitesinin Ölçeklendirilmesi, göz atma

Yanıtlar:


16

Eşzamanlılık için Tasarım

Yani, kodlarken, birden çok iş parçacığının devam etmesini planlayın. Paylaşılan durumu planlayın (genellikle sadece db). Birden çok işlem planlayın. Fiziksel dağıtım planı.

Bu, sisteminizi birden fazla makineye ve yük dengelemeli birden çok işleme dağıtmanıza olanak tanır. Arıza durumunda yedekli işlemlerin çalışmasını sağlar ve sistemi yerinde değiştirmeniz gerekirse, bunu yapmak için tüm hizmetleri öldürmeniz gerekmez.


13

Düşünebileceğiniz birkaç şey:

  • Veri depolamanızın okuma ve yazma taraflarını ayırma.
    • CQRS / Etkinlik Sağlama
    • CQS
    • Mesaj geçirme / aktörler
  • Paylaşılan işlemden ve iş parçacığı durumundan kaçınma
    • Böylece kilitlenmeyi önler
    • Değişmez olmak için sınıflarınızı, yapılarınızı ve diğer veri türlerinizi oluşturarak, yani inşaattan sonra değişmeyen tür sistemiyle bunu önleyebilirsiniz. Özellikle karmaşık soyut veri türleri için şaşırtıcı derecede iyi çalışır (örn. JQuery'nin uygulaması)
  • ES'de web sunucusu iş parçacıklarını engellemiyor. ASP.Net kullanıyorsanız, APM kalıbı / göreve paralel kitaplık (TPL) ile eşzamansız sayfaları / eylemleri kullanın
  • Kullanıcı oturumu sözlüğünde çok fazla durum kaydedilmiyor
    • IIS'de iş parçacığı taşıma işlemleri gerçekleştiğinde bunun iş parçacıkları arasında taşınması gerekir.
    • Güvenli olmayan / statik kaynaklar, ek yük getiren aynı uygulama çerçevesi (örn. ASP.Net) ile sunulmayacak şekilde akıllı yönlendirmeye sahip olmak. Örneğin, farklı web sunucularına sahip olun.
  • Eşzamansız iş akışı paterni ile devam eden kod yazma (örn. Bind (haskell) /callcc/Tasks.ContinueWith/F#'s async)
  • Darboğazlarınızın nerede olabileceğini hesaplamak için kuyruk teorisini kullanın
  • Okumak modelleri ve diğer uygulama durumları için çekme tabanlı güncellemeler yerine push-update kullanın. Örneğin RabbitMQ / nServiceBus aracılığıyla
  • Uygulanabilir en az özellik olan 'http handler'ı kullanın
  • Statik dosyalar için, web altyapısının gerektiği gibi çalışmasını sağlamak için e-etiketler ve önbellek sona erme politikaları sunun (örneğin kalamar proxy'si ile)
  • (Ölçekleme sorunlarını çözmeme ve yerinde öğreticiler almama izin ver;))

4

Hiçbir şey mimarisi.

Bunu göz önünde bulundurarak ve düşündüğünüzün aksine, hemen bir ölçeklendirme çözümüne atlamayın. Sistem dışı ek yük ile sistem içi çağrı karşı düşük tartılmamalıdır. Örneğin, herhangi bir ağ arabiriminde bir DB bağlantısı kurmak yerel bir arama yapmaktan çok daha uzun sürer. Gerçek bir büyük sistem için ölçeklendirme dışında ekstra $ 'a kadar yönetim, güç ve ayarlama çabalarında ne kadar zaman gerektiğini belirleyin.

Ne olursa olsun, "hiçbir şey paylaşma" mimarileri hala büyük bir değer var ve zaman geldiğinde sistemlerinizi katman ve ölçeklendirebilirsiniz.


0

Birkaç ana makine adı üzerinden istekleri paralel hale getirin

HTTP standardının bir kısmı, web istemcilerinin DNS Ana Bilgisayarı için en fazla 2 oturum isteyeceğini söyleyen bir bölümdür. Siz ve takma adınızı www.domain.com adresinizi eklediğiniz ve sayfanızın daha hızlı yüklenmesini sağlayan daha yüksek bir istek eşzamanlılığı elde ettiğiniz bir çözüm:

/programming/3653609/how-do-i-code-my-asp-net-page-to-parallelize-downloads-across-hostnames

Temel olarak, ASP.NET HTTP İşleyicinizi, istemcilere gönderdiğiniz hedef ana bilgisayarları değiştirmek için düzenlemeyi içerir;


1
Bu yanıtın istemci tarafı performansı ile ilgisi vardır ve sunucu tarafında ölçeklendirme ile ilgisi yoktur.
Ken Liu

HTTP aracılığıyla diğer veri kaynaklarını bir araya getiren bir orta katman çizgisi üzerinde daha fazla düşünüyordum. Azure Tablosu, OData sadece bazı örneklerdir ... Demek istediğim, yine de, tarayıcıya (javascript) ne yapacağını söyleyen sunucudur.
goodguys_activate

0

Güvenli, Hızlı, Güvenilir DNS

Kayıt şirketinin DNS sunucusunu kullanarak, çalışma süresi veya performans için SLA'sı olmayan birkaç yüksek kapasiteli web sitesi buldum. Buna ek olarak, sunucuları Hindistan'da bulunuyordu ve gecikme yalnızca bir DNS spoofer'ın müşterinizin veya ara ISS'nin önbelleğini zehirleme şansını arttırıyor. Bu, SSL korumalı trafiğinizin bile kimse bilmeden yönlendirilmesine neden olur.

DNS hızı, kayıtlar önbelleğe alınmadan önce sunucunuzun ilk yükleme süresini de etkiler.

DynDNS veya Neustar'ı müşterilerimin çoğuna oldukça sağlam bir DNS altyapısına sahip oldukları için kullanıyorum (pahalı olsa da ve bu şirketlerle başka bir bağlantım yok).


2
Hata ... DNS gerçekten sizin için ciddi bir darboğaz mı? Bunun en son optimize edilen şeylerden biri olacağını düşünürdüm.
Fishtoaster

@Fishtoaster - Kısmen düzenlenmiş parça. Aslında bir Sysadmin'im ve DNS güvenliği SSL doğrulamasında büyük rol oynuyor. DNS bağlantısı ve performans sorunları şu şekilde ortaya çıkar: SOA'ya BGP yönlendirme sorunları, Anycasting (CDN'ler için) ile ilgili sorunlar, gecikme sorunları, önbellek zehirlenmesi ve daha fazlası. Yakında internete koyacağım bir DNS en iyi uygulama tarama aracı (tel düzeyi) yazdım. Bahsettiğim bağlantı sorunlarının çoğunu kapsadığı için denemekten çekinmeyin. (veya bana bir e-posta vur ve ben daha fazla açıklayacağım)
goodguys_activate

2
Listeledikleriniz gibi DNS ile ilgili performans sorunları olmadığını söylemiyorum. Bana öyle geliyor ki, DNS'den ölçeklendirilirken çok daha temel endişelerin (veritabanı erişimi, sayfa önbellekleme, basit kod döngü karmaşıklığı, sunucu işlem yük dengeleme, donanım dağıtım noktası seçimi, vb.) ile ilgili sorunlar bir sorun olacaktır.
Fishtoaster

... Endişelenmeniz gereken daha önemli şeyler olduğu konusunda aynı fikirdeyim. Belki de bu fikrin sıfır derecesi vardır :) .. ama sonra tekrar, bu soruyu şimdiye kadar cevaplayan tek kişi benim.
goodguys_activate

1
DNS performansı kesinlikle büyük bir darboğaz olabilir - iyi ve kötü arasında çok fazla ms farkı olmayabilir, ancak DNS her çağrıda (veya neredeyse her çağrıda) vurulduğundan çok hızlı bir şekilde toplanabilir. Özellikle modern CDN stunt'larına girdiğinizde.
Wyatt Barnett

0

Bence anahtar basit olacak:

Basit bir kod var. Bu, baktığınız ve anladığınız bir şey anlamına gelir. Sunucuları genişletip değiştirdikçe neler olup bittiğini bilmeniz gerekir. Hızlı bir şekilde anlaması gereken kodlayıcıları da eklemeniz gerekebilir. Açık olmayan rasgele kod çağıran kancalar ve XML dosyaları çok kötü.

Sonra sorunları test edebilir ve bulabilirsiniz.

Buraya bakın: http://blog.servint.net/2013/08/27/going-big-how-to-scale-a-website-part-1-infrastructure-that-scales/

Bizler stellarbuild denemede emin bizim web siteleri zaman aşağı olmadan ölçek yapmak. Bu, kodunuzun ne yaptığını ve nerede yaptığını bilmeniz gerektiği anlamına gelir. Farklı bir makineyi test ediyor olsanız bile, ölçeklendirmek çok uzun süremez. Çoğu insan ne yazık ki neredeyse çok geç olduğunda başlar. Bence bunu ancak bir kez optimize edebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.