Главное Авторские колонки Вакансии Образование
3 838 17 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Личный опыт: Что делать, когда пользователей больше 750 000

Так получилось, что мой Voicy бот в Telegram сегодня перескочил важный психологический барьер в 270 000 установок в чаты, а общее количество людей в этих чатах перепрыгнуло за 750 000. Как полагается, дело не обошлось без проблем — были скачки до 50 000 новых чатов в сутки, что заставило меня оптимизировать код и работать с гигантским количеством вопросов. Как я с этим разобрался — об этом и статья. Приятного чтения!
Мнение автора может не совпадать с мнением редакции

Сразу же хочу оговориться: количество людей я считал в активных чатах (читать: в чатах, из которых Voicy не удалили). Помимо статистики по пользователям, можно еще упомянуть, что @voicybot за последние три месяца успешно перевел в текст более 10 000 000 секунд речи — это мой первый собственный проект, который разошелся таким тиражом.

Поехали!

Какие проблемы были на сервере?

Так как я считаю своим основным профилем iOS разработку, я сразу написал небольшой widget для локскрина под айфончик, который выдает статистику за последние 24 часа по количеству обработанных аудио файлов в час, общему количеству чатов в системе и общему количеству обработанных голосовых сообщений. Этот виджет позволяет мне одним махом оценить несколько показателей:

  • Насколько активно люди использовали @voicybot за последние сутки
  • Были ли какие-то сбои в работе бота (если нет войсов за определенный час — бот лежит)
  • Насколько много чатов добавилось в систему с последнего раза, когда я смотрел на виджет

К сожалению, большая часть пользователей бота живет со мной в другом часовом поясе — в восточном полушарии. Поэтому иногда, просыпаясь, я видел по 5-6 часов простоя да 10-15 диалогов с незнакомцами в Telegram, оповещающими меня о том, что бот почему-то не работает. Естественно, такие дни у меня начинались с паники и попыток поднять сервис (благо, всегда удачно). Решил проблему с падением войси рефакторингом некоторых частей кода, правки сообщений об ошибках и настройкой перезапуска серверного приложения после крэша.

Другая проблема — это скорость работы бота. Иногда я просыпался, смотрел на статистику и видел, что все отлично. Но в личке оказывалось несколько диалогов о том, что Войси отвечал по 1-2 минуты на голосовое сообщение — непорядок! Здесь меня, к сожалению, немного подвела архитектура используемой базы данных — MongoDB. Оказалось, что на недостаточно мощной серверной машине, 500 000 запросов в сутки на поиск по базе из 1 500 000 записей могут занять заметное время.

По-началу, я, испугавшись, просто увеличил ресурсов на сервере в 4 раза — что сильно сказалось на моем кошельке (работа Войси стала реально дорогой). После, я начал копать глубже, заметил пару-тройку неправильных подходов в работе бота и, потратив пару дополнительных часов на разработку, снизил нагрузку на базу данных в шесть раз. После, я пробовал уменьшать размер ресурсов сервера таким образом, чтобы получить оптимальный ценник с максимально быстрым ответом бота. Работа бота теперь не давит на мой кошелек — победа! 2-3 запроса на обработку голосовых сообщений в секунду теперь нагружают систему только на 30% — оставил запас.

Еще один момент всплыл, когда я открыл статистику пользователям на официальном сайте бота. Судя по графику на GitHub, на этот сайт заходило 10-15 человек в сутки — наврятли статистика им была настолько нужна. Однако в связи с недостаточно оптимизированным выводом статистики, ее вызов мог ненадолго всецело нагружать базу данных.

В последствии, какие-то умные граждане далеких государств начали дико DDoS'ить и обузить вывод статистики, что начало сказываться на работе всего бота. Что поделаешь — я закрыл доступ публике к статистике (все равно на нее никто не смотрел), а серверный код поправил, добавил кеширование. Таким образом, можно сказать, я спас сервис от недоброжелателей.

Какие вопросы люди задавали в личке?

Стоит заметить, что примерно 200 000 чатов из общего количества — жители Ирана; настолько у них популярен Telegram. Поэтому чаще всего в личку мне сначала прилетали вопросы на Фарси. К сожалению, Персидского я не знаю, поэтому поставил себе бота-переводчика и форвардил к нему все сообщения, которые не мог прочесть — он же, в свою очередь, радовал меня хоть и местами корявым, но понятным мне английским.

Следующее, что я делал — это уведомлял собеседника о том, что умею говорить только по-английски. Я так понял, говорить о собственной русскоязычности было излишне — навряд ли это могло как-то помочь. Так как Telegram позволяет кому угодно написать мне сообщение, имея мой username, чатов было много. Что поделаешь — отвечал всем.

Интересная особенность жителей Ирана — они очень любят посылать эмодзи с розой. Каюсь, мало что знаю о их культуре, но, полагаю, роза — это символ благодарности. Так же, не повторяйте моей ошибки: в описании бота я указал свой username, как создателя. Почему-то после этого пользователи начали отсылать голосовые сообщения на разных языках мне, а не Войси. Удалив ссылку на себя, я решил эту проблему. Оставил свои контакты только в help команде бота.

Помимо всего прочего, ботом активно пользуются в Иране, Бразилии, Германии, Китае, России и некоторых других странах. Мне пришлось прикрутить локализацию к боту на английский, русский, испанский, китайский, персидский, арабский, немецкий и два диалекта португальского.

Какие проблемы возникали с оплатой?

Войси изначально бесплатный бот, так как использует бесплатный сервис wit.ai для распознавания речи. К сожалению, у этого провайдера есть ограничения — когда у Google Speech их нет. Однако Google Speech совсем не бесплатный, и мне пришлось добавить возможность покупать секунды Google Speech для чатов. Систему оплаты я прикрутил от Stripe.

Спустя пару месяцев работы бота, мне написал житель Ирана, чем сообщил, что иранские банковские карты не принимаются в Stripe. Покопав глубже, я обнаружил, что Иран-то под санкциями, и вообще никто не может принимать их платежи! Естественно, я попробовал найти какую-то альтернативу. А то, как это так? 200 000 пользователей и не могут платить за сервис?

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

В итоге, я связался с одним из сервисов в Instagram, а с двумя другими по email. Естественно, писал я все по-английски. Сервис, с которым я связался в Instagram, в итоге, поделился со мной контактами англоязычного работника. Из трех сервисов, которым я написал по электронной почте, мне ответили только два спустя 2 и 3 недели соответственно. К сожалению, никто из них до этого не работал со Stripe, и мне пришлось как-то на пальцах объяснять, что же мне нужно.

В итоге, увидев официальное подтверждение от Павла Дурова о грядущем введении оплаты внутри Telegram и пообщавшись с официальной техподдержкой разработчиков ботов, я решил бросить эту затею и дождаться нативного решения. Сейчас бот приносит стабильно $100-$150 в месяц от людей, которые профессионально пользуются Voicy. Например, есть одна сеть магазинов в России, у которой весь менеджмент клиентов настроен в Telegram. Вместо часового прослушивания звонков клиентов, они теперь могут удобно видеть транскрипции разговоров.

Какие проблемы возникли со speech-to-text провайдерами?

@voicybot использует три движка распознавания речи на выбор: либо wit.ai (бесплатный, с множеством языков, но с ограничением в 50 секунд), либо Yandex SpeechKit (бесплатный, без ограничения по времени, но поддерживающий только 4 языка), либо Google Speech (платный, с тучей языков и без ограничения по времени). И со всеми у меня были те или иные проблемы, в том числе, и из-за масштабов работы бота.

Wit.ai оказался наименее проблемным — прикрутил бесплатный движок, но пришлось обрабатывать ограничения. Кроме того, пришлось хорошенько попотеть при интеграции оного в Войси — перегон форматов, отправка на сервер и тому подобное. К радости, с масштабами wit.ai работают отлично. Его я и поставил стандартным движком распознавания речи.

Google Speech оказался самым для меня дорогим. По дефолту, каждый чат имеет 60 секунд обработки голосовых сообщений при помощи этого провайдера — к слову, за последний месяц Google Speech обработал более 25 000 секунд, которые мне пришлось оплатить. В итоге, стоимость поддержки Войси складывается из серверных мощностей и бесплатного времени, подаренного пользователям. Проблем с интеграцией особо не было.

Yandex SpeechKit оказался чуть более проблемным. Во-первых, у них есть квота до 1000 бесплатно обработанных голосовых сообщений в сутки. Мне удалось поднять эту квоту до 5000 — победа, казалось бы. К сожалению, этот провайдер поддерживает только 4 языка, зато русский обрабатывает иногда лучше, чем wit.ai. Более того, мне пришлось поработать с очень экстравагантным способом отправки голосовых сообщений, чтобы обойти ограничение в 60 секунд аудио на один запрос. Зато ни у кого больше такой крутой фичи нет. К великому моему огорчению, иногда и этих 5000 запросов в сутки не хватает.

Что вам делать с этой информацией?

Выводов в статье можно насчитать несколько:

  1. Старайтесь писать чистый код на сервере, чтобы в любой момент за пару часов можно было поправить какой-нибудь неприятный баг
  2. Как можно скорее отвечайте на запросы людей в личку о том, что что-то не так с ботом
  3. Не спешите увеличивать мощности на серверах — возможно, ошибка кроется в вашем коде и недостаточной оптимизации
  4. Приготовьтесь, что большинство пользователей вашего бота будут не из России — лучше хорошо знать универсальный английский
  5. Учтите, что большая часть аудитории Telegram (Иран) сейчас под санкциями, и вам, скорее всего, будет сложно брать с них деньги, пока Telegram не зарелизит платежный инструмент
  6. Ваш сервис может внезапно стать популярным в очень неочевидных странах — подготовьте для этого локализации
  7. Не забудьте убедиться, что сервисы, на которых строится работа вашего продукта, отказоустойчивы к большой нагрузке

Такие дела. Надеюсь, вы нашли эту статью, как минимум, занимательной. Напомню, Войси оказался моим первым проектом, который так "выстрелил". Если вам понравилась статья, буду очень признателен, если установите @voicybot в паре чатов.

Я всегда открыт к вопросам — с удовольствием отвечу на них в комментариях. Спасибо, что дочитали до конца!

+4
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Johnny Kramer
Войси действительно хорош. Без шуток, он может быть очень полезен людям с проблемами со слухом, в т.ч. глухонемым.
Ответить
Controlio
Чертовски простая система отчетности
Nikita Kolmogorov
Интересно, не думал о подобном использовании. Спасибо!
Ответить
Роман Пинский
Больше чем уверен, что количество войсов Лекса переплюнуло весь Иран, Ирак и другие страны вместе взятые :)
Ответить
Controlio
Чертовски простая система отчетности
Nikita Kolmogorov
Вполне возможно!
P.S. для тех, кто не знает, Лекс — это один из чатланов в https://t.me/borodutcher — чат, где и зародилась идея Войси.
Ответить
Екатерина К
Интересная история, спасибо.
>>>Здесь меня, к сожалению, немного подвела архитектура используемой базы данных — MongoDB.

А как насчет индексов?
Ответить
Controlio
Чертовски простая система отчетности
Nikita Kolmogorov
Спасибо за комментарий!

Индексы и были частью решения, которое мне пришлось реализовать для оптимизации системы :) Жаль, пришлось делать кастомные — круто было бы, если бы они были из коробки.
Ответить
Igor Kravchenko
в смысле кастомные индексы?- там есть нормальные индексы, есть индексы по тексту в том числе, для супер поиска по тексту, насколько я знаю берут elasticsearch
Ответить
Controlio
Чертовски простая система отчетности
Nikita Kolmogorov
Имею ввиду те, для которых нужно дописать кода, чтобы они заработали.
Ответить
Igor Kravchenko
это какие?(пример?) и на чем писали код для них?
Ответить
Controlio
Чертовски простая система отчетности
Alex Fill
Решил посмотреть что это за тот, кликнул ссылку - сайт недоступен ))
Ответить
Controlio
Чертовски простая система отчетности
Nikita Kolmogorov
Только что проверил — все ссылки работают. Более того, все ссылки шли на сайт Telegram. Что именно не работает, говорите?
Ответить
Alex Fill
может что то не так делаю, по последней ссылке открывает адрес, который не работает
Ответить
Alex Fill
https://t.me/voicybot - вот эта не открывается
Ответить
Controlio
Чертовски простая система отчетности
Nikita Kolmogorov
Очень-очень странно, ведь это вполне себе корректная ссылка на сайт Телеграма :) попробуйте https://telegram.me/voicybot
Ответить
Dublway
Попутчики по городу и межгороду. Экономьте и знакомьтесь!
Victoria Shintekova
А Stripe в России тоже не работает вроде. Или все-таки он принимает российские карточки?
Ответить
Controlio
Чертовски простая система отчетности
Nikita Kolmogorov
Судя по моему опыту, банковские карты как России, так и Украины — принимаются. Вывод средств со страйпа, однако, в Россию осуществить сложно.
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.