#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:
Просто чтобы документировать вещи, которые возможны для других людей, у которых может возникнуть тот же вопрос, и которые не знают, как это сделать, я помещу здесь несколько ссылок, которые я нашел, которые могут быть полезны.
Я пока не проверяю ни одной идеи, чтобы сказать, какая из них быстрее, или дешевле, или оптимизирована…
Но то, что я нашел, это:
-
Вы можете использовать https://restrserve.org / это альтернатива plumber, даже когда plumber был просто однопоточным, restrserve уже был полезен для создания многоадресных API.
-
8 дней назад plumber выпустил версию 1.0.0, которая может поддерживать многопоточность API. Ссылка на релиз: https://www.rplumber.io/news/index.html#plumber-router
-
Даже в прошлом, без 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/