2010-10-01 12 views
14

Şu an bir ay boyunca ilk açılışımda çalışıyorum ve muhtemelen bir alfa sürümünden bir ay daha uzaktayken, doğru şekilde nasıl dağıtılacağını bilmek istiyorum. Site, yeni bir kullanıcı için başlangıçta yüksek miktarda yükleme (ağ + CPU) alacaktır, bu yüzden bu ilk işlem için ayrı bir sunucu/sıraya sahip olmayı düşünüyorum, böylece mevcut kullanıcılar için siteyi yavaşlatmayacaktır. Şu ana kadar yaptığım araştırmaya dayanarak, şu anda Nginx + haproxy + unicorn/thin + memcached + mysql ve Linode üzerinde konuşlandırıyorum. Ancak, yukarıdakilerin hiçbirinde daha önce hiç tecrübem yok; bu yüzden toplumun deneyimlerine dokunmayı umuyoruz.[Ruby on Rails] sitesini nasıl ölçeklendirilebilir bir şekilde dağıtılır?

  • Yukarıdaki mimari makul görünüyor mu? Önerebileceğiniz herhangi bir öneri/makale/kitap var mı?
  • Linode iyi bir seçim midir? Heroku/EY benim için çok pahalı gözüküyor (yeterince gelir sahibi olana kadar), fakat başka bir daha iyi seçeneği kaçırıyor muyum? MediaTemple?
  • Yük dengeleme mimarisi hakkında iyi öneriler var mı? Hala bunu okuyordum.
  • 2 ayrı bağlantı noktası üzerinde 2 ayrı Rails sunucu örneğinin olması veya iki katı kapasitede (RAM/depolama/bant genişliği açısından) 1 örnek çalıştırabilmesi daha iyi olur mu? Ne kadar Linodes ile başlamalıyım?
  • Hangi Linux dağıtımını seçmeliyim? (Linode 8 farklı ürün sunuyor - http://www.linode.com/faq.cfm) Rails sitesi için aralarında herhangi bir göreceli avantaj/dezavantaj var mı?

Sorularımın herhangi birinin aptalca veya çelişkili olması durumunda özür dilerim; lütfen benim deneyimsizliğime atfedin.

cevap

18

Mimarlık

Sen doğru yoldasın. Ben şahsen kolaylık sağlamak için ince/tekboynuzlu (uzun süre ince arkadan ince arka plana sahip) Passenger'ı tercih ederim, ama önerilen kurulum oldukça standart. Eğer Ruby 1.8.7 üzerindeyseniz, çerçeve bellek tasarrufları için REE + Yolcu'nu düşünmenizi öneririz.

Linode Dengeleme & yükleyin Barındırma fantastik ve elimden hemen her şey için bunları kullanmak, ancak RAM sınırlarının farkında olması gerekir. Her Rails işlemi önemli olmayan bir miktar RAM kullanır ve makineyi takas içine almaktan kaçınmak isteyeceksiniz. Her bir makine için yeterli sayıda Rails örneğini çalıştırmayı planlayın, böylece bellek tahsisiniz Linode üzerindeki belleğin yaklaşık% 90'ı olur. Her ikisi de aynı makinede başlatabilseniz de, veritabanınıza adanmış bir başka Linode isteyeceksiniz; Büyürken MySQL'i bölmeye hazır ol. Bant genişliği kotanızda hesaba katılmayan, özel IP'lerde aynı veri merkezindeki Linodes'lar arasında iletişim kurabilirsiniz.

Ölçekleme stratejiniz olabildiğince yatay olmalıdır, bu yüzden daha fazla beygir gücüne ihtiyaç duyduğunuzda ikinci bir Linode alıp haproxy havuzunuza eklemenizi öneririm - Linode 512mb daha fazla RAM için 20 dolar ücretlendirir, ya da yalnızca 20 $ için bir bütün 'noter Linode (CPU, RAM, HDD ve bant genişliği kotası ile) olsun. No-brainer görünüyor!). Rails'in durumunda, bir örnek bir örnektir, bu yüzden aynı VM'de olup olmadığı gerçekten önemli değil, veritabanı makinenize bağlanma süresi veya az çok aynı değil. Her birinde 10 Linot koşuyor olabilirsiniz. 10 Rails bir parçayı çok fazla sorun olmadan işleyebilir.Linode ayrıca IP yük devretme özelliği sunar, böylece birincil Linode'niz (haproxy ile) azalırsa, otomatik olarak ikincil bir Linode'ye başarısız olabilir, bu durumda üzerinde çalışan haproxy'ye sahip olabilirsiniz ve ilk olarak aynı kapasitede hareket etmeye hazır olabilirsiniz.

Dağıtım

Doğrusu, bu size kalmış! Birçok insan Ubuntu ya da Redhat (CentOS/Fedora) dağıtımlarıyla gider - kendimi CentOS'u severim - ama gerçekten en rahat hissettiğiniz şeyle ilgili. Favori bir dağıtımınız yoksa, yeni başlayanlar için oldukça arkadaş canlısı oldukları ve son derece sağlam bir topluluk desteğine sahip oldukları için Ubuntu/CentOS'u denemenizi tavsiye ederim.

64 bit dağıtımı seçmek için zorlayıcı bir nedeniniz olmadıkça büyük olasılıkla 32 bitlik bir dağıtım seçmek istersiniz; 64 bit yürütücüler, 32 bit karşılıklarından daha fazla RAM gerektirir ve RAM'in en değerli kaynağınız olması muhtemel olduğundan, yapabileceğiniz yere kaydetmek mantıklıdır.

+0

Detaylı yanıtınız için teşekkür ederiz. Sizin için birkaç takip soruları: - (1) Ruby 1.9.2 kullanıyorum. REE'nin bu durumda hala bir avantajı var mı? (2) Yolcu, İnce'yi aşan avantaj sağlar mı? –

+0

Yolcu, süreç kümenizi otomatik olarak yönetir. İnce ile, her bir arka uçu manuel olarak yönetmeniz gerekir. Yolcu aynı zamanda REE'nin arka planda çalışanlar arasında çerçeve hafızasını paylaşmak ve size RAM tasarrufu sağlamak için yazma-yazma işlevselliğinden yararlanır. Yüklemek ve yapılandırmak da oldukça kolay. –