Varlıkları birden çok web sunucusu arasında nasıl paylaşabilirim?


16

Bir yük dengeleyiciye bağlı birden fazla Linux web sunucum var ve bu sunucular arasında varlıkları (resimler, videolar ve diğer şeyler gibi) paylaşmayı seviyorum. Bunu yapmanın en iyi yolu nedir?

Şu anda, tüm web sunucularına bir dosya sunucusuna bağlandım, ancak yoğun bir trafik altında inmesinden endişeliyim. Bunun olmasını nasıl önleyebilirim?

Şimdiden teşekkürler.


Cassandra (NoSQL veritabanları) gibi şeylerin yararlı olduğu yer burasıdır.
Alexis Wilke

Yoğun trafikte performansı artırmak için Vernik kullanmayı düşünüyor musunuz? en.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

Yanıtlar:


12

Bunu ihtiyaçlarınıza göre yapmanın birden fazla yolu vardır.

  • Web sunucularında fx NFS ile monte edilmiş merkezi bir dosya sunucusu kullanın
  • Yukarıdaki ile aynı, ancak gereksiz, bu yüzden biri aşağı inerse diğeri devralır
  • Bir çeşit senkronizasyon aracı (örneğin rsync) kullanın ve dosyaları yerel olarak web sunucularında barındırın. Ardından dosyaları belirli bir aralıkta sunucular arasında senkronize etmek için bir cronjob ayarlayın.
  • Amazon S3, Akamai vb.Gibi bir CDN kullanın.

Çok sayıda yeni dosyanız varsa ilk ikisi en iyisidir. Üçüncüsü, kullanıcıların henüz senkronize edilmemiş statik içerikte 404'leri alacağı için sık sık dosya eklemez veya değiştirmezseniz ideal çözüm olacaktır.

Son seçenek birçok açıdan ideal olabilir, ancak 4'ün en pahalısı da olabilir. Bunu desteklemek için web sitelerinizi de yeniden yazmanız gerekir.


Rsync ile ilgili büyük sorun, yeni veri yüklerseniz 404 almanız muhtemeldir ve rsync çok hızlı gerçekleşmez ... Tabii ki 10 sunucuya sahip olmamakla birlikte Cassandra (nokta 4) gibi bir sistem ücretsizdir. ücretsiz ... öyleyse, belki de ekstra bir ücret söylememeliyim (her şeyin çalışması için bazı programlamalara ihtiyaç duyulmasına rağmen.)
Alexis Wilke

@AlexisWilke - Sen rsync hakkında haklısın, ve ben de cevabında bir tür söz yaptı. Şimdi cevapta açıklığa kavuştum.
Frederik Nielsen

Re: # 3, bir dosya sistemi izleyicisi (Facebook bekçisi gibi ) ve hızlı bir senkronizasyon aracı ( csync2 gibi) kullanırsanız, konuşlandırılan yeni varlık ile yeni varlık senkronizasyonu arasındaki 'ölü zaman' en aza indirilebilir . Hayır, gecikme asla sıfıra inmeyecektir, ancak çok azdır ve dağıtımı diğer alternatiflerden daha kolay olabilir.
pepoluan

2

Web sunucuları üzerindeki yükü azaltmanın ve yük dengeleme yapmanın bir başka harika yolu kalamar (kalamar3). Bu şekilde ayarlarsanız resimler vb. Statik içeriği HDD'ye (varsayılan) veya RAM'e (daha hızlı ve en iyi) önbelleğe alır. Belirli bir düğüm aşırı yüklenmişse, diğer kalamar sunucularına da robin yapabilir.


1
Çok dinamik bir web sitesi istiyorsanız bu tür önbellekleme başarısız olduğunu düşünüyorum. Çünkü ağır dinamizmle, birçok veri için hala bir ana arka uç sunucusuna vurmanız gerekir. Kullanıcı bunun yerine arka uç iş bölme içine arıyorum düşünüyorum.
Alexis Wilke

1
Yanıtınız yükün potansiyel olarak azaltılması konusunda doğrudur, ancak varlık dosyalarının birden fazla sunucu arasında paylaşılması hakkındaki soruya cevap vermez.

@AlexisSquid kalamar kurulumunuz doğru değilse (başarısız olur). Ayarlarda önbelleğe alma (veya önbelleğe alma) şeklini ayarlayın, ancak hiçbir sayfanın tamamen dinamik olmadığını görebilirsiniz. Her zaman önbellekleyebileceğiniz bir şey vardır. Ayrıca Andre, başlıkta açıklandığı gibi varlıkların paylaşılmasına büyük ölçüde yardımcı olur, ancak dosyaları çok fazla paylaşmaz. Soru, sitelerin ağır yük altında inmesini nasıl engelleyeceğiydi. Kalamar bunu yaparken mükemmel.
Aihngel Tech

1

Genellikle daha fazla sunucu ihtiyacı, dinamik web sitelerini / aps'leri çalıştırmak için gereken kaynaklardan geldiğinden, statik varlıkları başka bir alt alan / alan adında barındırmayı düşünün. (static.alanadiniz.com.tr gibi)

Daha sonra bunları barındırmak için başka bir sunucu / sunucu kullanabilirsiniz. Statik dosya barındırma çok fazla kaynak kullanmaz, bu nedenle statik içeriğiniz için çok daha az sunucuya ihtiyacınız olacaktır. Dinamik içeriğiniz için sunuculardaki bazı kaynakları da serbest bırakacaksınız.

Yük dengeleyicinize bağlı olarak, bunu hangi etki alanı için hangi sunucunun kullanılacağına karar veren yük dengeleyici ile aynı etki alanında da yapabilirsiniz, ancak ayrı bir etki alanı kullanırsanız, statik varlıklarınızı bir CDN'ye oldukça kolay bir şekilde koyabilirsiniz. ihtiyaç ortaya çıkmalı!


1

Kullandığım bu zorluğun bir çözümü, paylaşılan bir NFS sürücüsündeki dosyaların ana okuma / yazma kopyasına sahip olmak, ancak her web sunucusunda salt okunur kopyada tutmak, böylece NFS ana bilgisayarındaki bir hata dosya erişimini sağlar tamamen kaybetmek yerine salt okunur modda.

  • Dosyalar merkezi ana bilgisayarda canlı olarak yayınlanır, NFS bağlantısı üzerinden web ana bilgisayarlarıyla paylaşılır
  • rsync her web barındırıcısında salt okunur kopyayı taze tutmak için her zaman 15 dakika çalışır.
  • check_linkNFS bağlantı parçasının hala orada olduğundan emin olmak için her dakika bir bash betiği çalışır ve değilse bir symlink'i salt okunur kopyaya değiştirir.

Bu sistemi ilk kurduğumdan bu makalede daha fazla ayrıntı bulabilirsiniz .

Upsides:

  • Dosya okumaları yüksek oranda kullanılabilir
  • Dosya yazma işlemleri için yarış durumu yok
  • Yeni dosyalar tüm web barındırıcıları tarafından anında kullanılabilir.

Downsides:

  • biraz karmaşık.
  • salt okunur kopya sayısı, web barındırıcılarının sayısıyla ölçeklenir ve ikiden fazla varsa aşırı olabilir.
  • Dosya yazma işlemleri yüksek oranda mevcut değil.
  • Salt okunur kopyaya geçmeden önce 1 dakikaya kadar kesinti olasılığı.

0

Bir NoSQL veritabanı düşünebilirsiniz. Kümeler üzerinde çalışmak, nihai tutarlılık sağlamak için tasarlanmıştır. Ancak dikkatli olmayın, bunlar ASİT değildir.

İşte amacınız için ne tür bir NoSQL veritabanı karar vermenize yardımcı olacak bir giriş .

İşte olan kaynakların listesini temin NoSQL ile ilgili.


4
Bu yanıt dosya senkronizasyonu sorununa nasıl yardımcı olur?
titus

@titus NoSQL'de, düğümlerden birinde bir yazma olduğunda, kümedeki diğer düğümlerde çoğaltılır. Cassandra yazma tutarlılık seviyeleri açıklığa
kavuşmasına

öyleyse gitmek için yol NoSQL db tüm dosyaları saklamaktır?
titus

@titus yapabilirsiniz, ancak NoSQL veritabanları dosyaları depolamaktan çok daha fazlasını yapabilir, Hepsi ihtiyaçlarınıza bağlıdır.
Azzy

2
OP belirli bir soruna çözüm istedi " yük dengeleyiciye bağlı birden fazla Linux web sunucusu ... varlıkları (resimler, videolar ve diğer şeyler gibi) bu sunucular arasında paylaş. " Cevabınız çok genel, önerebilir misiniz? problemi çözmek için belirli araçları (ve tercihen bunların konfigürasyonlarını) açıklayabilir mi?
kdbanman

0

Neden bir DFS çözümü denemiyorsunuz, yüksek düzeyde yedeklilik sağlıyorlar ve birim istediğiniz kadar paylaşılabiliyor. Gluster benim en sevdiğim ve herhangi bir ünlü Linux dağıtımına kurmak ve yapılandırmak çok kolay

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.