2016-03-31 29 views
6

У меня нет тонны опыта с герою, а тем более с фениксом, так что это может быть глупый вопрос ... но хочу убедиться, что я делаю хороший выбор на хостинге :)Scaling phoenix on heroku

Из того, что я понимаю, то, как вы масштабируете феникс, добавляет еще один сервер, запускает другой узел и соединяет его, а затем пусть BEAM/OTP работает своей магией, чтобы справляться с балансировкой нагрузки. На heroku динозавры не могут действительно говорить друг с другом по локальной сети, что из того, что я понимаю, является тем, что BEAM требует кластера. Таким образом, добавление динамиков приведет к более «традиционной» модели масштабирования, где у вас есть балансировка внешних балансировщиков нагрузки между несвязанными узлами, при этом db является общим.

Мой вопрос: насколько большой эффект будет иметь это? Является ли это скорее всего лишь проблемой, когда вы нажимаете на серьезные уровни нагрузки/масштаба, или это означает, что нужно тратить гораздо больше денег на инфраструктуру?

ответ

7

Вы получите лучшую производительность на хост, который поддерживает кластеризацию, но Phoenix имеет систему PubSub адаптер именно для развертывания как Heroku: изменение конфигурации https://github.com/phoenixframework/phoenix_pubsub

одна строка и mix.exs DEPS запись, и вы» У вас есть многоканальные каналы на герою через наш адаптер Redis.

+0

- В Phoenix 1.2 установлен PG2-адаптер по умолчанию для PubSub; любая причина использовать Redis над текущим дефолтом по Heroku? Благодаря! – Svilen

2

Это очень открытый вопрос, поэтому я уверен, что мой ответ не будет исчерпывающим.

В вашей ситуации самый важный вопрос: Я буду использовать каналы Phoenix?

Если вы используете простой старый HTTP, он может быть в основном без гражданства. Существует множество методов для моделирования состояния, связанного с состоянием, например, хранения сессий в файлах cookie. В конце концов, не имеет значения, связаны ли ваши серверные серверы друг с другом, потому что каждый из них выполняет независимые вычисления. Ваш балансировщик нагрузки может произвольно выбирать любой сервер, и он всегда будет работать. Эта замечательная функция http позволяет этому протоколу масштабироваться так хорошо. Вы можете определенно использовать Heroku в этом сценарии, и он отлично подойдет.

Если вы используете каналы Phoenix, все становится сложнее. Вы по-прежнему хотите иметь возможность подключиться к любому из серверов, но вы, вероятно, будете отправлять сообщения другим пользователям в режиме реального времени, и они могут быть подключены к другим серверам. Phoenix решает эту проблему для вас путем кластеризации с использованием BEAM, и это будет сложно для Heroku. Или даже невозможно.

Подводя итог: это не вопрос мелкого масштаба/большого масштаба. Речь идет об особенностях. Для масштабирования каналов потребуется кластеризация, а масштабирование простого старого HTTP - нет.

+0

Это не большая стоимость, создающая приложение Phoenix для каждого дино (что басиально, что происходит)? Даже для простого старого HTTP? –

+0

Это не большая стоимость. Если вы сравниваете аналогичные приложения Phoenix и Rails, Phoenix должен иметь меньшую память и площадь процессора. Итак, если у вас заканчиваются ресурсы на одном дикторе, просто запустите еще один. – tkowal

+0

Я думаю, что это тоже смягчающая вещь, https://github.com/phoenixframework/phoenix_pubsub_redis благодарит за отличный ответ на не очень большой вопрос :) –