@nodejs_ru

Страница 949 из 2748
Aleksandr
02.07.2017
12:56:57
но это все приедет вероятно в nginx, поэтому это временные все решения на фоне нехватки такого в общепринятых инструментах

KlonD90
02.07.2017
12:58:14
да ну из nginx'а нулевой балансер ( надо докручивать все модулями слава китайцам

Aleksandr
02.07.2017
13:01:34
надежный и быстрый чтобы

Google
KlonD90
02.07.2017
13:02:37
У меня основное требование к балансеру сейчас уметь про хелсчекать и понять что что-то умерло плюс чтобы можно было по нормально раскатывать изменения

что в целом решает кубернетес/номад. но чот сложно

и сыро

но gobetween идеей exec мне очень понравился

написать bash скриптик который сам все прочекает

весьма ок

но деплоить еще и этот скрипт и мейнтейнить чот лень (

Aleksandr
02.07.2017
13:13:28
У меня основное требование к балансеру сейчас уметь про хелсчекать и понять что что-то умерло плюс чтобы можно было по нормально раскатывать изменения
proxy from to... { policy random | least_conn | round_robin | first | ip_hash | uri_hash fail_timeout duration max_fails integer max_conns integer try_duration duration try_interval duration health_check path health_check_port port health_check_interval interval_duration health_check_timeout timeout_duration header_upstream name value header_downstream name value keepalive number without prefix except ignored_paths... upstream to insecure_skip_verify preset }

caddy умеет health_check свои делать

но gobetween идеей exec мне очень понравился
это костыль скорее, лучше делать нормальные хелсы у сервисов и кодом ответа сообщать о здоровье, тогда и ничего не надо левого мейнтейнить

Sergey
02.07.2017
13:19:15
подскажите, как на ноде бичмарки своего кода(модуля) проводить?

Google
Aleksandr
02.07.2017
13:20:28
и вот gobetween не поддерживает проверку по коду, если сервис ответил это не значит что он адекватен, это не микросервисно совсем, вот хэлсы у caddy лучше сделаны точно

traefik вроде тоже не умеет код хэлсов, вот тебе и балансеры

Sergey
02.07.2017
13:44:00
Aleksandr помнишь - я написал простую ф-цию в 20 строк, для вывода даты по шаблону. Мы спорили по поводу бичмарков, сейчас вывел милисекунды в цикле через свою ф-цию



Sergey
02.07.2017
13:45:26
миллисекунды

тоесть ты можешь логировать время через мою ф-цию хоть каждую миллисекунду, и задержок не будет



Сергей
02.07.2017
13:47:05
мило выглядит

дай ссылку на репо

Sergey
02.07.2017
13:47:26
пока не выложил, там нужно один трабл решить

Aleksandr
02.07.2017
13:50:57
тоесть ты можешь логировать время через мою ф-цию хоть каждую миллисекунду, и задержок не будет
по сравнению с кем? сравни запись через console простой строки и строки с датой

Aleksandr
02.07.2017
13:53:13
чет не понял. -_-
ну ты же говоришь что нет задержки, давай посмотрим насколько ее нет

Сергей
02.07.2017
13:53:15
ну ты же говоришь что нет задержки, давай посмотрим насколько ее нет
понятное дело будет НО такая, что ей можно пренебречь

Aleksandr
02.07.2017
13:53:47
Сергей
02.07.2017
13:54:08
вот что-то не уверен
лол если тебе надо написать дату где-то, ты что будешь делать?

Aleksandr
02.07.2017
13:55:42
лол если тебе надо написать дату где-то, ты что будешь делать?
тут речь про максимально быстрый способ форматирования даты вроде бы

Google
Сергей
02.07.2017
13:55:58
суть то не изменилась

Aleksandr
02.07.2017
13:56:21
Сергей
02.07.2017
13:56:24
да и date-template скорее про "удобный+быстрый" способ

Sergey
02.07.2017
13:56:44
и минимальный)

Сергей
02.07.2017
13:56:47
на какой?
Если тебе надо напечатать форматированную дату, что ты будешь делать?

Aleksandr
02.07.2017
13:57:55
Если тебе надо напечатать форматированную дату, что ты будешь делать?
сам напишу функцию форматирования под свою задачу и померяю скорость всех вариантов сначала. в логгерах форматирование строки самый важный и тонкий момент

Сергей
02.07.2017
13:58:31
я предпочту иметь что-то протестированное и уже рабочее, чем тратить время на написание своего

Aleksandr
02.07.2017
14:00:12
Не о логгерах речь А если у тебя 15 языков в системе, и под каждый язык свой формат даты?
а я о логгерах, там максимально критична любая лишняя задержка, а в том о чем ты лучше брать что-то готовое, там задача шире и скорость не так важна и заметна

Сергей
02.07.2017
14:01:45
а я о логгерах, там максимально критична любая лишняя задержка, а в том о чем ты лучше брать что-то готовое, там задача шире и скорость не так важна и заметна
не все готовые решения акцентируются на широких возможностях но по факту, чаще всего готовые решения лучше, тупо потому что их разрабатываешь не ты множество человек попробовало в своих проектах и внесло свои коррективы, как в удобство так и в скорость

Sergey
02.07.2017
14:02:44
а я о логгерах, там максимально критична любая лишняя задержка, а в том о чем ты лучше брать что-то готовое, там задача шире и скорость не так важна и заметна
ну тык, яж сейчас показал, что можно логировать каждую милисекунду и задержки не будет, то есть задержка меньше 0.01 милисекунды

Aleksandr
02.07.2017
14:03:33
не все готовые решения акцентируются на широких возможностях но по факту, чаще всего готовые решения лучше, тупо потому что их разрабатываешь не ты множество человек попробовало в своих проектах и внесло свои коррективы, как в удобство так и в скорость
ну я разве спорю с этим? если вопрос критичный к производительности то готовые решения лучше не брать, или взять и форкнуть, если не особо, то вообще париться не стоит, если выигрыш не заметен

Сергей
02.07.2017
14:03:37
короче чувак хейтит готовые решения

Aleksandr
02.07.2017
14:04:12
короче чувак хейтит готовые решения
нет, конечно, можно почитать что я говорю прежде чем придумывать

Aleksandr
02.07.2017
14:07:31
только вот далеко не факт, что ты напишешь решение, которое будет работать быстрее готового
смотря о чем речь, иногда можно в много раз ускорить, например, логгеры популярные, иногда нельзя

Сергей
02.07.2017
14:08:25
смотря о чем речь, иногда можно в много раз ускорить, например, логгеры популярные, иногда нельзя
если есть популярное решение, то скорее всего в одиночку написать что-то более быстрое с необходимой функциональностью будет сложно

Google
Aleksandr
02.07.2017
14:09:35
если есть популярное решение, то скорее всего в одиночку написать что-то более быстрое с необходимой функциональностью будет сложно
ну вот ты это озвучиваешь как будто я с этим спорю. нет, не спорю, но если готовое решение не устраивает по скорости или нужна только его часть то тут есть варианты всегда

Aleksandr
02.07.2017
14:09:59
непонятно о чем спор

вот эпичный пример почему я всегда использую console напрямую без всяких популярных решений $ node benchmark/logging.js console.info x 1,459,530 ops/sec ±0.78% (88 runs sampled) rufus.info x 201,119 ops/sec ±0.62% (91 runs sampled) winston.info x 65,377 ops/sec ±1.05% (80 runs sampled) intel.info x 59,193 ops/sec ±1.13% (97 runs sampled) bunyan.info x 82,040 ops/sec ±0.68% (100 runs sampled) log4js.info x 45,273 ops/sec ±2.64% (83 runs sampled) Fastest is console.info мне от логгера нужно очень немного, чтобы он космически быстро писал нужные мне строки в консоль без накладок на ненужное мне форматирование, выходит примерно в 10 раз быстрее популярных логгеров

Aleksandr
02.07.2017
14:31:01
Всмысле? ты хочешь в случае хорошего отвечать чем-то отличным от 200?
ну среди микросервисов принято что 200-399 коды это ок, остальные нездоровые. сервис имеет кучу зависимостей и если он отвечает то это не говорит о том что у него все ок, вот поэтому удобно кодом регулировать хэлсы

Admin
ERROR: S client not available

Aleksandr
02.07.2017
14:34:09
ну хз от ручки микросервиса я ожидаю что он либо 200 ответит либо ошибкой
ну это странно, смотри, если у тебя доступен редис, но недоступна БД и часть микросервисов от которых ты зависишь, то тут конечно можно не ответить на хэлс, и просто закрыть соединение но это как-то неспортивно и неинформативно, обычно принято код отдавать и в произвольной форме в теле список проблем

Aleksandr
02.07.2017
14:35:45
ну ответь любым не 200 какие проблемы?
ну я так я и делаю, но понимает код из списка обсуждаемых только caddy

KlonD90
02.07.2017
14:36:02
ну traefik

только 200 считает валидным

Google
KlonD90
02.07.2017
14:36:44
Да

Сергей
02.07.2017
14:36:51
Да
Лол. Бред

Aleksandr
02.07.2017
14:36:58
А есть исходник benchmark/logging.js?
это из пакета rufus, https://github.com/btd/rufus

KlonD90
02.07.2017
14:37:01
Ну во всяком случае так следует из документации. Что в опенсурсе не всегда правда

Aleksandr
02.07.2017
14:37:53
А 201 тоже плохо?
обычно 2**, 3** считаются положительными а их логика уже избыточный смысл для балансера

Сергей
02.07.2017
14:38:09
Но если 200 это ок а 201 нет Это уже маразм

KlonD90
02.07.2017
14:38:31
я очень сомневаюсь что ручка health в удачном состояние должна вернуть что-то кроме 200

у ручки health одно назначение сказать что сервис жив

это бинарная опция в целом

Сергей
02.07.2017
14:39:27
это бинарная опция в целом
В общем да. Иногда инфу несёт с собой

Aleksandr
02.07.2017
14:39:44
я очень сомневаюсь что ручка health в удачном состояние должна вернуть что-то кроме 200
ну тут логика такая - сервис должен явно сообщить что у него ошибка или адресата по этому пути нет, все остальное это уже логика сервиса которая балансер не тревожит

ты же ответив 204 не сообщил явно об ошибке, это вообще норм ответ

KlonD90
02.07.2017
14:41:17
ошибки это нормально. вопрос жив ли сервис стоит ли туда роутить трафик. ошибки и прочие истории должны в мониторинг уходить

Aleksandr
02.07.2017
14:41:21
204 даже предпочтительнее 200 по логике хэлса

ошибки это нормально. вопрос жив ли сервис стоит ли туда роутить трафик. ошибки и прочие истории должны в мониторинг уходить
ну тут вопрос радикальности настройки, на мой взгляд лучше давать выбор и не ограничивать без особой нужды

Roman
02.07.2017
14:44:27
ребята, привет пишу первое приложение на ноде помогите, пожалуйста разобраться с ассоциациями(sequelize + postgress) Есть моделька Card var Card = sequelize.define('Card', { name: { allowNull: false, type: DataTypes.STRING, }, }) Есть моделька Partnership var Partnership = sequelize.define('Partnership', { comment: { type: DataTypes.TEXT }, }) Задача связывать между собой Card через Partnership. Есть такие связи Card.belongsToMany(models.Partnership, { through: 'CardPartnership' }) Partnership.belongsToMany(models.Card, { through: 'CardPartnership' }) Создание Partnership const createdBy = ctx.request.body.fields.createdBy const acceptedBy = ctx.request.body.fields.acceptedBy const partnership = await models.Partnership.create({ comment: ctx.request.body.fields.comment, createdBy: createdBy, acceptedBy: acceptedBy, }) await models.Card.findAll({ where: { id:[createdBy, acceptedBy] } }).then((cards) => cards.forEach((card) => card.addPartnerships(partnership))) Если хочется получить карточку со всеми партнерами const card = await models.Card.find({ where: { id: cardId }, include: [{ model: models.Partnership, through: { where: { CardId: cardId } }, include: [{ model: models.Card, where: { id: { $not: cardId } } }] }] }) Это работает. Но хочется услышать насколько это правильная механика) Может можно проще)

Сергей
02.07.2017
14:50:51
ребята, привет пишу первое приложение на ноде помогите, пожалуйста разобраться с ассоциациями(sequelize + postgress) Есть моделька Card var Card = sequelize.define('Card', { name: { allowNull: false, type: DataTypes.STRING, }, }) Есть моделька Partnership var Partnership = sequelize.define('Partnership', { comment: { type: DataTypes.TEXT }, }) Задача связывать между собой Card через Partnership. Есть такие связи Card.belongsToMany(models.Partnership, { through: 'CardPartnership' }) Partnership.belongsToMany(models.Card, { through: 'CardPartnership' }) Создание Partnership const createdBy = ctx.request.body.fields.createdBy const acceptedBy = ctx.request.body.fields.acceptedBy const partnership = await models.Partnership.create({ comment: ctx.request.body.fields.comment, createdBy: createdBy, acceptedBy: acceptedBy, }) await models.Card.findAll({ where: { id:[createdBy, acceptedBy] } }).then((cards) => cards.forEach((card) => card.addPartnerships(partnership))) Если хочется получить карточку со всеми партнерами const card = await models.Card.find({ where: { id: cardId }, include: [{ model: models.Partnership, through: { where: { CardId: cardId } }, include: [{ model: models.Card, where: { id: { $not: cardId } } }] }] }) Это работает. Но хочется услышать насколько это правильная механика) Может можно проще)
gist.github.com для кого создан?

Nikita
02.07.2017
14:54:23
Ну вот епт

Хоть бы в кавыки взял

Roman
02.07.2017
14:54:36
KlonD90
02.07.2017
14:59:00
ну типа помимо model, through я пользуюсь association. Ты ассоциацию к примеру в статическую переменную сохраняешь и дальше ее в инклюдах используешь

http://docs.sequelizejs.com/manual/tutorial/associations.html const Creator = Product.belongsTo(User, {as: 'creator'}); return Product.create({ title: 'Chair', creator: { first_name: 'Matt', last_name: 'Hansen' } }, { include: [ Creator ] });

Страница 949 из 2748