Heroku: hamownia internetowa czy hamownia robotnicza? Ile / jaki stosunek potrzebuję?

82

Byłem ciekawy, jaka jest różnica między platformą internetową i robotniczą w Heroku. Podają jedno zdanie na stronie z cenami, ale to mnie po prostu zdezorientowało. Skąd mam wiedzieć, ile wybrać każdego z nich? Czy istnieje stosunek, do którego powinienem dążyć? Jestem całkiem nowy w tych rzeczach, więc czy ktoś może szczegółowo wyjaśnić, a może w jakiś sposób obliczyć, ile i jakiego rodzaju hamownie bym potrzebował?

Poza tym nie rozumiem, co mają na myśli, mówiąc o liczbie godzin na każdej hamowni.

http://www.heroku.com/pricing

Ja też trafiłem na ten artykuł. Jako jedno z ich sugerowanych rozwiązań powiedzieli, że zwiększą liczbę hamowni. O jaki typ hamowni mają tutaj na myśli?

http://devcenter.heroku.com/articles/backlog-too-deep

varatis
źródło

Odpowiedzi:

58

Najlepszym wskazaniem, jeśli potrzebujesz więcej hamowni (czyli procesów na Cedar), są Twoje dzienniki Heroku. Upewnij się, że korzystasz z rozszerzonego rejestrowania (jest to bezpłatne), abyś mógł dostosować swój dziennik.

Szukasz wpisów heroku.router, a wartością, która Cię najbardziej interesuje, jest wartość kolejki - jeśli stale jest większa niż 0, to dobry znak, że musisz dodać więcej hamowni. Zasadniczo oznacza to, że napływa więcej żądań, niż proces może obsłużyć, więc są one umieszczane w kolejce. Jeśli są zbyt długo w kolejce i nie zwrócą żadnych danych, przekroczony zostanie limit czasu.

Nie ma idealnego stosunku Obawiam się, że możesz mieć aplikację wykonującą 100 żądań na sekundę, wymagającą wielu procesów internetowych, ale po prostu nie wykorzystuje pracowników. Potrzebujesz procesów roboczych tylko wtedy, gdy przetwarzasz je w tle, np. Wysyłasz e-maile itp.

ps Backlog zbyt głęboki byłby procesem sieciowym Dyno, który by to spowodował.

AKTUALIZACJA: 26 marca 2013 Heroku usunęło kolejkę i pola oczekiwania z wylogowania.

pola kolejki i oczekiwania zostały usunięte z komunikatów dziennika routera. Ponadto router Heroku nie ustawia już nagłówków HTTP X-Heroku-Dynos-In-Use, X-Heroku-Queue-Depth i X-Heroku-Queue-Wait-Time dla żądań przychodzących.

John Beynon
źródło
12
Aby spojrzeć na logi routera heroku, zróbheroku logs -p router --tail
Nathan Hurst
1
Nie widzę wartości kolejki Widzę dyno = web.1 connect = usługa 2ms = status 4ms = 200 bajtów = 43
Jaqx
8
Dlaczego je usunęli?
Attilio,
6
Nadal możesz uzyskać te informacje, włączając dodatek Heroku Labs log-runtime-metrics. Uruchom następujące polecenie, aby to zrobić, heroku labs:enable log-runtime-metrics. Przeczytaj więcej tutaj: devcenter.heroku.com/articles/log-runtime-metrics
Jeremy Fox
3
stackoverflow.com/a/19965981/1233555 - Heroku przeszło na losowy routing, więc niektóre hamownie mogą mieć kolejki, podczas gdy inne są bezpłatne. Unikaj tego, upewniając się, że wszystkie żądania są obsługiwane bardzo szybko w twoich internetowych hamowniach.
ChrisPhoenix
15

Dynos to w zasadzie procesy, które działają w Twojej instancji. Dzięki nowemu stosowi Cedar można je skonfigurować do wykonywania dowolnych poleceń powłoki. W przypadku aplikacji internetowych masz zwykle jeden proces zwany „siecią”, który odpowiada za odpowiadanie na żądania HTTP użytkowników. Wszystkie inne procesy nazywano wcześniej „pracownikami”. Działają one nieprzerwanie w tle, wykonując zadania takie jak cron, kolejki przetwarzania i wszelkie ciężkie obliczenia, których nie chcesz wiązać z procesami sieciowymi. Możesz również skalować każdy typ procesu, tak aby wiele procesów każdego typu zostało uruchomionych w celu uzyskania dodatkowej współbieżności. Ilość każdego, którego używasz, naprawdę zależy od potrzeb twojej aplikacji i obciążenia, jakie otrzymuje. Możesz użyć narzędzi takich jak wtyczka New Relic do monitorowania tych rzeczy.

Jimmy Cuadra
źródło
1
„Dynos to w zasadzie procesy działające w Twojej instancji”. To jest błędne stwierdzenie. Dyno istnieją w różnych przypadkach.
Neil Middleton
9

Wiele osób wspomniało, że nie ma znanego współczynnika i że stosunek pracowników internetowych do pracowników „w tle”, których będziesz potrzebować, zależy od tego, jak zaprojektowałeś swoją aplikację - to prawda. Pomyślałem jednak, że warto byłoby dodać, że ogólną zasadą jest, aby Twoi pracownicy sieciowi - a tym samym działania kontrolera, które obsługują - były błyskawiczne i bardzo lekkie, aby zmniejszyć opóźnienia w czasie reakcji z działań przeglądarki. Jeśli jakaś czynność w przeglądarce wymagałaby więcej niż, powiedzmy, około pół sekundy czasu rzeczywistego, to prawdopodobnie będziesz chciał zaprojektować jakiś rodzaj systemu, który spycha większość tej czynności do kolejki.

Następnie należy zaprojektować hamownię pracującą w trybie offline, która będzie obsługiwać tę kolejkę. Może to potrwać znacznie dłużej, ponieważ na ich wyjściu nie ma oczekujących odpowiedzi HTTP. Być może strona wyrenderowana na podstawie pierwotnego żądania przeglądarki, która przekazała akcję, będzie obsługiwać skrypt JavaScript, który uruchamia wątek sprawdzający, czy żądanie zakończyło się co 5 sekund, lub coś podobnego.

Nadal nie mogę podać współczynnika do pracy z tego samego powodu, dla którego podali inni, ale mam nadzieję, że pomoże ci to zdecydować, jak zaprojektować twoją aplikację. (Powinienem również wspomnieć, że jest to tylko jeden projekt z wielu ważnych.)

eblume
źródło
3

https://stackoverflow.com/a/19965981/1233555 - Heroku przeszło na losowy routing, więc niektóre hamownie mogą ustawiać kolejki (podczas gdy obsługują długie żądania), podczas gdy inne hamownie są bezpłatne. Unikaj tego, upewniając się, że wszystkie żądania są obsługiwane bardzo szybko w twoich internetowych hamowniach. Zmniejszy to liczbę potrzebnych hamowni internetowych, jednocześnie wymagając większej liczby hamowni roboczych.

Musisz także zadbać o swoją aplikację internetową obsługującą współbieżność, co robią tylko niektóre konfiguracje Railsów - wypróbuj Unicorn lub starannie napisany kod (dla I / O, który nie blokuje EventMachine) z Thin.

Prawdopodobnie będziesz musiał spróbować zamiast obliczać, ile potrzebujesz hamowni każdego rodzaju. Upewnij się, że ich New Relic zgłasza kolejkę hamowni - zobacz powyższy link.

ChrisPhoenix
źródło
1

Krótka odpowiedź jest taka, że ​​potrzebujesz tylu, ile potrzebujesz, aby utrzymać swoje kolejki w dół.

Jak opisuje John, jeśli zaczniesz widzieć kolejkę w swoich dziennikach, potrzebujesz więcej hamowni. Jeśli zaczniesz widzieć zbyt długie kolejki w tle (sposób uzyskania tych informacji zależy od tego, co zaimplementowałeś), potrzebujesz więcej pracowników.

Nie ma współczynnika, ponieważ jest on bardzo zależny od projektu i wykorzystania aplikacji.

Neil Middleton
źródło
1
Ok dzięki. Zakładam, że przez hamownie masz na myśli platformy internetowe. Jak mogę sprawdzić kolejkę w moim dzienniku? Dokładniej, pytam o to, w jaki sposób mogę zidentyfikować, czy rzeczy gromadzą się, kiedy czytam mój dziennik? Jestem programistą Rails, więc często mam do czynienia z uruchamianiem lokalnego serwera i czytaniem tych logów, ale nie jestem pewien, czy wiedziałbym, jak zidentyfikować kolejkę, gdybym ją zobaczył.
varatis
1
moja odpowiedź opisuje, jak określić rozmiar kolejki - wystarczy, że logujesz się do heroku i szukasz wpisów routera oraz kolejki = wartość. Twoje lokalne dzienniki ci nie pomogą - musisz używać heroku logs -fz wiersza poleceń.
John Beynon
1
@JohnBeynon Ok, dzięki. Nie zdawałem sobie z tego sprawy, aż do późniejszego ponownego przeczytania.
varatis