
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
caddy умеет health_check свои делать


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

KlonD90
02.07.2017
13:20:13

Google

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

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

Aleksandr
02.07.2017
13:44:55

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

Sergey
02.07.2017
13:52:10

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

Сергей
02.07.2017
14:01:45

Sergey
02.07.2017
14:02:44

Aleksandr
02.07.2017
14:03:33

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

Aleksandr
02.07.2017
14:04:12

Сергей
02.07.2017
14:04:44

Aleksandr
02.07.2017
14:07:31

Сергей
02.07.2017
14:08:25

Google

Aleksandr
02.07.2017
14:09:35

Сергей
02.07.2017
14:09:46

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 раз быстрее популярных логгеров

KlonD90
02.07.2017
14:29:16

Aleksandr
02.07.2017
14:31:01

KlonD90
02.07.2017
14:31:25
очень страно было бы в случае редиректа
О_о

Admin
ERROR: S client not available

Andrew
02.07.2017
14:32:18

Konstantin
02.07.2017
14:32:43


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

KlonD90
02.07.2017
14:34:59

Сергей
02.07.2017
14:35:22

Aleksandr
02.07.2017
14:35:45

KlonD90
02.07.2017
14:36:02
ну traefik
только 200 считает валидным

Сергей
02.07.2017
14:36:32

Google

KlonD90
02.07.2017
14:36:44
Да

Сергей
02.07.2017
14:36:51

Aleksandr
02.07.2017
14:36:58

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
ты же ответив 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 ]
});