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