Есть сервис написанный на Node.js, который открывает сокет соединения. Как такой сервис масштабировать, при высокой нагрузке активных сокет соединений? Как шардит список онлайн пользователей (socket list) между серверами - где запущены такие же сервисы Node.js?
Роман, ставить балансировщик.
Напомню ещё, что лучше не заморачиваться проблемами масштабирования, когда их не должно возникать (скорее всего у вас их нет)
Василий Банников, у меня их и нет, но все же интересно услышать, какие архитектурные подходы люди используют при проектировании приложений, рассчитанных на огромное количество пользователей. Как я понимаю, в любом таком приложении есть узкие места. Например при использовании websocket-ов как основного канала, с помощью nginx можно сбалансировано раскидать клиентов на некоторое количество серверов, но не будет ли сам nginx узким местом (сотни миллионов соединений одновременно). Какие практики решения этой проблемы существуют. Или вот еще одно узкое место, пусть мы решили вопрос с соединениями со стороны клиентов, и наше приложение крутится на огромном количестве серверов, и где то хранит свои данные, обеспечивая транзакции при доступе к данным от любого их этих серверов. Очевидно, что такая база также должна быть распределена на множество серверов, но с неправильно продуманной архитектурой БД очень сложно безболезненно это сделать, соответственно должны быть практики/рекомендации/советы как правильно строить архитектуру БД, с расчетом на масштабирование. Вот и хотел услышать как решаются подобные проблемы.
Роман,
> nginx узким местом
Да, будет, но чтобы упереться в ngnix на мощном железе надо очень постараться.
В любом случае у вас всё упрётся в какой-то единственный сервер/маршрутизатор. который должен принимать соединения от клиентов. Почти всегда задача - это как-то распределить много клиентов между несколькими серверами.
Посмотрите ещё вот это: Где можно почитать про highload человеку, который с этим никогда не сталкивался?
Шаблоны проектирования Node.js / пер. с анг. А. Н. Киселева. – М.: ДМК Пресс,
2017. – 396 с.: ил.
ISBN 978-5-97060-485-4
С 300 страницы описывают решение подобных проблем