Heroku: Web Dyno проти Work Dyno? Скільки / яке співвідношення мені потрібно?


82

Мені було цікаво, яка різниця між веб-сайтом та робочим динозом на Heroku. Вони дають одне речення пояснення на своїй сторінці цін, але це просто збило мене з пантелику. Як я знаю, скільки вибрати з кожного? Чи існує коефіцієнт, до якого я повинен прагнути? Я досить новачок у цьому матеріалі, тож може хтось дати глибоке пояснення, або, можливо, якимось чином я можу підрахувати, скільки і якого типу диноза мені потрібно?

Крім того, мене бентежить, що вони означають під кількістю годин для кожного дино.

http://www.heroku.com/pricing

Я також трапився з цією статтею. Як одне із запропонованих ними рішень вони сказали збільшити кількість динозу. Про який тип дино тут говорять?

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

Відповіді:


58

Найкращим показником, якщо вам потрібно більше dynos (він же процес на Cedar), є ваші журнали героку. Переконайтеся, що ви оновили до розширеного журналювання (це безкоштовно), щоб ви могли перенести свій журнал.

Ви шукаєте записи heroku.router, і найбільше вас цікавить значення черги - якщо це постійно більше 0, це хороший знак, що вам потрібно додати більше dynos. По суті, це означає, що надходить більше запитів, ніж може обробити ваш процес, тому вони потрапляють у чергу. Якщо вони стоять у черзі занадто довго, не повертаючи жодних даних, у них буде вичерпано час очікування.

Немає ідеального співвідношення, боюся, у вас може бути додаток, який робить 100 запитів в секунду, потребуючи багатьох веб-процесів, але просто не використовує працівників. Вам потрібні робочі процеси, лише якщо ви виконуєте обробку у фоновому режимі, як-от надсилання електронних листів тощо.

ps Занадто глибоке відставання буде веб-процесом Dyno, який спричинить його.

ОНОВЛЕННЯ: 26 березня 2013 року Heroku видалив черги та поля очікування із виходу з системи.

Поля черги та очікування були видалені з повідомлень журналу маршрутизатора. Крім того, маршрутизатор Heroku більше не встановлює заголовки HT-X-Heroku-Dynos-In-Use, X-Heroku-Queue-Depth та X-Heroku-Queue-Wait-Time для вхідних запитів.


12
Щоб переглянути журнали маршрутизатора героку, зробітьheroku logs -p router --tail
Натан Херст,

1
Я не бачу черги val Я бачу dyno = web.1 connect = 2ms service = 4ms status = 200 bytes = 43
Jaqx

8
Чому вони їх прибрали?
Аттіліо,

6
Ви все ще можете отримати цю інформацію, увімкнувши надбудову Heroku Labs log-runtime-metrics. Виконайте наступну команду, щоб зробити це heroku labs:enable log-runtime-metrics,. Детальніше тут: devcenter.heroku.com/articles/log-runtime-metrics
Джеремі Фокс

3
stackoverflow.com/a/19965981/1233555 - Heroku перейшов до випадкової маршрутизації, тому деякі динози можуть мати черги, що складаються, тоді як інші динозаври вільні. Уникайте цього, переконавшись, що всі запити обробляються дуже швидко у вашому веб-динозі.
ChrisPhoenix

15

Dynos - це, в основному, процеси, які запускаються на вашому екземплярі. За допомогою нового стеку Cedar їх можна налаштувати на виконання будь-якої довільної команди оболонки. Щодо веб-додатків, як правило, у вас є один процес під назвою "веб", який відповідає за відповідь на запити HTTP від ​​користувачів. Усі інші процеси - це те, що раніше називали «робітниками». Вони постійно працюють у фоновому режимі для таких речей, як cron, черги обробки та будь-які важкі обчислення, за якими ви не хочете зв’язувати свої веб-процеси. Ви також можете масштабувати кожен тип процесу, щоб кілька процесів кожного типу завантажувались для додаткової паралельності. Кількість кожного, який ви використовуєте, насправді залежить від потреб вашої програми та навантаження, яке вона отримує. Ви можете використовувати такі інструменти, як плагін New Relic, щоб відстежувати ці речі.


1
"Dynos - це в основному процеси, які запускаються на вашому екземплярі." Це неправильне твердження. Dyno існує в різних випадках.
Ніл Міддлтон

9

Багато людей зазначали, що невідоме співвідношення, і що співвідношення веб-працівників та "фонових" працівників, яких ви захочете, залежить від того, як ви розробили свою програму - це правильно. Однак я вважав, що може бути корисним додати, що як загальне правило, ви хочете, щоб ваші веб-працівники - і, отже, дії контролера, які вони обслуговують - були блискавично швидкими і дуже легкими, щоб зменшити затримку часу відгуку на дії браузера. Якщо існує якась дія браузера, яка потребуватиме, наприклад, приблизно півтори секунди реального часу, то вам, мабуть, захочеться створити якусь систему, яка перетікає основну частину цієї дії в чергу.

Потім ви повинні створити офлайн-працівника, який обслуговуватиме цю чергу. Вони можуть зайняти набагато більше часу, оскільки відповіді HTTP не очікують на їх вихід. Можливо, сторінка, яку ви відтворили з початкового запиту браузера, який штовхнув дію, буде обслуговувати якийсь Javascript, який запускає потік, який перевіряє, чи завершено запит кожні 5 секунд, або щось подібне.

Я все ще не можу надати вам співвідношення для роботи з тієї самої причини, яку надали інші, але, сподіваюся, це допоможе вам вирішити, як створити архітектор вашого додатка. (Слід також зазначити, що це лише один дизайн з багатьох дійсних.)


3

https://stackoverflow.com/a/19965981/1233555 - Heroku перейшов до випадкової маршрутизації, тому деякі динози можуть складати черги (поки вони обслуговують тривалий запит), тоді як інші динози вільні. Уникайте цього, переконуючись, що всі запити обробляються дуже швидко у вашому веб-динозі. Це зменшить кількість потрібних веб-динозаврів, водночас вимагаючи більшої кількості робочих динозаврів.

Вам також потрібно подбати про свій веб-додаток, що підтримує паралельність, що роблять лише деякі конфігурації Rails - спробуйте Unicorn або ретельно написаний код (для вводу-виводу, який не блокує EventMachine) з Thin.

Ймовірно, вам доведеться спробувати, а не підрахувати, щоб побачити, скільки динозів кожного виду вам потрібно. Переконайтеся, що їхня нова реліквія повідомляє про чергу dyno - див. Посилання вище.


1

Коротка відповідь полягає в тому, що вам потрібно стільки, скільки вам потрібно, щоб утримувати черги.

Як описує Джон, якщо ви починаєте бачити чергу у своїх журналах, то вам потрібно більше динозаврів. Якщо ви починаєте бачити, що ваші фонові черги стають занадто довгими (спосіб отримання цієї інформації залежить від того, що ви впровадили), то вам потрібно більше працівників.

Співвідношення не існує, оскільки воно дуже залежить від дизайну та використання вашого додатка.


1
Добре, дякую. Я припускаю, що під dynos ви маєте на увазі веб-dynos. Крім того, як мені перевірити наявність черги в моєму журналі? Більш конкретно, про що я прошу, це як я можу визначити, чи щось накопичується, коли я читаю свій журнал? Я розробник Rails, тому я часто маю справу із запуском локального сервера та читанням цих журналів, але я не впевнений, що знав би, як визначити чергу, якби я її побачив.
varatis

1
моя відповідь описує, як визначити розмір черги - хвіст, який ви реєструєте на heroku та шукаєте записи маршрутизатора та чергу = значення. Локальні журнали вам не допоможуть - вам потрібно використовувати heroku logs -fкомандний рядок.
Джон Бейнон,

1
@JohnBeynon Добре, дякую. Не зрозумів цього до пізнішого перечитування.
varatis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.