Как стать автором
Обновить

Как мы боролись с проблемой разлогинов в приложении «Магнита» и возвращали пользователей обратно

Время на прочтение9 мин
Количество просмотров16K
Всего голосов 13: ↑12 и ↓1+15
Комментарии73

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

НЛО прилетело и опубликовало эту надпись здесь

Да, вы правы. Это техническая опечатка :)

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

попробуйте сейчас =)

А почему магнит до сих пор не сделает нормальных экспорт qr-кода в wallet? Он у вас динамически меняется и поэтому через какое-то время карта в кошельке становится не актуальна. Зачем тогда вообще делать это - не понимаю. Может поясните?

На добавление бонусов карта в wallet актуальна, на списание надо пользоваться приложением, тк там есть особенности связанные с фродом и ИБ

Так она и на добавление не работает. Проверил в каждом магните, в котором был в СПБ

Попробуйте удалить и добавить занового в wallet карточку, возможно вы попали на какой-то баг что был при их запуске (а он был).

НЛО прилетело и опубликовало эту надпись здесь

Cписание бонусов уходит глубоко во внутрь нашей CRM системы, которая для нас black box и там не все так просто как кажется на 1й взгляд

Интересные детали.

А будет подробнее про "возвращали пользователей обратно" ?

На целую статью я думаю не наберется, тут работали стандартные маркетинговые приемы, например пуш рассылки.

В приложении не хватает поиска товаров и было бы классно узнать стоимость товара отсканировав штрихкод, т.к. в магазине у дома полная неразбериха с ценниками которую не могут решить продолжительное время.

сканер штрифкодов классная фича, она у нас находится в backlog'е

Вы не ответили на главную часть вопроса: не хватает поиска товара. А ещё не хватает поиска конкретного товара по магазинам города. Вот приспичило супруге подарить конфкиы Merci, а мне пришлось 4 магазина объездить в поисках этих конфет. Понятно, что товар могут купить перед вашим носом, но всё же. Леруа же показывает, а значит функция вполне работает.

И кстати, вам бы и в леруа наладить разлогирование?

Согласен, что с поиском товара в конкретном магазине и среди всех магазинов еще надо работать. C этим, к сожалению, есть ряд проблем.

Я вам больше скажу, не хватает поиска товара ВНУТРИ магазина.

Вот пришёл я в новый магазин, или даже старый, но там гений-мерчандайзер опять полки передвинул. КУДА мне идти за условным пакетиком сливок, который я увидел в тележке проходящего мимо покупателя? Пусть телефон меня "за руку" отведёт к этой полке, используя хоть b4le маячки, хоть распечатанные и наклеенные на стену QR-коды.

---

@arxellи ещё, для сканера штрихкодов - требуется сеть, то есть интернет. То есть деньги и качество связи. Например в подвальных "Перекрёстках" с этим жжжжжж. Они, правда, пытаются это решить, видимо. Во всяком случае в их программе появилась функция "авторизация по Wi-Fi", но чтобы она работала - такого я не видел. Хотя казалось бы, чего проще-то? на входе в магаз QR-Code с настройками Wi-Fi, после чего программа лезет на фиксированный TCP-адрес (DNS может браться не из DHCP, а быть прибитым к какому-нибудь OpenDNS) и выясняет, в каком она магазе. А по Wi-Fi быстро и бесплатно сверяется с локальной БД магаза, чем по всей России зачем-то лезть через центральный мега-сервер. Но... завязка в программе у X5RG есть, а реально не работает. Это дважды бесит, что в программе у них и касса встроенная, чем париться в очереди - ткнул кнопочку в телефоне и на выход - а фиг вам...

Так мерчендайзер специально полочки передвинул. Это прям в их азбуке прописано, что нужно периодически менять товары с полками, чтобы вы обходили ВЕСЬ магазин в поисках сливок и попутно набрали полную корзину незапланированных товаров. Так что, сомневаюсь, что организуют навигацию внутри одного магазина. Внутри торгового центра -да.

Использование спецификации oauth2 с пониманием этой спецификации и осознанной настройкой токенов, на протяжении всего их жизненного цикла, сильно облегчило бы вам жизнь с самого начала.

А так прошли неплохой путь повышения инженерной культуры в конкретном продукте. Главное, не останавливаться на достигнутом)

Спасибо!

А проблему с тем что пароль было невозможно восстановить уже починили? СМС в принципе не приходили.

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

пароля больше нет, только OTP

В приложении Магнит Доставка всё еще разлогинивает.

передам коллегам из доставки, у них своя специфика

В России мы не нашли коммьюнити, которое бы помогло нам ...

Я нашел только один русскоязычный Telegram-канал ...

Простите, а зачем вам именно русскоязычные ресурсы? У вас нет в команде людей, которые знают (технический) английский?

Просто потому что было проще найти.

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

Вы сделали самое главное в приложении. В отличии от приложения для КБ, сделали функцию экспорта карточки в Wallet, а не заставили пользователей использовать карту только из приложения. Большое спасибо

Спасибо! Пока сделали лишь mvp, в apple/google wallet'ах можно еще много чего сделать.

Когда появится баг баунти программа у Магнита, такая же, как у Азбуки Вкуса?

Можно ссылку что за программа?

что-то страшно)

По-моему, это хороший вариант получать фидбек об уязвимостях, мотивация не эксплуатировать их на вашем приложении, а получать за это денежку в правовом поле

Субъективно, никогда не стоит рекомендовать кому-то завести Bug Bounty, если у них нет понимания, зачем им это нужно. Иначе будет, как у похожих компаний, когда у них нет инженерной культуры, чтобы понимать ценность посылаемых проблем, но при этом энергии менеджмента хватает, чтобы каждую проблему превращать в задачу по сохранению денег для менеджмента.

С одной стороны молодцы, что проделали такую работу.

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

C вашим мнение согласен, но если речь про keycloak, то мне он достался от аутсорсеров.

Уверен, что вы прекрасно знакомы с такими понятиями как technical debt и brownfield. И что с ними надо бороться, и чем раньше, тем лучше, а не тянуть лямку.

сейчас как раз строим roadmap развития нашей системы авторизации и отказа от keycloak в сторону чего-то самописного на основе ory/fosite

НЛО прилетело и опубликовало эту надпись здесь

redhat предоставляет свой keycloak
"Нам она не подошла, потому что они не дают поддержку «голого» Keycloak, а дополняют его разными фичами."

Сейчас мы смотрим в сторону ory/hydra, а также в сторону ory/fosite

НЛО прилетело и опубликовало эту надпись здесь

Раскрою немного наши мысли, почему мы начали смотреть другое решение:
- RedHat дает по сути другой продукт на базе keycloak с другой инфраструктурной начинкой - у нас итак Java решение размывало стек технологий, а тут стало бы еще больше
- Хороший такой vendor-lock в части технологий, поддержки, инфраструктуры. Авторизация для нас ключевой цифровой сервис, от которого нам нужна гибкость и возможность изменения быстрее того, что предлагает поставщик
- Все же RH-SSO и Keycloak больше относятся к системам класса Workforce IAM со всеми вытекающими особенностями. Для авторизации клиентов подходит больше Customer IAM, который по функциональности во многом схож, но имеет свои доп плюшки в виде интеграций с CRM, сервисом само регистрации, расширенными правилами политики безопасности, cloud ready архитектурой

Расскажите, почему ory?

Тоже на него поглядывал, но интересует взгляд в разрезе системы с большой нагрузкой и/или кубовыми интеграциями.

Зачем это все для мобильного приложения? все, что нужно для МП за пару дней пишется на той же nodejs+mongodb.

написать можно на чем угодно, проблема в том что изначально было выбрано не самое оптимальное решение

НЛО прилетело и опубликовало эту надпись здесь

мне кажется это тот момент когда самом популярное не значит самое хорошее

Именно так

Кроме разлогинивания приложения есть еще проблема. В моем локальном гипере "магнит семейный" плохо работает мобильный интеренет, и телефон на кассе регулярно сваливается с LTE на Edge. И когда в это время открываешь приложение для показа QR-кода, вместо кода можно бесконечно наблюдать заставку "Скрепыши3 Пора скрепышарить на всю!". И ее не закрыть, не скрыть.

Да есть такая проблема. Сейчас думаем как показывать карту на добавление баллов без интернета, также вы можете добавить карту в wallet и показывать его.

Тестируете скорость соединения до сервера, и если оно ниже допустимого, просто показываете карту, отключив просо и рекламу

прямо сейчас есть небольшой хак =)

включите режим полета и попадете в приложение

Здесь важно помнить, что Keycloak это все-таки java-машина, а она может ограничивать себя по потреблению памяти системы. Мы нашли настройку Xmx, которая отвечает за максимальное количество памяти для java-машины в Keycloak. Когда все пофиксили, то CPU упала, а память начала расти: 

Почему в логах не посмотрели причину падения?

ИМХО, причина очень простая и грустная: IT многих крупных компаний зависит от того, может ли оно нанять толпу кодеров, которые будут издавать Buzz Word или нет.

115 тысяч человек разлогинивает в сутки, но при этом мониторинг не реагирует на это? А после обновления всего 7 тысяч странных событий в сутки, но мониторинг все еще не реагирует? Потенциально, это куча срабатываний, которые надо разбирать, но этим занимается IT, которое не до конца понимает по логам, почему это вообще происходит? А если это серьезные случаи мошенничества? Где сквозные логи и отслеживание проблем?
С другой стороны, я крайне уважаю Магнит за то, что они рассказывают о внутренней кухне, о реальных проблемах, а на о том, с чем как будто сталкиваются компании, которые работают с огромным количеством клиентов.

сейчас есть и метрики и трейсы и сквозные логи на основе того же trace_id
тогда не было ничего =(

В логах не было информации, связанной с памятью. Плюс на память не думали , так как по объемам кейклок выел около 14 из 16 гб.

Если все таки решитесь остаться на keycloak, обновитесь на 15-ую версию. Там добавили наконец то "lazy start", значительно поможет со временем старта.

да, но так вот сходу обновиться с 12й до 15й у нас не получается

в этот процесс надо закапывать кучу ресурсов devops

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

Даааа, проблемка с переходом на новую версию есть, сам недавно перешёл с 6-ой на 15-ую, а мечтал перейти с 6-ой, ещё когда была 8-ая))
Но вот проблемка была у них с БД из коробки (H2 БД), а точнее с версией адаптера и вот только недавно решил таки проблемку и переехал)
В остальном мигрировать на новую версию проще чем кажется на первый взгляд, а я вот вообще не DevOps и делаю это сам, ну и масштабы у меня не такие огромные)
И да, 15 версия очень вкусная получилась)

У меня было такое - кассир просила обновить мое мобильное приложение, без этого не могла списать бонусы. Однажды я обновил приложение, стоя в очереди в кассе, прям перед покупкой, но это не помогло ))

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

Может, технологии Тандера уже ушли вперед, просто я давно в их магазинах не был.

@arxell огромная просьба не блокируйте интерфейс при запуске приложения и ожидания ответа от сервера. Объясню почему. В магазинах где я живу, часто связь на уровне edge и практически не работает. Я стою на кассе, запускаю приложение, и смотрю на заставку, жду пока приложение поймет, что до сервера не достучаться с таким уровнем связи, а это пустая трата времени и задержка очереди в магазине. В итоге перед запуском приложения перевожу телефон в режим полета и тогда приложение шустро запускается.

1) редис почему именно он. Внутри кейклоака есть встроенный infinispan и Действительно при больших нагрузках кэш надо выносить, но почему именно редис. и где кэш хранится сейчас?
2) "Мы нашли настройку Xmx, которая отвечает за максимальное количество памяти для java-машины в Keycloak." После всех махинаций с редисом огромными затратами по железу и даже настроенную связку с вашей CRM вы не ограничивали джаву машину?
3) "Так как многие пользователи используют пароли по типу «123…»" на уровне кейклоака разрешенный реджекс паролей разве не ограничили?
4) не слово не сказано как кластеризуете. мониторинг? какие метрики собираете. Используете jmx_exporter или keycloak-metrics-spi.

А так видно, что проделана огромная работа по улучшению сервиса авторизации, но статья кажется не полной.

1) не понял про редис и причем тут кейклок

2) она была ограничена 16гб и казалось , что все хорошо ведь выедала она только 14

3) пароли хранились в CRM

4) используем keycloak-metrics-spi

Давно точу зубы на ваше приложение. Красивое, в целом удобное, но! Это же не приложение — это 5 приложений, объединенных одним таббаром. Каждая вкладка независима от других, сама себе на уме, "всё свое ношу с собой, ни с кем не делюсь".

Нет, я понимаю, что такой подход как раз в духе современных веяний — модульность, независимость, loosely coupling, но как-то за всем этим забывают о том, что приложение предназначено для того, чтобы пользователям удобно было, а не для того, чтобы разрабы добавляли строчки в перечень освоенных скиллов и рассказывали потом на конференциях, как они мужественно внедряли VIPER.

Вот смотрите, предположим, юзер тапает по иконке, но приложение не запускается, а выходит из фона (потому что недавно оно уже запускалось). Мы на первой вкладке делаем pull-to-refresh, видим обновленный баланс бонусов и баланс Magnit Pay. Идем на последнюю вкладку — там цифры старые. Почему? А потому. Надо и там pull-to-refresh. Информация двух вкладок пересекается, легко и просто добывается с бэкенда вообще одним запросом, но нет — юзер должен сделать два. Ваш бэкенд должен обработать тоже два. Вы целую статью написали о том, как много у вас пользователей, как велика нагрузка на бэкенд — странно, что обрабатывать вдвое больше запросов в таких условиях не считается у вас непозволительной роскошью. Т.е. тут все в проигрыше — и вы, и пользователи. Зачем так делать?

Баланс Magnit Pay тоже добывается дважды, независимо, на двух разных вкладках.

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

Знаете, к чему приводит необновление данных? К тому, что я перестаю им доверять, и даже если они актуальны, принудительно обновляю их на всякий случай. Чтоб быть уверенным хотя бы на 99%. Т.е. разработчики намеревались получить вдвое меньше запросов, а получили вдвое больше. Ожидания vs реальность.

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

Звучит так чтобы вы очень хотите сделать наше приложение лучше, работу нужна? =)

Спасибо, у меня есть. :)

И вообще, "я тут перед вами не как лягушка стою, а как женщина" (С)

В смысле, не как разработчик, а как обычный юзер. :)

О, помню-помню как мы в своё время запускали первую версию МПМ на томкатах за двумя балансерами tengine между ними - это ведь был бекэнд первой публичной аппы Тандера в маркетах. А ещё примерно в это же время хоронили первую версию интернет-магазина на ATG+Endeca, к которой планировался-планировался в дальнейшем личный кабинет покупателя с бонусной системой, да так и не выпланировался.

До сих пор диву даюсь пошто ИМ закопали - в итоге уже вы его и бонусную систему всё-равно запустили, да только одними из последних в крупном российском ритейле, а мвидео до сих пор на Oracle Commerce живёт и в ус не дует.

ритейл сложная штука, сложно внедрять что-то новое, у моего отдела к счастью есть такая возможность

Странная статья.
"Однажды, копаясь в админке ...", "Мы нашли настройку Xmx..." Странно что не упомянута проблема поиска выхода из vi )))
Инженеры-то у вас есть вообще в команде, знающие или способные разобраться в протоколе oauth/openid-connect, ну или которые знают что такое вообще application server. По статье такое впечатление что в "Магните" сплошной молодой, дружный коллектив и google-driven-development.

Извините.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий