Я занимаюсь разработкой приложения на Ruby On Rails и хотел бы развернуть его в производственной среде.У меня есть несколько одинаково настроенных веб-серверов Ubuntu, которые я могу использовать, но я не знаю, как масштабировать приложение RoR и данные БД на нескольких хостах.
Я бы хотел разместить и веб-сервер, и сервер БД на каждом хосте.
Со стороны веб-сервера / промежуточного ПО ruby, я бы хотел, чтобы сеансы управлялись мастеромвеб-сервер, который выполняет балансировку нагрузки на уровнях веб-сервера / промежуточного ПО ruby.Он должен передавать новые сеансы на свободные хосты.
Мне необходимо настроить балансировку нагрузки на стороне веб-сервера / промежуточного ПО ruby.Сеансы веб / промежуточного программного обеспечения должны быть атомарными (я не заинтересован в их репликации на нескольких хостах)
Я бы хотел, чтобы транзакционные данные, которые не были сохранены в БД, были записаны в промежуточный журнал повторного выполнения- для повторного запуска в случае восстановления после сбоя.
На уровне БД:
Я бы хотел, чтобы данные БД на любом хосте были реплицированы на 2 другиххосты.(каждый набор БД имеет 3 хоста БД)
Я не хочу, чтобы данные БД реплицировались на все хосты, потому что это занимает слишком много времени - латентность.
Я бы хотел поставитьалгоритм на месте, который будет направлять запросы типа create в нужную БД.На ум приходит балансировка нагрузки.
Главный контроллер БД должен знать, какой набор 3-БД следует использовать для запросов «обновление / чтение / удаление».
Мой тестовый веб-сервер - вебрик, ивнутренняя БД - это Postgresql (хотя это действительно не имеет значения для RoR).
Я считаю, что мне нужно привязать sessionId к каждой транзакции, а также вести журнал повторов на случай, если мне потребуется перезагрузить этот сеанспосле сбоя.
С какими еще проблемами дизайна я могу столкнуться?Кроме того, какой веб-сервер и сервер БД я должен использовать для выполнения работы?Что является хорошим выбором для главной БД и главных веб-серверов?
Я понимаю, что это сложная проблема, которая охватывает несколько областей знаний.Я хотел бы знать, возможно ли то, что я спрашиваю.