Büyük siteler neden daha iyi özelliklere sahip bir sunucu yerine birden çok sunucu kullanıyor?


42

Stack Overflow'un Stack Overflow sitesine hizmet vermek için 10 veya daha fazla sunucu kullandığını okudum. Farklı sunucular, ters proxy, veritabanı sunucusu veya HTTP sunucusu gibi farklı işlevlere sahiptir.

Bu özelliklere sahip güçlü, bağımsız bir tek sunucu gördüm:

  • 2 x Xeon E5-2630v2 @ 2.60 GHz, toplam 12 çekirdek, 24 iplik; 30 MB
  • 64 GB ECC Reg. 1600 MHz'de 768 GB'a kadar DDR3
  • 4 x 120 GB Intel 520/530 Serisi (80k rasgele IOPS, ~ 550 MB / s)
  • Özel Ethernet yönetim bağlantı noktasına sahip HP iLo4 Gelişmiş.

Neden 768 GB RAM, 20 TB + HDD, 4+ x Xeon gibi daha yüksek özelliklere sahip tek bir sunucu kullanmıyorsunuz? Çok sayıda sunucuyu kullanmanın veya tek bir yüksek özellikli sunucuyu kullanmanın sakıncaları nelerdir?


4
SE sadece 10+ sunucuya sahip değildir, aynı zamanda yerine çalışma için başka bir veri merkezinde çift kurulum yaparlar. Ve, sunucu henüz icat edilmedi ki bu Facebook veya Google'ın tüm trafiğini kaldırabildi.
Michael Hampton,

8
Bu süper sunucuyu yeniden başlatmanız gerektiğinde ne olur?
Liath

Artıklık ... :)
William Edwards

1
Paralelcilik ...
Monica

1
@SSpoke: Port başına bir bağlantıyla sınırlı değilsiniz. Tek önemli olan, (src adresi, src portu, dst adresi, dst portu) kombinasyonunun benzersiz olmasıdır.
David

Yanıtlar:


58

Tek bir güçlü sunucu yalnızca şu ana kadar yükseltilebilir. Kullanılabilir en güçlü sunucuya sahip olduğunuzda, siteniz sunucuları arasında bölmeden veya daha verimli hale getirmeden daha fazla büyüyemez.

Maliyet faktörü de var. Süper güçlü olan tek bir sunucu, yarısı kadar güçlü olan iki sunucunun 10 katına mal olabilir. Donanımınızı en ucuz fiyata satın alabilirsiniz ve daha yüksek bir fiyat noktasına kilitlenmeyin, çünkü işe yarayacak tek şey bu.

Çalışma süresi ve güvenilirlik de devreye girer. İki veya daha fazla sunucuda, bakım için bir hata olabilir veya devre dışı bırakılabilir ve site kalabilir. Bunu tek bir sunucu ile yapamazsınız.

Çoğu büyük web sitesi yük dengeleyici ve birden çok sunucu kullanır. TripAdvisor için çalışıyordum. TripAdvisor mimarisi ve çok sayıda sunucu ile nasıl ölçeklenebilir hale getirildikleri hakkında harika bir makale yayınladılar .

Öyle mümkün tek bir sunucu üzerinde gelişmiş bir hizmet çalıştırın. Bildiğim bir örnek Mailinator. Yazar , Mailinator'ın mimarisi hakkında bir makale yayınladı . Yeni sunucular satın almak yerine kodunu daha verimli hale getirmeye odaklanıyor. Bu, hizmetinin nasıl çalıştığını belirleyen bir sınırlama olarak ortaya çıkıyor. Tek makinenin daha fazla yer açmak için silmesinden önce postayı yalnızca birkaç saatte tutar.

Tek bir sunucuyu yükseltme, dikey olarak ölçeklendirme olarak bilinir . Daha fazla sunucu eklemek, yatay olarak ölçeklendirme olarak bilinir . Bu konu hakkında daha fazla bilgi için, ikisini karşılaştıran bazı makaleler:


9
Birden fazla sunucunuz varsa (birkaçtan fazla ise) ve bazı işlemci ölürse, her şeyin çalışmasını sağlayacak başka sunucularınız vardır. 1 sunucunuz varsa ve bu aralar bittiyse, bitirdiniz.
Martijn

2
İnsanların unuttuğu bir başka nokta, bir sunucuyu maksimum kapasitede veya yakınında çalıştırmanın mutlaka iyi bir şey olmadığıdır. Sunucularımızı global bir telekomda (isimsiz kalacak şekilde) genel bir kural olarak en fazla yarı kapasitede ölçtük (arkasında gerçek bir mantık yok - sadece ölçümleri izliyoruz). Hesaplama kuyruğu, G / Ç alt sistemleri, bellek adresleme ve takas vb. Sorunlarla baş etmeye başlıyorsunuz, çünkü donanım kapasitesinden bağımsız olarak bir noktada, alt sistemler arasındaki denge elbette işletim sistemine bağlı olarak çakışmalara yol açabileceğinden. Daha fazlasını sağlayan bazı sağlam sistemler var.
14’e

@closetnoc Bence onu tarif etmenin en iyi yolu tıkanıklıklardan kaçınmaya çalışıyor olmanızdır. Uygun şekilde dengelenmiş bir sistem, hiçbir yan etkisi olmadan teorik olarak% 100 kapasitede çalışabilir, ancak sistemin beklemesi gereken her şey (CPU zamanı, G / Ç, veri yolu transferi vb.) Performans sorunlarına neden olur. Sistemlerinizi yarı kapasitede çalıştırarak, bu tür darboğazlara maruz kalmayacağınız iyi bir yer buldunuz.
TheBluefish,

@Thebluefish Evet ve hayır. Ben eski bir sistem iç adamıyım. Çoğu sistem işletim sistemi içinde darboğazlara ve daha hızlı baskın, bellek, CPU vb. İle yapılamayan iç donanımdadır. Ayrıca, işletim sistemi içinde sınırlamalar vardır. Windows oldukça iyiydi çünkü VMS'ye dayanıyordu, ama yine de VMS gibi ayarlanamayan sınırları vardı. Linux açıkça daha iyi. Bazı sunucular bizim kullandığımız HP gibi küçük donanım sınırlamaları ile tasarlanmıştır. Ancak o zaman bile, kesinti ve CPU takaslarındaki artış nedeniyle% 100 kapasitede bir hesaplama kuyruğu çalıştırmak asla iyi bir fikir değildir.
closetnoc

2
Yatay ölçeklemenin bir diğer avantajı: Tek bir sunucuya yönlendirmiş olabileceğiniz çok fazla elektrik, bant genişliği, soğutma vb. Netflix'in sonsuz işlem gücü ve hafızası olan bir kutusu olabilirdi, ancak trafiğini çıkarmak için yeterli miktarda pipo olmadan onları iyi yapmazdı.
Chris Hayes,

32

Arka Amiral Grace Hopper'dan:

Daha büyük bilgisayarların inşasında: "Öncü günlerde ağır çekim için öküz kullanıyorlardı ve bir öküz kütüğü tomurcuklayamıyorsa, daha büyük öküz yetiştirmeye çalışmadılar. Daha büyük bilgisayarlar için çalışmamalıyız. ama daha fazla bilgisayar sistemi için. "

kaynak


1
Grace Hopper'la birkaç kez erken kariyerimde tanıştım ve onunla biraz zaman geçirdim. Gerçekten bir şeydi! Bir havalı kedi! Hepimiz onu sevdik. Zamanı ve nezaketleriyle çok cömert ve cömert davranmıştı. Onu alıntı için Kudos! Geri dönüş için bir oylama. Teşekkürler!
16'da kapandı

5
Bu ilgili bir alıntı olsa da, bu soruyu cevaplamıyor. Bir kişinin doğrulanmamış görüşü burada değerli olmamalıdır.
TankorSmash

7
@NoahSpurrier Çünkü aslında sorunun hiçbir bölümünü cevaplamıyor? Bu doğrulanmamış bir benzetme yapan ve neden daha fazla sunucu için çekim yapmamız gerektiğini açıklamayan tek bir alıntı .
Chris Hayes

2
Bunun yararlı bir cevap olduğunu söyleyebilirim, ancak belirli sebepleri ayrıntılarıyla göstermediğinden, cevap olarak kabul edilmemelidir. Bununla birlikte, yük bölme ilkesinin aşındırıcı nedenini açıkça belirtir.
Ian T. Küçük

1
@Bobson Hiç önemli bir oyuncu olmadığını iddia etmiyorum, sadece kulağa hoş gelebilecek bir veya iki cümle yerine bazı içeriklerle bir cevap görmek istediğimi söylüyorum.
TankorSmash

10

Stephen, bir sistem mimarisine karar verirken dikkat edilmesi gerekenleri açıklıyor: dikey ve yatay ölçeklemedeki tradeoff. Birkaç başka husus daha ekleyeceğim:

  • Endişelerin ayrılması: Birden çok radikal olarak farklı sistemlerden bahsediyorsunuz: Ters proxy'ler, DB, içerik sunucuları, vb. Gerekirse, ayrı olarak güncellenebilir ve ödün verildiğinde diğer hizmetleri etkilemez.
  • İçerik teslimi: Bu bir web sunucusunun nihai amacıdır ve iyi bir dağıtım modeline sahiptir. Sistemler çoğaltılabilir ve coğrafi olarak yayılabilir, böylece uzun mesafeli bağlantıların gecikmesi en aza indirgenir. Ayrıca artıklık sağlar . Büyük web siteleri, otomatik yük devretmenin hizmeti her zaman açık tutmasını sağlamak için yük dengeleyici (başka bir sunucu grubu!) Kullanır .

Mainframes: Aslında dikey ölçeklendirmeyi başka bir seviyeye alan bütün bir sunucu sınıfı var. Çok çeşitli avantajlara (hız, güvenilirlik) ve dezavantajlara (maliyet) sahiptirler, ancak genellikle işlem işleme dediğimiz şeyde Girdi-Çıktı işlemesi sırasında muazzam miktarda veri kullanımı gerektiğinde kullanılırlar (kredi kartı alımları, bankacılık gibi seçim ve nüfus sayımı verileri). Örneğin, bankalar dikey olarak ölçeklendirilmiş web sunucularından sitelere hizmet verirken, arka uç anabilgisayar üzerinden işlem gerçekleştirmeye başlayabilir.

İlginç bir şekilde Paypal ve Visa gibi şirketler ana bilgisayardan binlerce yatay ölçekli sistemin kümelenmiş sistemlerine doğru ilerlemektedir. Hızla gelişen dijital dünyada ana bilgisayarlar bile yatay ölçeklendirme tavanına çarpıyor:

“Tüm kullanılabilirlik ve performans gereksinimleri nedeniyle, ödemeleri ana bilgisayarlarda işleme koyamadık,

Kaynak: Adam Banks, ComputerWorldUK'ta


8
  • Boyut sınırı Birden fazla işlemci, bellek yongası ve disk içeren tek bir kutunun tek tip olduğunu iddia etmek istiyoruz. Bu tamamen doğru değil, ancak sayılarınız çok fazla artmazsa, bu yeterli. Isı, enerji, yakınlık vb. İle ilgili teknik sınırlamalar vardır; bu, tek bir sunucunun ne kadar büyük olacağı konusunda daima pratik bir sınır olacağı anlamına gelir.

  • Ölçeklenebilirlik - IPC için paylaşılan bellek kullanan ve ağ oluşturma veya kümelemeyi kullanan çoklu sunucu sistemi kullanan tek bir sunucu sistemi arasında çok büyük bir fark var. Bununla birlikte, iki sunucu ve 200 arasındaki fark oldukça küçüktür - eğer ölçeklendiren bir sistem kurduysanız, bir sorun çıkmadan çok daha büyük bir ölçeklendirme yapabilirsiniz ... ve varsa, gerçekten büyük bir tek sunucuya gerek kalmaz ilk başta.

  • Esneklik - Bir sunucu, bir yöneticinin 'hata' olabileceği bir yerdir. Veya bütün bu kalay parçasına servis yapıldığını gösteren fiziksel bir sorun var. (Datacentre su sızıntısı, biri rafa çarptı ve onu deviriyordu, böyle bir şey). Birden fazla sunucu bir veri merkezinde dağıtılabilir veya coğrafi olarak daha iyi dağıtılabilir. Uygulamanızı zaten dağıtıyorsanız, 'orta' boyuttaki makinelere ölçeklendirme, daha az sayıda daha büyük makinelerde neredeyse aynı miktarda CPU / bellek / GÇ'den daha ucuzdur.

  • Güncellemeler - Bir sunucuyu yama yaparsam, bu hizmetin dengesiz hale gelmesine, yeniden başlatılmasını gerektirebilir veya başka bir süre çalışmamaya neden olabilir. Aynı şeyi çalıştıran 4 sunucum varsa, bunu yapmak için bir süre hizmet dışı bırakabilirim. Yama / güncelleme döngüsü yanlış giderse servis dışı bırakın.


7

Sorunu küçük ölçekte alalım. Şirket için posta, ActiveDirectory, dosya paylaşımı ve web sitesi çalıştıran bir sunucuya sahip küçük bir ofis.

Bilgisayar korsanları çarptı ve yeniden başlatmanız gerekiyor, çünkü IIS karışık. Veya Exchange bir güncelleme ve yeniden başlatma gerektirir. Veya Active Directory bozuldu.

Bu izole edilmiş "bir hizmet çökmüş" sorunlardan herhangi biri tüm sunucuyu etkiler, bu nedenle bu sunucuda paylaşılan herhangi bir şey yeniden başlatılması veya başka bir şey olması nedeniyle onları etkileyecektir.

Gerçek bir BT adamı göründüğünde ve bu sunucuyu gördüğü zaman, onları ayrı sunuculara bölmeyi (ve bir yedek etki alanı denetleyicisi sunucusuna sahip olmayı) önerecektir.

"Tüm yumurtalarını bir sepete koyma" nın eski atasözü.

Şimdi bu felsefe web sunucularına uygulanmaktadır. Yalnızca tek bir web sunucum varsa ve web uygulamamı (yeni MyFaceLink.com) yayınlarsam ve gerçekten popülerleşirse, yeni sorunlarım olur. Kullanıcılar üzerindeyken siteyi bakım yapmaktan alıkoyamam Ve eğer çökerse ya da çok fazla kullanıcı alırsam, saklanırım. Dünyanın en büyük tek sunucusu bile, gelen 1 milyar FB dönüşümle boğulacak.

Bu nedenle, yük dengelemesi devreye girer, aynı “sepetteki yumurtalar” nedeniyle. Siteyi 3 sunucuya dağıtın ve eğer biri kapanırsa, kalan 2 kapasite ile ilgilenir. Yama yapmam gerekirse, her seferinde bir tane yaparım ve kimse farketmez.

En basit haliyle, mega sunucunun fiyatı ya da yükü gerçekten kaldırabilmesi (mümkün olsa da) ile ilgili değildir. Tek başarısızlık noktasıyla ilgili. İşler yeterince meşgul olduğunda ve 8-5 çalışan 5 kullanıcı yerine 24x7 oluyorsa, aksama süresi kabul edilemez. Zamanlanmış kesintileri zamanlamak daha zordur. Demek yükü yaydın.


Tek başarısızlık noktasını isimlendirmek için +1 .
David Cary

1

Birinin bir makinenin iki işi yapması istenirse, makinenin bazı kısımlarının daha büyük olması gerekir, ancak aynı hızda çalıştırılması, bazılarının aynı boyutta kalması, ancak daha hızlı çalışması gerekecek ve bazılarının daha büyük olması gerekecek ve daha hızlı. Daha küçük makinelerin rollerini daha büyük bir rolde birleştirmenin veya daha büyük makinelerin rollerini daha küçük olanlara ayırmanın ne kadar anlamlı olduğu, makinelerin en pahalı kısımlarına ne tür bir ölçeklendirmenin uygulanacağına bağlıdır. Çok sayıda makinede oluşan iş yükü tek dev colossus birleştirilir, sonra maliyetler büyük almak gerekir şeylerin hakim olacak veartan iş yükleriyle başa çıkmak için daha hızlı. Bu tür şeylerin maliyetleri hız ve boyut açısından doğrusal olsa bile, iş yükünü iki katına çıkarmak bir makinenin işleyiş maliyetini iki katından fazla tutar. Hızın belirli bir noktadan daha da artması, (çok) doğrusaldan daha büyük bir maliyet artışına neden olması gerçeği etkiliyor.

Uygulamanın emeğin altbölümünü zorladığı bir nokta yoktur; yapılacak işin türüne bağlı olarak, iki iş yükünü birleştiren bir makine iki katından daha az bellek tüketebilir veya iki katından daha az hızda çalışabilir. Öte yandan, bir makineye ne kadar çok iş verildiyse, bellek ve hız gereksinimlerinin iş yükü ile doğrusal olarak ölçeklenmeye başlaması o kadar büyük olur. Bunun ötesine geçtikçe, iş yükünün her iki katına çıkarılması için nispi maliyetteki artış artar.

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.