Инфопространство,
Москва, 07 октября 2019

Масштабируем WebSocket-соединения на Go Инфраструктура и тулинг

Доклад принят в программу конференции
Александр Емелин
Авито

В данный момент работает ведущим инженером в Авито. Разрабатывает Мессенджер Авито. Основные языки программирования – Go и Python. Автор популярного opensource-проекта Centrifugo (https://github.com/centrifugal/centrifugo), русскоязычного курса по Python на Coursera (https://ru.coursera.org/learn/diving-in-python). Любит футбол :)

https://www.facebook.com/emelin.alexander
Тезисы

В экосистеме Go существует несколько замечательных WebSocket-библиотек – это в первую очередь Gorilla WebSocket, а также github.com/gobwas/ws, nhooyr.io/websocket. Казалось бы – бери и делай свой проект, взяв за основу одно из перечисленных решений.

Однако вам самостоятельно придется решить несколько насущных проблем:
* Как масштабировать подключения пользователей? Миллионы соединений?
* Что делать с теми пользователями, кто не может подключиться по WebSocket?
* Как управлять временем жизни постоянного соединения? Неужели однажды установленное оно может жить вечно?
* Что делать с потерей сообщений при кратковременных дисконнектах пользователя? Как пережить массовый реконнект от сотен тысяч пользователей и не завалить свою базу данных тоннами запросов об актуальном состоянии?
* Что делать, если хочется использовать бинарный протокол для более эффективной передачи данных?
* И наконец – придется самостоятельно писать свой протокол поверх WebSocket и клиентов, которые его реализуют на всех современных клиентских платформах, готовы ли вы на такое?

Эти вопросы решает opensource-библиотека github.com/centrifugal/centrifuge, которая добавляет множество полезных фич поверх Gorilla WebSocket для построения real-time-приложений. Библиотека сейчас является ядром сервера Centrifugo (https://github.com/centrifugal/centrifugo), который используется в production в нескольких известных российских IT-компаниях. Мы поговорим о некоторых приемах и практиках, которые позволяют эффективно работать с большим количеством соединений. Также я расскажу про то, как эти подходы помогли нам в Мессенджере Авито.

Другие доклады секции Инфраструктура и тулинг