Масштабирование сайта Ruby on Rails - PullRequest
1 голос
/ 05 августа 2010

Я занимаюсь разработкой приложения на Ruby On Rails и хотел бы развернуть его в производственной среде.У меня есть несколько одинаково настроенных веб-серверов Ubuntu, которые я могу использовать, но я не знаю, как масштабировать приложение RoR и данные БД на нескольких хостах.

Я бы хотел разместить и веб-сервер, и сервер БД на каждом хосте.

Со стороны веб-сервера / промежуточного ПО ruby, я бы хотел, чтобы сеансы управлялись мастеромвеб-сервер, который выполняет балансировку нагрузки на уровнях веб-сервера / промежуточного ПО ruby.Он должен передавать новые сеансы на свободные хосты.

Мне необходимо настроить балансировку нагрузки на стороне веб-сервера / промежуточного ПО ruby.Сеансы веб / промежуточного программного обеспечения должны быть атомарными (я не заинтересован в их репликации на нескольких хостах)

Я бы хотел, чтобы транзакционные данные, которые не были сохранены в БД, были записаны в промежуточный журнал повторного выполнения- для повторного запуска в случае восстановления после сбоя.

На уровне БД:

Я бы хотел, чтобы данные БД на любом хосте были реплицированы на 2 другиххосты.(каждый набор БД имеет 3 хоста БД)

Я не хочу, чтобы данные БД реплицировались на все хосты, потому что это занимает слишком много времени - латентность.

Я бы хотел поставитьалгоритм на месте, который будет направлять запросы типа create в нужную БД.На ум приходит балансировка нагрузки.

Главный контроллер БД должен знать, какой набор 3-БД следует использовать для запросов «обновление / чтение / удаление».

Мой тестовый веб-сервер - вебрик, ивнутренняя БД - это Postgresql (хотя это действительно не имеет значения для RoR).

Я считаю, что мне нужно привязать sessionId к каждой транзакции, а также вести журнал повторов на случай, если мне потребуется перезагрузить этот сеанспосле сбоя.

С какими еще проблемами дизайна я могу столкнуться?Кроме того, какой веб-сервер и сервер БД я должен использовать для выполнения работы?Что является хорошим выбором для главной БД и главных веб-серверов?

Я понимаю, что это сложная проблема, которая охватывает несколько областей знаний.Я хотел бы знать, возможно ли то, что я спрашиваю.

1 Ответ

2 голосов
/ 05 августа 2010

На моей последней работе нам очень повезло со следующей инфраструктурой:

1 балансировщик нагрузки -nginx

3 сервера приложений - тонкие

2 сервера mysql с избыточной записью

2 ящика для резервного копирования

В настоящее время у нас есть 4 довольно больших и критически важных приложения, работающих в этой среде. У нас есть два сервера приложений, которые позаботятся о пятом приложении.

если вам нужно больше, то, вероятно, вам лучше подойдет Heroku в отношении ROI. Проще говоря, heroku - лучшая ставка даже для небольших проблем с масштабированием, у вас есть кошмар в sys admin в приведенном выше плане.

...