2010-10-01 17 views
14

Pracuję nad moim [pierwszym] startupem od miesiąca i chociaż prawdopodobnie minęło jeszcze jeden miesiąc od wydania alfa, chcę wiedzieć, jak go wdrożyć we właściwy sposób. Strona będzie początkowo bardzo obciążona (sieć + procesor) dla nowego użytkownika, więc myślę o oddzielnym serwerze/kolejce dla tego wstępnego procesu, aby nie spowalniała strony dla obecnych użytkowników.Jak wdrożyć witrynę [Ruby on Rails] w skalowalny sposób?

Na podstawie moich dotychczasowych badań, obecnie skłaniam się ku nginx + haproxy + unicorn/thin + memcached + mysql i wdrażaniu na Linode. Jednakże nie posiadam żadnego wcześniejszego doświadczenia w żadnym z powyższych; dlatego mam nadzieję wykorzystać doświadczenie społeczności.

  • Czy powyższa architektura wydaje się uzasadniona? Wszelkie sugestie/artykuły/książki, które polecasz?
  • Czy Linode to dobry wybór? Heroku/EY wydaje mi się zbyt drogi (przynajmniej dopóki nie mam wystarczających dochodów), ale czy brakuje mi innej lepszej opcji? MediaTemple?
  • Jakieś dobre sugestie dotyczące architektury równoważenia obciążenia? Wciąż o tym czytam.
  • Czy lepiej mieć 2 oddzielne instancje serwera Rails na 2 oddzielnych liniach lub 1 wystąpienie na linwie o dwukrotnie większej pojemności (pod względem pamięci RAM/pamięci/przepustowości)? Z iloma Linodami powinienem zacząć?
  • Którą dystrybucję Linuksa powinienem wybrać? (Linode oferuje 8 różnych - http://www.linode.com/faq.cfm) Czy są jakieś względne zalety/wady między nimi dla strony Rails?

Przepraszam, jeśli któreś z moich pytań jest głupie lub sprzeczne; proszę przypisać to do mojego niedoświadczenia.

Odpowiedz

18

Architektura

Jesteś na właściwej drodze. Osobiście wolę Passenger od cienkiego/jednorożca (po uruchomieniu nginxa na cienki backend przez dłuższy czas) tylko dla wygody, ale proponowana konfiguracja jest dość standardowa. Jeśli korzystasz z wersji Ruby 1.8.7, polecam rozważenie REE + Passenger dla oszczędności pamięci RAM.

Hosting & równoważenie obciążenia

Linode jest fantastyczna, i wykorzystać je do prawie wszystko, co mogę, ale trzeba zdawać sobie sprawę z ograniczeń RAM. Każdy proces Railsowy wykorzystuje niezrównaną ilość pamięci RAM, a będziesz chciał uniknąć zamiany komputera na swap. Zaplanuj uruchomienie wystarczającej liczby instancji Rails na maszynę, aby przydzielić pamięć około 90% pamięci Linode. Prawdopodobnie będziesz potrzebować kolejnej Linode dedykowanej do twojej bazy danych, ale możesz zacząć od nich obu na tym samym komputerze; po prostu przygotuj się na odejście od MySQL w miarę rozwoju. Możesz skonfigurować komunikację między Linodami w tym samym centrum danych na prywatnych adresach IP, które nie są wliczane do limitu przepustowości.

Twoja strategia skalowania powinna być tak horyzontalna, jak to możliwe, więc polecam po prostu uzyskanie drugiego Linode i dodanie go do puli haproxy, gdy potrzebujesz więcej mocy - Linode pobiera 20 USD za 512 MB więcej pamięci RAM, lub możesz po prostu zdobądź cały "Liner" (z procesorem, pamięcią RAM, dyskiem twardym i limitem przepustowości) za te same 20 USD. Wydaje się nie myśleć!). W przypadku Railsa instancja jest instancją, więc nie ma znaczenia, czy znajduje się na tej samej maszynie wirtualnej, czy nie, o ile czas połączenia z maszyną bazy danych lub inną jest mniej więcej taki sam. Możesz uruchomić 10 Linodes, każdy z 10 procesami Railsowymi, bez większego problemu.Linode oferuje również przełączanie awaryjne IP, więc jeśli podstawowy Linode (z haproxy) ulegnie awarii, może automatycznie przejść do drugiego Linode, na którym będzie działał haproxy i będzie gotowy do działania w tej samej pojemności co pierwszy.

Dystrybucja

Szczerze, to do Ciebie! Wiele osób korzysta z dystrybucji Ubuntu lub Redhat (CentOS/Fedora) - sam lubię CentOS - ale tak naprawdę chodzi tylko o to, z czym najbardziej się czujesz. Jeśli nie masz ulubionej dystrybucji, polecam wypróbowanie Ubuntu/CentOS, ponieważ są one bardzo przyjazne dla początkujących i mają wyjątkowo solidną pomoc ze strony społeczności.

Prawdopodobnie będziesz chciał wybrać 32-bitową dystrybucję, chyba że masz nieodparty powód, by wybrać 64-bitową dystrybucję; 64-bitowe pliki wykonywalne wymagają więcej pamięci RAM niż 32-bitowe odpowiedniki, a ponieważ pamięć RAM jest prawdopodobnie najcenniejszym zasobem, warto zapisać ją tam, gdzie jest to możliwe.

+0

Dziękujemy za szczegółową odpowiedź. Kilka pytań uzupełniających dla Ciebie: - (1) Używam Ruby 1.9.2. Czy w tym przypadku REE nadal ma przewagę? (2) Jaką przewagę zapewnia Pasażer nad Thin? –

+0

Pasażer automatycznie zarządza klastrem procesów. Z cienkim, musisz ręcznie zarządzać każdym backendem. Pasażer korzysta również z funkcji kopiowania przy zapisywaniu REE, aby dzielić się pamięcią szkieletową w instancjach zaplecza, oszczędzając pamięć RAM. Instalacja i konfiguracja jest dość prosta. –