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!, граждане...

1212
18 комментариев

Никаких санкций в сервисах от Гугл нет (только для крыма). Вы не умеете пользоваться.

5
Ответить

Использую Firebase для пары небольших приложений, но на английском. Ранее не видел консоли в Firebase на русском. 
Так или иначе, в своем Google аккаунте вы можете установить язык по умолчанию и он всегда будет применяться в сервисах Google. 

Я ставил и русский и украинский - консоль не менялась, оставалась на английском. Поэтому, если санкции и ввели, то по отношению украинского язык тоже. 

Искать негодования в принципе работы саппорта я бы тоже не стал. У Гугла есть две проблемы - саппорт и документация. И то и другое, по сути, отсутствует, либо работает через одно место. 

А по поводу карт пользователей так и не понял из текста.
У вас часть проекта лежит на Firebase. Вы баланс пополняете и можете использовать ресурсы сверх лимита. 
Каким боком здесь пользователи и их карты? Или они напрямую взаимодействуют с каким-то инструментом Firebase и оплачивают какую-то сумму? Не увидел этого в тексте. 

4
Ответить

У firebase есть платный тариф Blaze. Чтобы его активировать нужно подключить к своему гугл-акку карту. Вот с прикреплением карты и возникает проблема - гугл тупит и выкидывает либо ошибку, либо зависает, либо рекомендует обратиться в саппорт. В саппорте, как Вы правильно написали просто сливают. 

Ответить

Использовали авторизацию на сайте по смс. К сожалению, как только начал РКН резать скорость твиттеру, так сразу пошли проблемы с доставкой смс. По конфигу сервер хранения был *.appspoT.COm. Насколько случайными были эти события не выясняли, но переехали на другие способы доставки смс с кодами и до сих пор не пожалели

2
Ответить

Спасибо. Не думал в эту сторону. Возможно, действительно, как и с телегой под раздачу половина интернета пошла

Ответить

Здравствуйте! А подскажите, пожалуйста, на какой сервис переехали? А что используете сейчас?

Ответить

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

1
Ответить