Доступ к ресурсам папки сеанса в OpenCpu с несколькими экземплярами - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть сервер Opencpu с моим пакетом.Этот пакет содержит функцию, которая генерирует изображение графика.Когда я отправляю POST-запрос этой функции через Opencpu, я получаю идентификатор сеанса в ответ, который, в свою очередь, на самом деле является папкой на сервере Opencpu, содержащей ресурсы, а именно изображение.Я передаю этот URL-адрес изображения (обслуживается сервером Opencpu) своему приложению, и оно использует его для создания отчета в формате PDF.

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

Как я могу подойти к решению этой проблемы?Одна вещь, которую я сделал на данный момент, это загрузка изображения в какой-то публичный экземпляр и возврат соответствующего пути к приложению.Но это слишком тесно связано.

Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2018

Балансировка нагрузки всегда немного сложна, поэтому, если возможно, это проще просто перейти на больший сервер. Большинство (облачных) провайдеров предлагают (виртуальные) экземпляры со многими ядрами и 100 ГБ + ОЗУ, что позволит вам поддержка многих пользователей.

Если вам действительно требуется балансировка нагрузки, есть несколько способов. Одним из подходов является сопоставление каталога ocpu-store на серверах ocpu с общий сервер NSF. По умолчанию opencpu хранит все сессии в /tmp/ocpu-store каталог на сервере. Вы можете установить другое местоположение, установив tmpdir вариант в вашем /etc/opencpu/server.conf. Существует пример файла конфигурации, который устанавливает tmpdir в /etc/opencpu/server.conf.d/ec2.conf.disabled на вашем сервере (переименуйте, чтобы активировать).

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

Очевидно, этот метод требует, чтобы клиенты не меняли IP-адрес во время сеанса. А также это будет эффективно только в том случае, если у вас есть клиенты, соединяющиеся из варианта IP-адресов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...