Меню сайта
[MMO] Centrifugo (2.2.2) - Добавляет интеграцию с Centrifuge
Centrifugo — это автономный сервис, который может обрабатывать соединения через различные транспорты в реальном времени и предоставляет простой API публикации. Centrifugo хорошо интегрируется с любым приложением — нет необходимости изменять существующую архитектуру приложения для внедрения функций реального времени. Просто позвольте Centrifugo разобраться с постоянными соединениями.
Отличное выступление
Centrifugo построен на языке Go с некоторыми умными оптимизациями внутри. У него хорошая производительность — тестовый стенд с одним миллионом соединений WebSocket и 30 миллионами доставленных сообщений в минуту с аппаратным обеспечением, сравнимым с одним современным сервером.
Многофункциональный
Многие встроенные функции помогут создать привлекательное приложение реального времени за ограниченное время. Centrifugo предоставляет различные типы подписок, историю горячих каналов, мгновенное присутствие, вызовы RPC. Существует также возможность проксировать события подключения к серверной части приложения через HTTP или GRPC и т. д.
Встроенные движки Redis, KeyDB, Tarantool или брокер Nats позволяют масштабировать соединения на разных машинах. Благодаря согласованному сегментированию Redis, KeyDB и Tarantool можно обрабатывать миллионы активных подключений с разумными требованиями к оборудованию.
Используется в производстве
Основанный почти 10 лет назад Centrifugo (и библиотека Centrifuge для Go, на которой он построен) — это зрелый сервер, который успешно используется в производстве многими компаниями по всему миру: Badoo, Ably, ManyChat, Grafana и другими.
Что такое обмен сообщениями в реальном времени?
Обмен сообщениями в режиме реального времени может помочь в создании интерактивных приложений, в которых события могут доставляться пользователям почти сразу же после их подтверждения серверной частью приложения путем передачи данных в постоянное соединение, что обеспечивает минимальную задержку доставки.
Чаты, живые комментарии, многопользовательские игры, показатели потоковой передачи могут быть построены поверх системы обмена сообщениями в реальном времени.
Centrifugo обрабатывает постоянные подключения от клиентов через двунаправленный WebSocket, SockJS и однонаправленный SSE (EventSource), HTTP-потоки, транспорты GRPC и предоставляет API для публикации сообщений онлайн-клиентам в режиме реального времени.
Масштабируемость
Еще одна важная вещь — масштабируемость. По мере роста вашего приложения все больше и больше пользователей будут устанавливать постоянные соединения с вашей конечной точкой в реальном времени. Современный сервер может обрабатывать тысячи открытых подключений, но мощность одного процесса ограничена — в конечном итоге у вас закончится доступный ЦП или память. Так что в какой-то момент вам, возможно, придется масштабировать пользовательские подключения на нескольких машинах. Еще одна причина для масштабирования подключений на несколько машин — это высокая доступность (когда один из серверов вышел из строя).
На Github и платных онлайн-сервисах есть множество решений для обмена сообщениями в реальном времени. Но лишь немногие из них обеспечивают масштабируемость из коробки — большинство работает только в одном процессе. Я не хочу сказать, что Centrifugo — единственный масштабируемый сервер. Есть еще много альтернатив, таких как Socket.IO, SocketCluster, Pushpin и множество других. Я хочу сказать, что возможность масштабирования — это одна из главных вещей, о которых вы должны думать, когда ищете решение для работы в реальном времени или создаете его с нуля. Вы не можете точно предсказать, как быстро ваше приложение исчерпает доступные ресурсы на одной машине — масштабируемость программного обеспечения не является преждевременной оптимизацией, и в большинстве случаев наличие готового масштабируемого решения просто даст вам больше возможностей для улучшения функциональности приложения.
Многие онлайн-сервисы тоже способны масштабироваться. Но посмотрите на цены — большинство этих решений довольно дорогие. В случае с pusher.com вы платите 500 долларов в месяц, но получаете максимум 10 тысяч подключений и строго ограниченное количество сообщений в месяц, о которых вам следует заботиться. Это смешно. Конечно, Centrifugo размещается самостоятельно, и вы должны использовать ресурсы своего сервера для его запуска. Но я полагаю, что стоимость во многих случаях несопоставима.
Centrifugo хорошо масштабируется с Redis PUB/SUB, поддерживает последовательное сегментирование Redis на стороне приложения и интегрируется с Redis Sentinel для обеспечения высокой доступности. Мы обслуживали до 500 000 подключений с помощью Centrifugo, имеющего 10 модулей узлов Centrifugo для подключений в Kubernetes и только один экземпляр Redis, который потреблял всего 60% ядра одного процессора!
Существует также постоянный запрос на вытягивание, который добавляет возможность масштабирования PUB/SUB с сервером Nats в качестве брокера.
Инструкция:
Добавьте команду cli:
mcgo-centrifugo:info
Сгенерируйте jwt-токен для подписки
Передайте сгенерированный токен. Также, если передается пустая строка и вам не нужно каждый раз генерировать токены для гостей, укажите в настройке.
Код:
"anonymous": true
"client_anonymous": true
Если вы используете дополнения, то вам необходимо удалить эти опции из конфигурации. Так как они больше не актуальны.
Если вы используете дополнение для живых потоков ([MMO] Live Threads), вы должны добавить пространство имен.
Пример конфигурации с живыми потоками:
{
"token_hmac_secret_key": "",
"admin_password": "",
"admin_secret": "",
"api_key": "",
"allowed_origins": [
"your_hosting",
],
"namespaces": [
{
"name": "public"
}
]
}