
Павел
01.09.2016
11:42:10
Т.е. собираем образ с приложением, и образ nginx'а со статикой этого приложения?

Denis
01.09.2016
11:42:14
Да

Roman
01.09.2016
11:46:41

Amir
01.09.2016
11:46:54
Приехали

Google

Amir
01.09.2016
11:47:05
На статике нет
Больше чем енжинкс и нода
Но быстрее ноды точно

Roman
01.09.2016
11:47:50
На статике нет
Вот сразу видно людей не знающих отличий мультиплексоров от prefork

Vint
01.09.2016
11:51:07
@pragus прав, апачу очень плохо при большом кол-ве медленных соединений.
Но отсюда и ответ, почему nginx лучше Node для статики - зачем ноде заниматься этим? Ей своей "динамики" с головой хватает. А обслуживанием внешних клиентов с медленным и лагающим инетом пусть занимается nginx.

Amir
01.09.2016
11:51:08
Пусть будет по вашему Роман.

Roman
01.09.2016
11:52:02

Vint
01.09.2016
11:52:11
Например?

Amir
01.09.2016
11:52:15
Я не спорил вообще, если есть вариант отдавать статику апачем или нодой, лучше апач
Если есть енжинкс, лучше в разы
openresty для тех случаев есть
Мы же тут не про хайлоад трем

Google

Roman
01.09.2016
11:54:27

Amir
01.09.2016
11:54:36
Вы со статикой быстрее в канал упретесь чем в память

Roman
01.09.2016
11:55:33

Amir
01.09.2016
11:55:41
Я не упираюсь, Апач терпеть не могу как и попытки использовать язык какой-то вместо профильного софта типа енжинкса
Машина с любым сервисом наружу ддоситься

Vint
01.09.2016
11:56:41

Amir
01.09.2016
11:56:43
Лично я против костылей в виде ноды отдающей статику

Bogdan
01.09.2016
11:57:16
+1
на продакшн ноде не место (статика)

Vint
01.09.2016
11:57:45

Amir
01.09.2016
11:57:48
Даже динамику можно качественно отбывать nginx + ssi
Не учителя людей плохому, запроксировать контент статичный и сервис в роде 10 минут гугления
Ноде*

Roman
01.09.2016
11:58:46

Amir
01.09.2016
11:59:18
Это уже не статика

Roman
01.09.2016
11:59:23
это первая проблема. вторая проблема - на моих задачах уж слишком много начинает занимать копирование памяти
Это уже не статика
с чего бы вдруг? всего лишь надо несколько файлов с диска склеить и отдать как один

Amir
01.09.2016
11:59:54
Потому что у вас логика
Какой файл следующий
В одной точке входа

Google

Amir
01.09.2016
12:00:25
В разных случаях вернётся разный набор файлов
То что вы отдаёт кстати ярый контент это другой разговор
Статичный контент*

Roman
01.09.2016
12:00:57
да не файл, а поток байт.

Amir
01.09.2016
12:01:06
Ваша ручка возвращает Динамику
Все поток байт;)
В статике это одинаковый результат

Roman
01.09.2016
12:01:49

Vint
01.09.2016
12:02:11
да не файл, а поток байт.
А этот поток можно сформировать и положить на диск, чтобы потом отдавать через nginx? Если да, то так и надо делать.
Иначе, действительно, динамика получается.

Amir
01.09.2016
12:02:15
Ну в таком случае openresty, golang
Если много
Либо много НОД за балансировщикамм

Amir
01.09.2016
12:02:56
Всегда можно запросить контент
И получить редирект на поток байт в виде файла
Который вы дописываете быстрее чем его читают

Vint
01.09.2016
12:03:28

Amir
01.09.2016
12:03:46
Енжинкс хорошо
Нода не балансировщик
И н сервер раздачи статики

Vint
01.09.2016
12:04:16
Именно. Даже нативный cluster лучше заменить балансировкой на nginx.

Google

Amir
01.09.2016
12:04:38
Нативный кластер?)
Он ужасен
Код посмотрите
upd
Udp т.е.

Vint
01.09.2016
12:05:05
Я о том и говорю. Но он не ужасен, у него цель другая просто.

Amir
01.09.2016
12:05:08
Дайте нагрузку и теряйте пакеты

Roman
01.09.2016
12:05:16
nginx - плохой балансер

Admin
ERROR: S client not available

Amir
01.09.2016
12:05:30
А хапрокси не лучше
Быстрее но не лучше

Vint
01.09.2016
12:05:46

Amir
01.09.2016
12:05:49
Что тотдопиливать на луа придется
Работать пора)

Vint
01.09.2016
12:08:15
В общем, тут спорить вообще не о чем, на мой взгляд. Правило простое: всё внешнее (что дальше вашего сервера) - тормозное и лагающее непонятно-что, и его всегда надо обслуживать отдельным процессом. Что за процесс будет - вопрос второй уже.

Roman
01.09.2016
12:22:49

Vint
01.09.2016
12:24:04
Ну да. На сайте про любимиго домашнего кота. Но речь всё-таки о более-менее живых и настоящих проектах. И лишь 1 из 1000 таких как-то нагружен. В остальных можно применять компромиссные решения.

Roman
01.09.2016
12:25:46
ну я вот видео раздаю. совсем немного, но всякие особенности уже дают о себе знать

Vint
01.09.2016
12:28:25
С видео не работал, увы. Тонкостей там полно. Для чего-то солидного с видео раньше народ любил эрлангом обмазаться. Сейчас, наверное, стоит смотреть в сторону go.
Но тут чатик с Нодой, поэтому надо брать её и пытаться оптимизировать.

Vladimir
01.09.2016
12:29:29
Если аккуратно работать с бинарными данными - то все должно быть вполне ок

Google

Roman
01.09.2016
12:36:12

Vladimir
01.09.2016
12:37:51
В частности, если речь идет о видео, то я бы сделал пул с буферами фиксированной длиной и утилы для стриминга таких буферов

Anton
01.09.2016
12:44:21
Нативный кластер хак еще тот. Долго не мог понять кто так его сделать додумался.

Vladimir
01.09.2016
12:52:32
Вопрос не в том - как, вопрос - зачем
другого способа-то особо и нет

Никита
01.09.2016
14:13:36
О, хромиум 53, а я пропустил.
@vkurchatkin Это кстати тот, в котором промисы не такими медленными сделали.
Но им ещё есть куда дальше оптимизировать.


Никита
01.09.2016
14:15:12
Всем привет! Подскажите плиз. Есть 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
01.09.2016
14:21:18
http://telegram.wiki/tips:tdesktopcodesnippets
а то вырвиглазненько

Никита
01.09.2016
14:22:48
поправил :)

Alexander
01.09.2016
14:24:10
а что смущает?

Никита
01.09.2016
14:24:50
удаление как из коллеции окон так и из массива в поле аккаунта
по идее это же один объект
в массиве то только ссылка

KlonD90
01.09.2016
14:30:41
а я думал отсутствие промисов

Alexander
01.09.2016
14:31:17
это тоже
findOneAndRemove
это не прокатывает?

Vladimir
01.09.2016
14:31:36