Firebase — наша история исхода с сервиса
Денис Гордиенко, генеральный директор Bright Mobile, о том, какие препятствия чинит Firebase российским пользователям.
Мои постоянные читатели наверняка помнят, что у нас есть заготовка для маркетплейсов услуг RTPlatform, и большую часть проектов последние несколько лет я запускаю именно на нём.
Суть его проста: вместо того, чтобы за большие деньги заказывать разработку с нуля, можно сэкономить, запустив приложение на заготовке, которое будет значительно дешевле при сохранении аналогичного функционала. При этом готовое решение всегда можно доработать под предпочтения клиента. Выгодно и мне, и клиенту: он тратит меньше денег, я трачу меньше времени.
В сегодняшней статье я хочу рассказать о кое-каких нюансах, которые появились у нас в 2021 году. Для того, чтобы всё было понятно, сначала проведу небольшой экскурс по технической части RTPlatform, затем перейду к проблемам, с которыми столкнулся я, а, возможно уже и вы, если в вашем проекте используется Firbase.
Как выглядит текущая архитектура RTPlatform?
- Есть Битрикс. Тут хранится сайт и API для мобильного приложения.
- Есть мобильные приложения, написанные на Angular и общающиеся с Битриксом по API.
- Есть Firebase: Битрикс, по крайней мере в базовом варианте, не устраивал скоростью работы, и для real-time функций мы задействовали Firebase.
Под real-time функциями я понимаю ситуации, когда нужен очень быстрый отклик сервера: отправка пуш-уведомлений, подписки по ним, внутренний мессенджер (у нас есть чат между заказчиками и исполнителями). Чтобы пользователям не приходилось ждать сообщений по целой секунде, я выбрал Firebase – это база данных реального времени, и за счёт того, что там постоянно держится socket-соединение, происходит моментальный обмен подписками.
Человек, который использует чат с мобильного приложения, подключается не к Битриксу, а к Firebase, на котором все диалоги и хранятся. Если нужно зайти в профиль мастера, пользователь запрашивает статические данные, а они хранятся в Битриксе. Грубо говоря, получается система, работающая с двумя серверными частями.
Какие появились проблемы?
Я уже давно пишу о нашем готовом решении и о вехах его развития, и эта статья как раз про одну из них. Проблема в том, что Firebase начал очень негативно относиться к российским клиентам. Не к пользователям приложения, а к пользователям продукта – т.е. к заказчикам, использующим его для своих проектов. Что же происходит?
Самое нестрашное, что случилось – это отключение русской локализации. Почему – непонятно. Скорее всего, причины политические: санкции, все дела. Потому что объективных причин с точки зрения разработки вырезать полностью русскую локализацию попросту нет. Поддержка тоже только на английском.
Всё бы ничего, если бы не одно но: с конца 2020 года некоторые клиенты стали жаловаться, что Firebase не принимает карточки, выпущенные российскими банками или банками в СНГ.
Я сначала отнёсся к проблеме достаточно скептически: решил, что случай единичный, и дело либо в карте, либо в вводе данных. Однако в 2021 году число таких обращений стало расти, и очень скоро уже больше половины клиентов, запускавших наше готовое решение, не могли авторизовать свою карту в Firebase.
То есть пользоваться его бесплатным тарифом они по-прежнему могут и сейчас, но при превышении трафика происходит не списывание, как должно быть, а блокировка, и пользователь, который заходит в приложение посмотреть диалоги, видит вместо чата пустой экран.
Эта проблема уже серьёзная. Я думал было как-то решить её руководством – решил, что нужно расковырять Firebase, чтобы они починили. Но техподдержка отвечает очень неохотно, хотя объективных причин тому я снова не нашёл. Ладно бы прямо сказали: вы русские, вы под санкциями, мы вас не любим – всё было бы ясно. Неприятный, но хотя бы честный ответ, есть от чего отталкиваться. В данной же ситуации непонятно, куда ступить: отвечают через раз, просто закрывая тикеты без ответа.
Что у нас находится на Firebase?
Первое – регистрация по СМС. В своё время мне понравилось, что гугл давал 10 тысяч бесплатных смсок в месяц (и сейчас даёт, просто если вдруг понадобится 10 001-ая, она не придёт, потому что не с чего будет деньги списать).
Второе – пуш-уведомления, гугловый FCM.
Третье – диалоги.
Что со всем этим делать?
Push, в фаебрейсе так и останется. FCM бесплатный, переживать, что не придёт пуш, не надо. Регистрацию по СМС – тоже. По крайней мере, у меня пока не было клиентов, которые сумели бы израсходовать весь пакет в 10 тысяч СМС.
Главный вопрос остаётся по диалогам и подпискам, ведь именно они едят больше всего трафика. Когда люди много начинают общаться и получать уведомления о новых заданиях, можно легко нарваться на перерасход. Что же делать?
Первое, что мне пришло в голову – перенести диалоги и подписки в Битрикс. С подписками, в принципе, сложностей нет: это легко мигрируется, потому что подписками пользуются не так часто, и задержка пуша в 1-1,5 секунды страшной не станет.
Другое дело – диалоги. Их придётся реализовывать как socket-соединение. Сокет, если совсем по-простому – это соединение, которое поддерживает моментальный обмен. По обычному АПИ нужно отправить запрос, дождаться json, распарсить его и вывести в виде сообщения, и на всё это уходит время. Как раз те самые одна-полторы секунды.
Сокет же – постоянно поддерживаемое соединение, а потому обмен данными с ним на порядок быстрее. Задержка тут может быть максимум в долю секунды, которая не так (или совсем) не заметна, и уже не раздражает. Так же у Битрикса есть Push&Pull, заточенный под работу в реальном времени.
Сначала мы перенесём подписки – это легко делается и так же легко внедряется. Затем диалоги – это посложнее, но реализуемо. Регистрацию по СМС и пуши пока останутся на Фаербейсе, посмотрим на дальнейшее развитие ситуации, возможно, они там так и останутся, возможно, их тоже придётся переносить на другой шлюз.
Теперь самое главное: новые клиенты получат это в текущей сборке, клиенты, которые уже пользуются не так сильно нуждаются в этом обновлении - у них карта уже привязана, но если сильно хочется, то подготовим перенос, как доработку и для них.
Как и писал выше не нашёл причин таких проблем Firebase, кроме политических. Ну что тут можно сказать... No pasarán!, граждане...