Построение сервисов с RSocket для взаимодействия в реальном времени
Большинство веб-приложений написаны в парадигме запрос/ответ, отлично вписывающейся в мир HTTP. Однако в приложениях, где пользователи активно взаимодействуют друг с другом, стандартная парадигма достигает предела, и возможность видеть действия других пользователей в реальном времени является стандартным ожиданием пользователей современных приложений.
В мире, где правит запрос/ответ, клиенты обычно инициируют взаимодействие, тогда как в realtime мире бэкенд должен начать передачу данных, как только данные становятся доступны, не дожидаясь запросов от клиента. Построение таких систем нетривиально для сервисов с большим количеством пользователей, ведь для каждого пользователя бэкэнду необходимо держать открытое соединение и все связанные с ним данные. Вопросы масштабирования и отказоустойчивости в случае realtime сервисов также сложнее обычных REST сервисов.
В Canva мы сделали возможным для наших пользователей взаимодействовать друг другом в реальном времени, построив сервис с помощью RSocket. В этом докладе я опишу, как мы строили сервис, проблемы, с которыми мы столкнулись и сопутствующие решения как с точки зрения кода — использование RSocket на бэкенде и фронтенде, backpressure, мониторинг и отладка, так и с точки зрения инфраструктуры.