В наших официальных каналах пользователи часто спрашивают нас, на каком этапе технической разработки в настоящее время находится команда и есть ли актуальные проблемы, с которыми она столкнулась. Мы подготовили отчет о работе технического отдела, чтобы максимально полно ответить на часто задаваемые вопросы и проинформировать наших подписчиков о ходе развития проекта.
Denim – тотальное обновление
Разработка нашего дейтинг-сервиса Denim началась в 2015 году и в планах был лишь одноименный сайт для знакомств. Как мы предполагали тогда, в техническом плане верстки и несложной разработки на популярном PHP, будет достаточно, обеспечив эффективность работы всей системы. Однако уже через несколько лет все это вылилось в создание целой инфраструктуры со своими сервисами API, сервисами по сбору статистики и аналитики, клиентскими частями (фронтендами, мобильными приложениями, маркетинговыми лендингами) и т.д. Со временем эти факторы умножились на высокую активность пользователей, которая естественным образом создает нагрузку. С учетом этих моментов было принято решение, что пора задуматься о переходе к enterprise разработке. А что в этом случае может быть лучше, чем большой и прекрасный мир Java? К тому же примерно в это же время произошел релиз четвертой версии фреймворка Spring framework, который мы решили использовать.
Казалось бы, на PHP тоже можно вести enterprise разработку, но один только факт того, что в данном языке программирования отсутствует поддержка перегрузки методов классов, а из-за слабой типизации интерфейсы становятся бесполезными в принципе, приводит в замешательство. К тому же простая задача отложенной обработки данных или создания воркеров упирается в отсутствие каких-либо адекватных средств создания многопоточных приложений. Также необходимо отметить методы создания пула соединений с базами данных и иными хранилищами, которые характеризуются трудностями.
Разрабатывать новые решения для нашего сервиса мы начали еще в момент старта ICO. Для внедрения нейросетей в формирование выдачи анкет в поиске нам необходимо было изменить подход к загрузке и хранению фотографий наших пользователей. Для анализа поведения клиентов нам нужно было обеспечить полное логирование (сохранение) всех действий пользователей (регистрация, просмотр анкет, отправка сообщений). Мы начали пересматривать всю нашу архитектуру в пользу микросервисов, которые позволили бы нам на отдельных серверах, в фоне получать и обрабатывать данную информацию.
Помимо всего прочего, выход на зарубежные рынки означает, что одним дата-центром не обойтись. Так как скорость доступа к одной основной базе данных из разных концов света сильно отличается в зависимости от геолокации. Поэтому перед нами встала задача децентрализации и репликации данных. Для внедрения блокчейна в том формате, когда пользователи подтверждают подлинность друг друга в реальном времени и в реальной жизни, нам необходимо внедрить абсолютно новый для нашего сервиса подход в части получения геопозиционной метки пользователей с целью ее хранения и обработки. Это, в свою очередь, тянет за собой задачи синхронизации ее сервером, специализированными хранилищами и последующей обработкой ее специальными микросервисами в фоновом режиме.
В итоге мы начали с внедрения криптовалют и токена в нашу систему обработки платежей и покупки услуг, что было связано с рядом сложностей, вызванных политикой третьей стороны. Далее мы были вынуждены отодвинуть внедрение нейросетей для анализа фотографий в пользу внедрения инструментов анализа поведения пользователей. Для решения этой задачи мы выбрали технологию Spring Integration в связке с RabbitMQ.
Внедрение многоуровневой аналитики
В качестве хранилища аналитических данных мы взяли решения от Google BigQuery. Само решение для сбора аналитических данных мы разработали в кратчайшие сроки. Внедрили в наше текущее API приложение сбор первоначальной аналитики и начали смотреть, какие данные и в каком количестве мы получаем, анализировать нагрузку в части сбора данных и в части их обработки в момент построения метрик. После непродолжительного использования данной связки технологического стека мы пришли к неутешительным выводам, что решение от Google нам не подходит, потому что скорость сбора аналитической информации 30 событий в секунду довольно низкая. Мы вынуждены были искать другое решение, которым в итоге стал ClickHouse. На выходе мы получили систему, которая обрабатывает в момент в тестовом режиме от 1 тысячи событий в секунду, а запрос на построение аналитических метрик не превышает в реальном режиме времени 1 секунды.
С задачей сбора данных для аналитики стояла похожая по своей сути задача доставки нотификационных сообщений для клиентов. Под нотификационными сообщениями понимаются смс-сообщения, пуш- сообщения и электронные письма. Опыт проведения ICO показал нам, что доставка тех же смс-сообщений в разные регионы мира – задача не из простых. Чтобы решить эту проблему, мы разработали сервис обработки и отправки нотификационных сообщений с возможностью интеграции различных шлюзов для отправки смс-сообщений, электронных писем и пуш-сообщений.
Обновление модуля диалогов
Перед нами все так же стояла задача интеграции нейросетей и блокчейна, но при этом возросшая нагрузка на сервис стала диктовать свои условия. Стали заметны проблемы с модулем диалогов. На тот момент ему уже было более двух лет назад и он требовал модернизации. Она включала в себя обеспечение приемлемой скорости отправки сообщений, внедрение анализатора поведения пользователей и обновленную бизнес-логику. Для решения этой довольно крупной с технической точки зрения задачи мы выбрали Spring WebSocket для реализации серверной части и в качестве Message Broker - RabbitMQ. В ходе решения этой задачи мы также столкнулись с необходимостью замены хранилища для сообщений. Для этого мы выбрали решение под названием Apache Cassandra. Его внедрением техническая команда как раз занимается на данном этапе разработки. Несмотря на озвученные выше проблемы, релиз мобильных и веб приложений прошел не без проблем, но успешно.
В настоящее время перед технической командой стоят задачи по оптимизации и улучшению сервиса, выпуск новых веб-приложений, решение которых позволит полноценно сосредоточиться на внедрении интеллектуальных алгоритмов в работу сервиса и блокчейна для реализации модерации клиентов нашего сервиса. Для разработки собственного блокчейна была выбрана технология Spring Integration, Spring MVC, RabbitMQ, в качестве хранилища данных RocksDB. Внедрению блокчейна мы посвятим отдельный материал.