Size: a a a

2021 April 08

ŹR

Źmićer Rubinštejn in pro.elixir
Хотя типо в эрланге во всех там foldl нонстопом херачится десятиэтажные лямбды и всем покер
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Хз короче. Не знаю почему мне не нравится, но почему-то
источник
2021 April 09

AD

Aaron Delarge in pro.elixir
А в чем смысл использования handle_call  в genserver?🤔 если это синхронный вызов, мб имеет смысл вынести его в слой api приложения?
источник

AN

Alexey Neyman in pro.elixir
Синхронность тут говорит только о том, что вызывающему интересен ответ/результат вызова
источник

Н

Николай in pro.elixir
Иногда бывает полезно притормозить вызывающий процесс: т.н. backpressure.
источник

Н

Николай in pro.elixir
Кстати в каких ситуациях нужен этот backpressure?😄
источник

Н

Николай in pro.elixir
Получается он нужен только в критических случаях когда ресурсы истощены?
источник

P

Pavel in pro.elixir
cast и прочее только выглядит «веселее» на самом деле вместо того, чтобы GenServer умирал так, чтобы это было видно кому-то он помирает втихую. Не обязательно истощение ресурсов для того, чтобы реализовывать backpressure. Самое простое: у тебя есть api endpoint в который ходят люди, он редкий и занимается чем-то долгим и может отвечать к примеру без удостоверения того, что он это реально сделал
источник

Н

Николай in pro.elixir
Так ведь логируются же падения🤔 Может в логгере надо специально что-то включить, но видел что логировалось на одном проекте.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Что за «слой Апи» приложения?
источник

Н

Николай in pro.elixir
Насколько я понял суть backpressure как раз в том чтобы притормозить caller. Разве нет?
источник

Н

Николай in pro.elixir
Т.е. это не просто rate limit.
источник

P

Pavel in pro.elixir
Backpressure это значит, что если ты можешь обработать 1 запрос в секунду то не должен складывать в очередь их сотнями в секунду. Пошел в API и получил ответ за 1мс (а в бекграунде эта джоба делается секунду и у тебя запущен там GenServer, который через cast это обрабатывает). Вот тут тебе был бы полезен backpressure. Не отвечать пока ты не обработаешь.
источник

AD

Aaron Delarge in pro.elixir
Это один из моментов, вызывающих у меня вопросы по архитектуре приложений. Я вижу это так: Приложение предоставляет некий API вида login(), check_permission(), create_user() на верхнем уровне e.g. User.login(). Этот слой обращается к GenServer, который уже обращается в сервисный слой приложения. Я сформировал эту картину буквально на примере единственного проекта из курса, с которого начинал изучение эликсира, и пока не нашел подтверждения/опровержения его корректности(
источник

Н

Николай in pro.elixir
Понятно, спасибо. Ну да, по сути получается в случае недостатка ресурса 🤔
источник

Н

Николай in pro.elixir
Я в таких случаях смотрю какой-нибудь толково написанный проект: а как организовано там.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
GenServer хранит состояние. Если нету состояния - не нужен генсервер.

Правила вида «всегда есть слой Апи, потом есть сервисный слой и они общаются там как-то» это хуйня какая-то
источник

Н

Николай in pro.elixir
Кстати посоветуйте качественно написанные веб приложения какие-нибудь с исходниками? Что-то не попадалось.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Мне тоже. Походу их не существует
источник

Н

Николай in pro.elixir
😄.
источник