Как масштабируемо развернуть сайт [Ruby on Rails]?

Я работаю над своим [первым] стартапом уже месяц, и хотя до альфа-релиза, вероятно, еще как минимум месяц, я хочу знать, как правильно его развернуть. Сайт будет иметь первоначальную высокую нагрузку (сеть + ЦП) для нового пользователя, поэтому я думаю о создании отдельного сервера/очереди для этого начального процесса, чтобы он не замедлял работу сайта для существующих пользователей.

Основываясь на моих исследованиях, я в настоящее время склоняюсь к nginx + haproxy + unicorn/thin + memcached + mysql и развертыванию на Linode. Тем не менее, у меня нет предыдущего опыта ни в одном из вышеперечисленных; следовательно, я надеюсь использовать опыт сообщества.

  • Вышеупомянутая архитектура кажется разумной? Любые предложения/статьи/книги, которые вы могли бы порекомендовать?
  • Линод хороший выбор? Heroku/EY кажутся мне слишком дорогими (по крайней мере, до тех пор, пока у меня не будет достаточного дохода), но не упускаю ли я какой-то другой лучший вариант? МедиаТемпл?
  • Любые хорошие предложения по архитектуре балансировки нагрузки? Я все еще читаю об этом.
  • Лучше иметь 2 отдельных экземпляра сервера Rails на 2 отдельных линодах или запускать 1 экземпляр на линоде с удвоенной емкостью (с точки зрения ОЗУ/хранилища/пропускной способности)? Со скольких линодов я должен начать?
  • Какой дистрибутив Linux выбрать? (Linode предлагает 8 различных — http://www.linode.com/faq.cfm) Есть ли какие-либо относительные преимущества/недостатки между ними для сайта Rails?

Прошу прощения, если какие-либо из моих вопросов будут глупыми или противоречивыми; пожалуйста, объясните это моей неопытностью.


person Community    schedule 01.10.2010    source источник


Ответы (1)


Архитектура

Вы на правильном пути. Я лично предпочитаю Passenger тонкому/единорогу (давно запуская nginx для тонких бэкэндов) просто из-за удобства, но предлагаемая вами настройка довольно стандартна. Тем не менее, если вы используете Ruby 1.8.7, я бы порекомендовал вам рассмотреть REE + Passenger для экономии памяти фреймворка.

Размещение и балансировка нагрузки

Linode — это фантастика, и я использую их практически для всего, что могу, но вам нужно знать об ограничениях ОЗУ. Каждый процесс Rails использует нетривиальный объем оперативной памяти, и вам следует избегать загрузки машины в своп. Планируйте запуск достаточного количества экземпляров Rails на машину, чтобы выделение памяти составляло около 90% памяти на Linode. Скорее всего, вам понадобится еще один Linode, выделенный для вашей базы данных, хотя вы можете начать с них обоих на одном компьютере; просто будьте готовы отделить MySQL по мере роста. Вы можете настроить связь между Linodes в одном центре обработки данных на частных IP-адресах, которые не учитываются в вашей квоте пропускной способности.

Ваша стратегия масштабирования должна быть как можно более горизонтальной, поэтому я бы порекомендовал просто получить второй Linode и добавить его в свой пул haproxy, когда вам понадобится больше лошадиных сил — Linode берет с вас 20 долларов за дополнительные 512 МБ ОЗУ, или вы можете просто получить целый '. другой Linode (с процессором, оперативной памятью, жестким диском и пропускной способностью) за те же 20 долларов. Кажется, ничего сложного!). В случае с Rails экземпляр — это экземпляр, поэтому на самом деле не имеет значения, находится ли он на одной и той же виртуальной машине или нет, если время подключения к вашей машине базы данных или что-то еще более или менее одинаково. Вы можете запускать 10 линодов, каждый из которых запускает по 10 процессов Rails без особых проблем. Linode также предлагает аварийное переключение IP, так что, если ваш основной Linode (с haproxy) выйдет из строя, он может автоматически переключиться на вторичный Linode, на котором вы затем запустите haproxy и будете готовы действовать в том же качестве, что и первый.

Распространение

Честно говоря, это зависит от вас! Многие используют дистрибутивы Ubuntu или Redhat (CentOS/Fedora) — мне самому нравится CentOS — но на самом деле это то, что вам удобнее. Если у вас нет любимого дистрибутива, я бы порекомендовал попробовать Ubuntu/CentOS, так как они, как правило, довольно дружелюбны к новичкам и имеют чрезвычайно надежную поддержку сообщества.

Вы, вероятно, захотите выбрать 32-битный дистрибутив, если у вас нет веских причин выбрать 64-битный дистрибутив; 64-разрядные исполняемые файлы требуют больше оперативной памяти, чем их 32-разрядные аналоги, и, поскольку оперативная память, вероятно, является вашим самым ценным ресурсом, имеет смысл сохранять ее там, где вы можете.

person Community    schedule 01.10.2010
comment
Спасибо за ваш подробный ответ. Несколько дополнительных вопросов к вам: (1) Я использую Ruby 1.9.2. Есть ли у REE преимущество в этом случае? (2) Какое преимущество у Passenger по сравнению с Thin? - person Asif Sheikh; 07.10.2010
comment
Passenger автоматически управляет вашим кластером процессов. С тонкими вы должны управлять каждым бэкэндом вручную. Passenger также использует преимущества функции копирования при записи REE для совместного использования памяти фреймворка между серверными экземплярами, экономя оперативную память. Его также довольно просто установить и настроить. - person Chris Heald; 07.10.2010