Сколько экземпляров рельсов я могу запустить на одном сервере?

Я разработчик, пытающийся определить наилучший подход к приложению rails. Мне нужно предоставить несколько вариантов для развертывания, и я пытаюсь минимизировать как затраты на разработку, так и стоимость долгосрочного хостинга.

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

Хотя можно написать одно приложение rails, которое может различать "работы", с точки зрения кодирования может быть проще разместить каждую работу как собственное приложение rails. "Основное" приложение будет создавать / контролировать каждый экземпляр рабочего сервера, позволять просматривать работы в поиске авторов и быть центром отчетности для владельца сайта. А теперь предположим простейшую схему, где каждая работа использует специфичный для порта URL:

Master - http://collabowork.it
My Novel - http://collabowork.it:3001
Some Manual - http://collabowork.it:3002
Another work - http://collabowork.it:3003

Мой вопрос: сколько экземпляров рельсов я смогу запустить на одном ящике, прежде чем он будет перегружен? Есть ли способ определить, сколько экземпляров можно запустить на обычном сервере? Есть ли другой вариант, который позволил бы масштабировать дополнительные работы недорого (возможно, на EC2 или что-то подобное). Поскольку это не задумано как прибыльное предприятие, это самый дешевый способ его развертывания (если не считать дополнительных усилий по написанию кода). Я хотел бы провести некоторый анализ затрат, прежде чем предлагать альтернативы, но я не знаю, как начать оценивать что-то подобное.

Любые идеи или мысли приветствуются.

1 ответ

У меня есть нечто очень похожее на то, что у вас есть.

У нас есть одно приложение, расположенное в одном каталоге. Это приложение настроено для нескольких клиентов. Единственная разница между каждым клиентом - это база данных, которую он использует. Когда мы настроили его, я решил, что иметь разные порты для каждого клиента не очень красиво, поэтому мы выбрали другой подход.

Я знаю, что Apache не очень популярен на Rails-сцене, но все еще является отличным программным обеспечением. Мы использовали виртуальный хост на основе имени Apache для решения этой проблемы вместе с Passenger3. В новой версии вы можете определить RailsEnv для каждого виртуального хоста, используя тот же каталог приложения. Директива называется "PassengerAppGroupName".

Вы получаете виртуальный хост, выглядящий примерно так:

<VirtualHost _default_:80>
        ServerName preprod.xxxx.fr
        DocumentRoot /var/xxxx/current/public/
        TimeOut 5000

        # Passenger directives
        PassengerHighPerformance on
        PassengerAppGroupName "preprod"
        RailsEnv preprod
        # Logging
        ErrorLog /var/log/apache2/preprod-error.log
        CustomLog /var/log/apache2/preprod-access.log combined

</VirtualHost>

Я думаю, что этот пример должен прояснить ситуацию. Это решение позволяет вам отделить ваши приложения, используя HTTP-хост, используемый для подключения к нему.

Подводя итог, если "работы" имеют одинаковую кодовую базу, все вы можете использовать это чистое решение IMHO.

РЕДАКТИРОВАТЬ: С точки зрения производительности, Apache/Passenger требует 512 МБ оперативной памяти. Я обнаружил, что все, что ниже, приведет к плохой производительности, но YMMV. Я не верю, что требуется больше оперативной памяти, если вы добавите больше виртуального хоста.

Другие вопросы по тегам