Amir
Работать пора)
Vint
В общем, тут спорить вообще не о чем, на мой взгляд. Правило простое: всё внешнее (что дальше вашего сервера) - тормозное и лагающее непонятно-что, и его всегда надо обслуживать отдельным процессом. Что за процесс будет - вопрос второй уже.
Vint
Ну да. На сайте про любимиго домашнего кота. Но речь всё-таки о более-менее живых и настоящих проектах. И лишь 1 из 1000 таких как-то нагружен. В остальных можно применять компромиссные решения.
Roman
ну я вот видео раздаю. совсем немного, но всякие особенности уже дают о себе знать
Vint
С видео не работал, увы. Тонкостей там полно. Для чего-то солидного с видео раньше народ любил эрлангом обмазаться. Сейчас, наверное, стоит смотреть в сторону go.
Но тут чатик с Нодой, поэтому надо брать её и пытаться оптимизировать.
Vladimir
Если аккуратно работать с бинарными данными - то все должно быть вполне ок
Roman
Vladimir
В частности, если речь идет о видео, то я бы сделал пул с буферами фиксированной длиной и утилы для стриминга таких буферов
Anton
Нативный кластер хак еще тот. Долго не мог понять кто так его сделать додумался.
Vladimir
Вопрос не в том - как, вопрос - зачем
Vladimir
другого способа-то особо и нет
Никита
Всем привет! Подскажите плиз. Есть mongoose схемы Account и Window. Они связаны так:
var Account = new Schema({
...
windows: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Window'
}]
});
var Window = new Schema({
...
creator: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Account'
}
});
окна в аккаунт я добавляю так:
var window = new Window({
...
creator: mongoose.Types.ObjectId(req.user._id)
});
window.save();
Account.findByIdAndUpdate(
req.user._id,
{ $push: { "windows": window } },
{ safe: true, upsert: true, new: true },
function (err, user) {
if (err) console.log(err);
req.logIn(user, function (err) {
if (err) return next(err)
res.send({ success: true, window: window });
})
}
);
А удаляю так:
Window.findOne({ id: req.body.id }, function (err, window) {
if (err) console.log(err)
Window.findOne({ _id: window._id }).remove(function (err, data) {
if (err) console.log(err);
Account.findOneAndUpdate({ _id: req.user._id }, { $pullAll: { windows: [{ _id: window._id }] } }, function (err, user) {
if (err) {
console.log(err);
}
req.logIn(user, function (err) {
if (err) return next(err)
res.send({ success: true, window: req.body.id });
})
});
})
});
Как то это оч странно выглядит. Подскажите как это должно быть, плиз
Alexander
http://telegram.wiki/tips:tdesktopcodesnippets
Alexander
а то вырвиглазненько
Никита
поправил :)
Alexander
а что смущает?
Никита
удаление как из коллеции окон так и из массива в поле аккаунта
Никита
по идее это же один объект
Никита
в массиве то только ссылка
Alexander
это тоже
Alexander
findOneAndRemove
Alexander
это не прокатывает?
Vladimir
Меня не очень беспокоит производительность промисов
Никита
Window.findOneAndRemove({ id: req.body.id }, function (err, window) {
if (err) console.log(err)
Window.findOne({ _id: window._id }).remove(function (err, data) {
if (err) console.log(err);
Account.findOneAndUpdate({ _id: req.user._id }, { $pullAll: { windows: [{ _id: window._id }] } }, function (err, user) {
if (err) {
console.log(err);
}
req.logIn(user, function (err) {
if (err) return next(err)
res.send({ success: true, window: req.body.id });
})
});
});
});
Kanstantsin
chrome canary 55 - async functions 3/3 :)
Никита
findOneAndRemove покороче. но всё равно странненько
Никита
DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated
Никита
bluebird лучше?
Evgeny
Да
Roman
Vladimir
в ноде?
Vladimir
sendfile же вроде блокирует
Vladimir
TCP?
hamper 𓅝
ну у меня на одном проекте примерно 10к http запросов в секунду на пару ядер, ничего не теряется
Vladimir
а зачем на 1 ядро столько инстансов?
Vladimir
может быть. Кластер это плохая вещь
Vladimir
это не та проблема, которую нужно решать
Vladimir
просто не используешь кластер - нет проблем
Vladimir
так и должно быть
hamper 𓅝
ну на 12ядерном проце тоже 10 инстансов запускали и ничего не терялось
hamper 𓅝
хотя может у нас нагрузки не на столько высокие были.. там где нужно еще выше обычно на го пишем
hamper 𓅝
ну у нас все ядра на 100% загружены (этим разок уже сожгли один сервак на хецнере)
Anton
ну а какие другие варианты для ноды предпочтительней?
Vladimir
запускаешь отдельные процессы и балансируешь внешним балансировщиком
Anton
И сколько процентов разницы?
Vladimir
разницы чего между чем и чем?
Roman
Roman
http/tcp?
Vladimir
http
Vladimir
как и большинство, полагаю
Roman
что мешает просто несколько процессов сбиндить на один порт?
Vladimir
хмм, а так можно?
Alexander
Ale
и как это работать должно о.о
Vladimir
SO_REUSEADDR?
Roman
Roman
https://habrahabr.ru/post/259403/
Vladimir
ясн, при этому ядро будет делать то, что делает кластер
Roman
Vladimir
само собой)
hamper 𓅝
А ядро разве раундробином будет? В кластере же тоже вроде отказались от ядерного раскидывания потому что сильно неравномерно ноды грузило
Ale
пишут, что ядро раскидывает псевдослучайно
Мерль
[last news]
Node.js v6.5.0 Release Brief
Roman
йау
Roman
как вы в тестах модели мокаете?
Anonymous
Ребят, мб кто знает? https://github.com/Unitech/pm2/issues/2367
Я типа хочу получить внутри скрипта номер под которым он запустился в кластер моде
Anonymous
нашел, если кому интересно http://stackoverflow.com/a/39285774/1171144
Alexander
а чем плохи нодовские кластеры? или чем лучше pm2 кластер?
Anonymous
лучше тем что тебе не нужно писать свой код
Дмитрий
там ещё на венде они ведут себя иначе
Anonymous
А может кто посоветовать, что почитать по этой теме? Ещё не касался, но в дальнейшем нужно будет поровну распределять нагрузку между 2+ инстансанми приложения.
Alexander
Alexander
да вопрос скорее всего правильный, только нааверное должен был звучать так "какие плюхи дает pm2" ?
Alexander
ZeroDownTime вижу
Alexander
просто интересен опыт на продакшене, кто делал миграцию с класторев на pm2 кластеры