Хоризонтално мащабиране на NodeJS

Аз съм разработчик на уеб приложения на ruby/php от доста време и съм свикнал с идеята за хоризонтално мащабиране на сървърни екземпляри, за да се справя с повече заявки. Хоризонтално мащабиране - което означава отделни екземпляри на приложение, разположено зад балансиращо натоварване, които не споделят нищо и не са запознати едно с друго.

Основният въпрос, който имам, е, тъй като Node.js и неговият акцент върху evented-io позволява на една кутия, работеща със сървър node.js, да обработва „хиляди“ едновременни заявки - използва ли се балансиране на натоварването/хоризонтално мащабиране за мащабиране на nodejs приложения ? Мащабирането на приложение за възел ограничено ли е до вертикално мащабиране (хвърляне на повече RAM/мощност за обработка на проблема)?

Вторият ми въпрос е свързан с хоризонталното мащабиране на node.js и websockets. Виждал съм доста уроци за „чат“ на Node.js, които използват уебсокети. (любим: http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial)

Тъй като websockets ефективно поддържат отворена линия за комуникация между браузър и сървър, дали хоризонтално мащабирана архитектура, типична за света на PHP/Ruby, ще доведе до прекъсване на приложение за чат като това, обяснено във връзката - тъй като новите заявки за връзка с websocket биха били присвоени на различни процеси/сървъри и няма да има един централен ресурс, проследяващ всички свързани клиенти?


person Casey Flynn    schedule 12.11.2012    source източник


Отговори (3)


Node.js поддържа хоризонтално мащабиране по начина, по който описвате чрез вградения cluster модул.

По отношение на втория ви въпрос относно използването на websockets/socket.io в тази среда, трябва да използвате нещо като Redis, за да съхранявате споделено състояние в множество екземпляри на вашето приложение, както е описано тук.

person JohnnyHK    schedule 12.11.2012
comment
Това е стар въпрос, но аз използвам mongodb, за да съхранявам и извличам всичките си данни от приложението за чат. Тъй като искам хоризонтално да мащабирам приложението си, тъй като приложението ми за чат не работи, когато имам повече от един сървър. Какво трябва да направя, ако премахна напълно mongodb и използвам redis? Или има по-добро решение. - person DragonBorn; 22.11.2017

Клъстерната функционалност на Node.js е ограничена до един сървър с множество процесори. Основно използва броя на процесорите в сървъра. Мисля, че въпросът е повече за сценария, когато искаме да мащабираме хоризонтално с множество сървъри с фасада за балансиране на натоварването.

person Pramma    schedule 27.02.2015
comment
И за да отговоря на въпроса за сокета, точно като всяко повикване на сървъра, извикването за създаване на сокет ще бъде балансирано при натоварване и ще достигне до възел Nx, за времето на живот на уеб сокета тази TCP връзка се поддържа отворена. т.е. цялата комуникация от браузър към сървър, сървър към браузър през уеб сокет винаги ще се обслужва от Nx. - person Pramma; 27.02.2015

Ако имате екземпляри на node.js, разпръснати в множество сървъри (хоризонтално мащабиране), той ще служи за същата цел, трябва да го програмирате правилно, за да поддържа този тип настройка.

person mskw    schedule 28.10.2015