Centrifugo - это автономный сервис, который может обрабатывать соединения по различным каналам передачи в режиме реального времени и предоставляет простой API публикации. Centrifugo хорошо интегрируется с любым приложением – нет необходимости изменять существующую архитектуру приложения для внедрения функций реального времени. Просто позвольте Centrifugo работать с постоянными подключениями.
Отличная производительность
Centrifugo построен на языке Go с некоторыми интеллектуальными оптимизациями внутри. У него хороший стенд для тестирования производительности с миллионом подключений к WebSocket и 30 миллионами доставляемых сообщений в минуту, а аппаратное обеспечение сопоставимо с одним современным сервером.
Многофункциональное
Множество встроенных функций могут помочь создать привлекательное приложение в режиме реального времени за ограниченное время. Centrifugo предоставляет различные типы подписок, историю горячих каналов, мгновенное присутствие, вызовы RPC. Также существует возможность передавать события подключения к серверной части приложения через HTTP или GRPC и многое другое.
Встроенные движки Redis, KeyDB, Tarantool или Nats broker позволяют масштабировать подключения на разных компьютерах. Благодаря последовательному разделению Redis, KeyDB и Tarantool можно обрабатывать миллионы активных подключений при разумных требованиях к оборудованию.
Используется в производстве
Компания Centrifugo была основана почти 10 лет назад (и библиотека 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 тыс. подключений с помощью Centrifugo, имея 10 модулей узлов Centrifugo для подключений в Kubernetes и только один экземпляр Redis, который потреблял всего 60% однопроцессорного ядра!
Также существует
постоянный запрос на извлечение, который добавляет возможность масштабирования PUB / SUB с сервером Nats в качестве брокера.