Серверы роботов

Что делают backend-разработчики в Redmadrobot, рассказывает руководитель отдела серверной разработки Андрей Муравьев.

Об аутсорсе

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

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

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

Похожий функционал мы реализовали ранее и в приложении сети «Перекрёсток», которое также работает на базе Siebel.

О собственных продуктах

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

Первое большое направление — мобильные рабочие места. С помощью сервиса, например, менеджеры по продажам Альфа-Банка могут готовиться к встречам с клиентами, формировать коммерческие предложения, показывать интерактивные презентации и собирать обратную связь по ним, планировать визиты и заключать сделки — мы кастомизируем функционал продукта под бизнес-процессы конкретного клиента.

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

Мобильные рабочие места — нечто среднее между коробочным продуктом и кастомной разработкой. мы всегда дорабатываем базовый функционал и проводим дополнительные интеграции. Так, например, мы добавили функцию планирования маршрутов сотрудников. Для компании «Согласие» и Билайна промежуточные серверы пишутся с нуля на основе имеющихся у нас решений.

Еще одно большое направление развития собственных продуктов — диалоговая платформа на основе машинного обучения RMR CHAT/BOT™, которая поддерживает взаимодействие между компаниями и их клиентами. Например, помогает операторам отвечать на обращения в техническую поддержку, делать маркетинговые предложения или давать консультации о продуктах и услугах. Система включает веб-панель оператора/ администратора поддержки, виджет на сайте/ чат в мессенджере/ чат в мобильном приложении, модули машинного обучения и конструктор сценариев. В зависимости от запросов конкретного бизнеса мы поставляем необходимый набор элементов.

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

Машинное обучение помогает ускорить ответ на запросы пользователей, снизить нагрузку на операторов и расходы на поддержку в текстовых каналах общения. Сейчас чат работает в банке «Открытие», страховой компании «Согласие», «Азбуке Вкуса».

Образование

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

Мы провели нагрузочные тестирования и переписали бекенд с Python на Go, чтобы увеличить возможную нагрузку на сервер. На тренажере для «Часа кода» мы решили оставить минимальное количество движущихся частей. Поэтому главную страницу с приложением генерирует тот же сервер на Go. А всю статику мы вынесли на CDN, чтобы обеспечить одинаково высокую доступность раздачи во все регионы.

В результате тренажер прошли 10 миллионов ребят со всей страны — и система отработала без сбоев.

О технологическом стеке

Основной язык, который мы используем — это Python, база данных — PostgreSQL, в качестве быстрого key-value хранилища используем Redis. Для нагруженных сервисов используем язык Go. Это наиболее часто используемые компоненты, но ими наш технологический стек не ограничивается. Мы всегда подбираем инструменты под задачу, пробуем новые технологии и работаем с последними стабильными версиями компонентов.

Работа с крупными клиентами имеет свою специфику. Часто мы работаем с финансовыми и страховыми компаниями — у них серьезные требования к безопасности. Их инфраструктура, в которую мы встраиваем наши решения, защищена, доступы и порты закрыты, это накладывает ограничения на процессы поставки и разработки. Все эти проблемы мы умеем решать.