Ölçeklenebilir Web Uygulaması Donanım Topolojisi En İyi Uygulama


1

Ruby'de MySQL back-end ile geliştirilen mevcut bir web uygulaması ile çalışıyorum, ancak genel donanım topolojisi sorusunun çok çeşitli sunucu mimarilerine uygulanacağını düşünüyorum.

Bir veritabanı arka ucu ile web tabanlı bir uygulama sunmak için donanımın bir sunucu çiftliği içinde düzenlenmesi ile ilgili mevcut en iyi uygulamayı açıklayan ve ayrıntılandıran bir belge / web kaynağı arıyorum.

Mevcut mimari aşağıdaki gibidir;

                    HTTP Server (Apache)
                           |
               Application Servers x 8 (Unicorn / Ruby-on-Rails)
                           |
                     MySQL Back-end (Master)
                            \
                             \
                          MySQL Slave (primarily for performing backups)

Önerilen mimarinin, birden fazla HTTP sunucusunun önündeki bir yük dengeleyici, uygulama sunucularını HTTP sunucuları (lar) arasında bölerek, birden çok MySQL bağımlıyı sunucu tarafından salt okunur isteklerine (değişiklikler tarafından denetlenecek) dahil olmak üzere yukarıdan daha ölçeklenebilir olması gerekir uygulama yazılımı dahilinde)

Asıl amaç, mevcut en iyi uygulamayı kullanarak daha esnek bir sisteme sahip olmaktır ve şu ana kadar önerilmiş olan şey budur.

Ancak, herhangi bir kişi bu tür bir ortamda en iyi uygulama için bir kaynak önerebilir veya sonradan alacağımız esnekliği, performansı ve ölçeklenebilirliği sağlayacak bir mimari önerebilirse, çok minnettar olurum :)

Dave

Yanıtlar:


3

Ölçeklenebilirlik, donanım katmanının ötesine ve uygulama katmanının içine doğru uzanır. Bir ortamın büyük boyutlarda büyümesi yeteneği, her katmanda bulunan yazılımın tüm ortamdaki hatalı bir durumu ele alma ve tutarlı bir durumu sürdürme yeteneğine büyük ölçüde bağlıdır. Tüm ortamınızı süren veritabanı paylaşılamazsa, söz konusu veritabanını kullanarak bir ölçeklenebilirlik durdurucusu başlattınız. Bu tarz bir şey.

Amazon, bulutları için geliştirme konusunda bazı beyaz kağıtlara sahiptir ve çoğu, genellikle ölçeklenebilir herhangi bir altyapıya uygulanabilir.

http://aws.amazon.com/whitepapers/

Ölçeklendirirken akılda tutmanız gereken bazı üst düzey prensipler vardır:

  • Herhangi bir tek bileşenin hatasından kurtulmalı ve bunu insan müdahalesi olmadan yapmalıdır.
  • İnsan müdahalesi olmadan yüksek yüklere dinamik olarak yanıt vermelidir.

Sadece bir yük dengeleyici kullanmayın, tek bir LB olarak sunulan üç adet yük dengeleyici kullanın, böylece herhangi biri başarısız olursa, diğerleri yükü kaldırabilir.

Web / uygulama sunucuları, tüm düğümlerde kullanıcı durumuna sahip olmalıdır, böylece bir kullanıcı başka bir web / uygulama sunucusuna gönderilirse oturumları korunur. En iyi durumda, tüm durum tüm sunuculardan sağlanabilir.

Ağınızda yedekli yönlendiriciler bulunmalıdır, böylece tüm trafiği durdurmadan birini kapatabilirsiniz. HSRP bunu sağlayan bir protokoldür.

Veritabanı planınız, paylaşmaya başlamadan önce bir DB sunucusunu ne kadar ölçeklendireceğinizi içermeli ve bu noktaya yaklaştığınızda bir göz önünde bulundurularak paylaşma geliştirmeye başlamalıdır.

Performans nedenleriyle ortamınızda önbellekleme katmanları (memcached) gerekebilir.

Yeterince büyüdüğünüzde, çevrenizi nasıl barındıracağınız konusunda Anycast veya GeoIP üzerinden birden fazla ayrı yerden (ABD Batı ve ABD Doğu veya ABD Batı ve Avrupa gibi) planlamanız gerekir. Verileri ayrı konumlar arasında taşımak zor olacak ve ayrı konumlara ihtiyaç duyduğunuzda bu varsayıma karşı geliştirmeye başlamanız gerekir.


Ruby'nin, sunuculardaki birden çok işlemciden faydalanma yeteneğine (veya değil) odaklanarak, bazı ölçeklendirme sorunları vardır. Yetenekler var, ama oldukça yeni, ancak toplumda henüz çok iyi anlaşılmadı (ya da topladığım kadarıyla). Ruby olgunlaştıkça bu sorunlardan bazıları ortadan kalkacak.


+1 - Mükemmel ilk cevap teşekkürler, bu akşam Amazon yazılarını daha sonra okuyacağım.
Dave Rix

0

Büyük açıklama için teşekkürler; Veri tabanı yük dengeleyici ile ilişkisel veri tabanlarında ölçeklenebilirlik konusu azaltılabilir . Doğrusal olarak ölçeklenebilir ve yanıt süresinin çok kısa bir sürede daha fazla eşzamanlı kullanıcıyı destekleyebilir, bunların tümü uygulamanızda herhangi bir değişiklik yapmadan web tabanlı veya web uygulamaları için oldukça uygundur.


Benim tahminim onlar için çalışıyorsun. :) Ben de bu beyaz bültenleri okuyacağım.
Dave Rix
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.