@alexdora
Топ-менеджер

Стоит заниматься такой оптимизацией?

Вопрос к тем кто создавал высоконагруженные скрипты на NODE.JS

Сейчас запускается отдельно 700 скриптов NODE.JS.
- Каждый создает одно подключение Mysql и приблизительно 2-3 запроса SELECT / UPDATE к одной таблице innodb
- Каждый создает WS соединение до стороннего сервиса
т.е 700 скриптов / 700 подключений Realtime Websockets / 700 подключений к базе / и до 2100 запросов/сек к бд

Появилось немного времени позаниматься оптимизацией. Пришла в голову мысль, как избавить базу от такого количества запросов и подключений => запускать один NODE.JS который создает массив из 700-та подключений к WS и соотвественно понадобиться всего одно подключение к базе. Но есть большие сомнения, что NODEJS вообще переварит такой поток...

PS: Я JS плохо знаю и на создание такого скрипта с логикой у меня уйдет значительное количество времени. Не хочется просто так сделать, а потом окажется что скрипт отваливается.

PS2: Я пробовал Redis убрать часть запросов или вообще обойтись без базы. Но в моей системе "нипель" я не смог его правильно применить.

ADD:
Код показывать не могу. Но там все стандартно: Подключить WebSockets > бесконечный цикл с задержкой 1 секунду с запросом в базу (задержка через Sync). Если в базе есть инструкции новые для конкретного подключение, делается ws.send.
Удержание соединения через ping/pong

ADD2:
Тимур Шемсединов: Я вроде собрал все воедино, но возникли вопросы. Если можно немного пояснить. Я не отслеживал (да и отследить сложно было), сколько все скрипты разом потребляют памяти (Но видимо мало). Это нормальное поведение:

1. При старом раскладе с 700-та копиями одного скрипта, 700 к базе:
VPS / общее RAM свободно 2gb из 8gb / CPU [4 ядра 12-14%] пики

2. Новый расклад, один скрипт, 700 подключений WS, 1 подключение и ежесекундные запросы к базе
VPS / общее 10.5gb из 16gb (сам скрипт отжирает 4.5Gb) / CPU [4 ядра 2%-3%] пики

3. Новый расклад, один скрипт, 350(уменьшил в 2 раза) подключений WS, 1 подключение и ежесекундные запросы к базе.
VPS / общее 10.3gb из 16gb (сам скрипт отжирает 4.4Gb) / CPU [4 ядра 2%-3%] пики

PS: В последних двух случаях добавил RAM VPS, т.к все повисало к чертям, при запуске. Но памяти много, это не проблема.

Я не очень понимаю как такое получилось и нормальное это поведение для Node.js? Виртуализация XEN, Ubuntu 14.04, SSD
Асинхронность у меня (если это так можно назвать) сделана Sync. WS и так асинхронно работает. Sync выполняет ежесекундный перезапус:

function refreshDb()
	{
	Sync(function() 
			{
			Sync.sleep(1000);
			//Инструкции
                        refreshDb();
			});     
	}
  • Вопрос задан
  • 626 просмотров
Пригласить эксперта
Ответы на вопрос 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Имеет смысл делать 1 процесс, конекшен пул к БД из 20-30 соединениями, асинхронный код, и переиспользование соединений, потому, что одно соединение умеер выполнять один SQL одновременно и будет блокировать остальных, нужно поиграться к кол-вом соединений в пуле.
Полезные ссылки:
https://www.npmjs.com/package/mysql#pooling-connections
https://www.npmjs.com/package/mysql-utilities
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы