V0
1. сделать запрос в сервис авторизации (недетерминированный эффект)
2. подтянуть данные из базы (недетерминированный эффект)
3. положить данные в локальный кеш (недетерминированный эффект ещё и с записью)
4. выдать метрики и логи (эффект, но можно игнорировать)
1. я думаю это про аутентификацию (т.е. узнать что "вот этот с кукой Х" это user-42) да? можно уйти на запрос="account based подписанный пейлоад" (как в ethereum) т.е. мы завязываем сущности не на тупой id serial, а на публичный ключ
2. это самое больное, если код написан в стиле find_or_create, да. но допустим, у нас cqrs и если мы идем читать, то там не может случайно оказаться записи в стейт
3. а это и есть одна из целей зачем мне отличать эффекты. system-write кешировать нельзя, system-read - можно, и если у нас eventual consistent = норма, то это не проблема закешить read на время. а если мы еще и можем backtrack зависимостей сделать, то и инвалидация будет не тупо по времени.
4. да, мне кажется метрики пока можно выпустить из виду, а логи.. если у нас стейт будет в time-aware базе типа датомика, то логи для system-read _не нужны_. это тоже одна из целей зачем отличать эффекты. с таким хранилищем состояния запрос который несет в себе timestamp - тоже, внезапно, чистая функция и можно только логировать вход
5. про напоминание backpressure спасибо, еще не думал про это 🙂
