Создание многопоточного API в R

#r #api #plumber

#r #API #водопроводчик

Вопрос:

Я подумываю о создании API с Rscript, который делает все мои вещи.

Но мы знаем, что R является однопоточным, и plumber также является.

Кто-нибудь знает способ создания многопоточного API в R? Я не думаю, что однопоточный может помочь мне в моем случае, у меня может быть много пользователей, использующих мою модель в prod, тогда я боюсь использовать plumber.

Я уже вижу, как люди говорят об использовании RServer и Java для создания многопоточного API. (но я не знаю, как это сделать).

Любые предложения или ссылки на это обсуждение приветствуются.

Спасибо вам всем!

Комментарии:

1. Взгляните на doParallel и foreach …

2. Как вы думаете, почему он однопоточный? Большинство библиотек R, которые используют многопоточность, такие как data.table и xgboost, будут многопоточными даже при использовании с plumber. Водопроводчик использует promises, поэтому у вас не должно возникнуть проблем с одновременной отправкой запроса к API.

3. @BrunoTremblay я видел в этом обсуждении о том, что водопроводчик должен быть однопоточным github.com/rstudio/plumber/issues/170

4. Проверьте верхний элемент в журнале изменений, rplumber.io/news/index.html

5. @BrunoTremblay omfg, черт возьми, да. Спасибо!

Ответ №1:

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

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

Но то, что я нашел, это:

  1. Вы можете использовать https://restrserve.org / это альтернатива plumber, даже когда plumber был просто однопоточным, restrserve уже был полезен для создания многоадресных API.

  2. 8 дней назад plumber выпустил версию 1.0.0, которая может поддерживать многопоточность API. Ссылка на релиз: https://www.rplumber.io/news/index.html#plumber-router

  3. Даже в прошлом, без plumber v1.0.0, или если вы не хотите использовать RestRserve, вы могли бы создать однопоточный API с помощью plumber (в прошлом), использовать Docker для создания своего API, а затем использовать Kubernetes для управления запросами, создавая «копии»ваш API, а затем Kubernetes управляют запросами, выбирая copy_API, который будет использоваться.

Доклад на RSTUDIO :: CONF2020 о модели, которая имеет 1.000.000 доступов в день, с R API: https://rstudio.com/resources/rstudioconf-2020/we-re-hitting-r-a-million-times-a-day-so-we-made-a-talk-about-it/