Duża aplikacja RoR, jaki serwer?

Cześć, pytam głównie z ciekawości (jak na razie), ponieważ pojawiły się “u mnie” pomysły dot. pewnego projektu, szczegółów nie będę zdradzał (bo nie chcę), ale chciałbym się dowiedzieć od was - ludzi, którzy mają już jakieś doświadczenie jak to by wyglądało z serwerem, tzn. jakiego serwera potrzebowała by aplikacja na najnowszym RoRu.

Zew. serwer (gra) wykonywała by około 12 żądań do serwera (HTTP, czyli tak jak zwykły user przez przeglądarkę) w tym Railsy wykonywały by 20~ zapytań do bazy w ciągu 25 minut.

Takich serwerów było by po jakimś czasie załóżmy 2000, czyli wychodziło by na 1 godzinę 29 żądań i 48 zapytań, na 24 godziny 692 żądania do serwera i 1152 zapytań. Zapytania najzwyczajniejsze typu “SELECT * FROM game_adv LIMIT 5”~.

W bazie było by 2000 rekordów (tyle ile serwerów wykonujących żądania).

Do tego trzeba jeszcze doliczyć userów na samej stronie (jakieś newsy, komentarze do nich, panel usera, gdzie może dodawać różne rzeczy, typu reklamy itd.). Zakładając 100 userów na stronie (online) i średnio 5 zapytań na jedną stronę.

Jakiego serwera RoR by wymagało by to wszystko działało płynnie? (Serwer wysyła żądanie, “pyk” i już ma odpowiedź). Może ma ktoś jakieś propozycje? Ew. ceny? Nigdy nie pisałem tak wielkiej aplikacji oraz nigdy nie pisałem aplikacji w RoR, a chciałbym :wink:

Pozdrawiam, Snejk.

Na takie pytanie właściwie nie da się sensownie odpowiedzieć. Wszystko zależy od tego jak to będzie napisane, jakie to będą zapytania, co będzie można włożyć do memcache’a. Dodatkowo wartości, które podałeś ciężko przewidzieć (tzn. ile będziesz miał użytkowników i ile rzeczywiście będą generowali ruchu).

Moje zdanie jest takie: napisz i jeżeli w ogóle uda Ci się skończyć projekt, to wtedy się będziesz serwerem martwił.

Właśnie chodzi o to, że pisałem do 2 administratorów i obaj powiedzieli, że trzeba było by ponad 1000zł na miesiąc co najmniej na serwer, który by takie coś utrzymał, tyle kasy na sam serwer nie wydam (bo mi się nigdy nie zwróci za ten projekt).

Obejrzyj http://hetzner.de całkiem mocne maszyny za dobrą kasę, jeśli możesz sobie pozwolić na średni support i usterkę od czasu do czasu.

Spora przesada, z obsłużeniem 700 żądań nawet jakiś VPS nie będzie miał raczej problemów. Co do szybkości jednego żądania, to pewnie z jakimś sensownym cache’owaniem i denormalizacją danych też nie będzie tragedii. Jeżeli potrzeba będzie jednak szybszej maszyny, to tak jak Hubert napisał: Hetznery dają radę

Prosta plikacja Railsowa ma czas odpowiedzi na poziomie 50ms na EQ4 (http://www.hetzner.de/). To oznacza, że bez zadyszki jesteś w stanie pociągnąć 16 req/s (Ok. 1000req/min, 60kreq/godz). To dużo i w zupełności Ci wystarczy.

Jeśli aplikacja jest prosta to możesz przenieść ją z Rails do Goliath. Gothar ostatnio wykonał aplikację w tej bibliotece. Czas przetwarzania jednego requestu to 1ms (lub mniej!). Serwer może więc bez problemu pociągnąć ok. 80req/s na jednym core (a ma ich do dyspozycji 12, więc pełna moc przerobowa to ok. 82Mreq/dzień).

Moja osobista sugestia: zacznij z hostingiem chmurowym - za darmo w Heroku lub z 30 dniowym darmowym planem staging na http://www.winniecloud.com/ (produkt naszej firmy). W miarę jak serwis będzie się rozwijał możesz po niskich kosztach dodawać nowe serwery (bez problemów z administracją!).

Jest taki ładny zwyczaj na anglojęzycznych forach dodawania po takim tekście akapitu “full disclosure: winniecloud is my company’s product” :slight_smile:

W sumie racja, nie każdy czyta moją stopkę. Będę o tym pamiętał.

To też mocno względne stwierdzenie. Bo tyle i więcej wyciągam na VQ 19.

http://www.hetzner.de/hosting/produkte_vserver/vq19
http://www.hetzner.de/hosting/produkte_rootserver/eq4

Dzięki wszystkim za odpowiedzi :wink: Ale widzę, że było późno i źle obliczyłem.
“Takich serwerów było by po jakimś czasie załóżmy 2000, czyli wychodziło by na 1 godzinę 29 żądań i 48 zapytań, na 24 godziny 692 żądania do serwera i 1152 zapytań.”

Dane nie są podane dla 2000 klientów, a jednego więc będzie to 2000 razy więcej! Na godzinę 58000 żądań, na 24 godziny 1384000 żądania, czyli średnio 17~ req/sec. Wychodzi na to, że jednak nie będzie trzeba wydawać grubej kasy? Dzięki wielkie!

Pozdrawiam.

Nie obraź się, ale Twoje pytania są bardzo naiwne. Choćby

Tylko 2k rekordów? To gdzie Twoja gra będzie przechowywać jakieś dane? Podane przez Ciebie liczby są dosyć naiwne. Na jakiej podstawie zakładasz, że 1 klient wykona taką a nie inną liczbę żądań?

Nie znając szczegółów każda tu podana odpowiedź to zgadywanie. Pisanie, że aplikacja na jakimś tam sprzęcie wyciągnie x req/s mija się z celem. Zależy to od masy czynników.

Wiem, że z czasem nabiera się pewnego wyczucia “to będzie wolne, to będzie szybsze”, ale niestety działa to dla prostych rzeczy. Dla większych rzeczy nie ma się po prostu kontekstu, który pozwala na zauważenie, czy coś faktycznie będzie wolne czy nie. Gdyby tak było nie mielibyśmy takich historii jak np. optymalizacja przez Aarona arela w railsach 3. Tak samo bez tego kontekstu nie dostaniesz sensownej odpowiedzi na stawiane tu pytania.

Moim zdaniem powinieneś zrobić jakiś mini prototyp. Wygenerować ileś tam sensownych danych i testować. Cała reszta to tylko półśrodki, które jeszcze wprowadzą Cię w błąd (a nie ma to jak błędne założenia przy samym planowaniu aplikacji).

@radarek,
Gra 1 mapy trwa 25 minut.

  • 1 żądanie przy starcie
  • co 8 minut wykonywane jest żądanie, które zwraca jakiś niedługi string (wykona się 3 razy przy 8min., 16min. i 24min.)
  • co 3 minuty zostanie wykonane żądanie, które wykonuje update na bazie (będzie ich 8)

Razem 12, nie mniej, nie więcej (zakładając, że serwer nie padnie itp.). Dodatkowo, na nie których serwerach nie ma ciągle ludzi, a jak nie ma to żądanie się nie wykona.

Rekordów będzie tyle ile serwerów + oczywiście jakaś tabela userów.