Node.js выкидывает throw при коннекте
Такая проблема с node.js
Задача простая подключиться mongo, сделать insert или update отключиться. Использую express. Код взял из примера на gitHUB, нативный драйвер для mongodb. Код:
app.get('/api/cnt/:pid/:blist',function(req,res,next){ Но когда решил проверить под нагрузкой , вывалилась ошибка подключния к монго. Проверял вот таким скриптом, отправляя в цикле запросы curl - ом Код:
#!/usr/bin/perl Сделал задержку между запросами 0,05 сек 120 000 записей, полет нормальный. Но как же заявленная нагрузка в 1 000 000 одновременных подключений? Есть у кого нибудь мысли ? Хотелось бы на продакшене иметь 100% надежность. Всем заранее спасибо за ответы ! |
Ответ: Node.js выкидывает throw при коннекте
Зачем делать коннект каждый запрос? создай коннект при старте приложения и используй его.
|
Ответ: Node.js выкидывает throw при коннекте
Как pax сказал - не пересоздавай соединения при каждом запросе. Это не PHP тебе, тут один поток один контекст - и в этом прелесть: создай одно соединение и используй его.
Mongodb в отличии от mysql имеет хорошую поточность и асинхронность обработки запросов даже при одном соединении, не нужны никакие pool'ы соединений. Вот мелкий код для переиспользования одного соединения в разных модулях: http://stackoverflow.com/a/17649969/1312722 Да и любопытно, что ты делаешь для нагрузки в 1,000,000 одновременных вставок? Какого рода проект. При таких нагрузках у тебя будет горизонтально масштабируемая система, а не один нод процесс с коннектом на запрос. Я на среднем боксе на амазоне выдержал 12,000 одновременных пользователей на сайте, без кеша бд запросов, с 3-7 запросов на каждую загрузку страницы. При этом каждая загрузка страницы также приводит к вставке в бд. И никаких проблем не испытывал. И столько одновременных пользователей нужно очень постараться набрать. |
Ответ: Node.js выкидывает throw при коннекте
Я тоже подумал про постоянное подключение. Попробую разобраться как это сделать. Отставил скрипт на выходные в таком варианет. В базе уже 2 000 000 записей и нод не падает.
Но все же интересно, где тонкое место в таком варианте. Это глюк драйвера или слабое место монго ? Переписываю баннерную систему. Решил счетчики завернуть на монго, чтобы научиться с ним работать и протестировать под нагрузкой. Ну а так планы большие. Спасибо всем огромное ! |
Ответ: Node.js выкидывает throw при коннекте
Тонкого места тут нету. Технически нету никаких реальных нужд создавать тысячи соединений к монго, следственно и поддерживать их.
Большое число соединений нужно лочить, сортировать и приотеризировать, а это "стоит". Конечно копейки, но когда у тебя тысячи соединений - следственно расход просто глупый. По своему опыту скажу, что самое главное это понять как работают Compound Index'ы в mongo. Если у тебя очень простые key<>value данные, и мелкие документы без необходимости сложных запросов, то лучше юзать что-то для этих целей, типа cassandra или couchdb, они лучше подходят для попроще данных, но побольше объёмам. |
Ответ: Node.js выкидывает throw при коннекте
УРА! Настроил постоянное подключение! Запустил тестовый скрипт в 5 потоков . Вставляет примерно 300 записей в секунду и не падает. Вот это мне нравится !
Еще раз Спасибо. |
Часовой пояс GMT +4, время: 20:47. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot