Vint
hamper 𓅝
Ну да, возможно я изначальную задачу не так понял, в общем спать пора.
Anonymous
Vint
Anonymous
Сам профит от такого конвеерного подхода заключаетя в наглядности схемы обаботки любого запроса. Не нужна куча роутов (кроме некоторых исключений) не нужно на каждую таблицу делать отдельные контроллеры, если придерживаемся стандартной rest-схемы - GET | POST | PUT | DELETE /api/{table}/{id} то достаточно всего одной миддлварки чтобы обработать абсолютно все crud запросы в базе данных (правда не нужно забывать про валидацию в миддлварке перед ней) без создания кучи болерплейта
Vint
А, ну я так и написал. crud можно описать одним контроллером по /api/*, если так хочется. Остальное - отдельные хендлеры со своими мидлварами.
Vint
Т.е. показанная в примере вертикаль - в целом клёво, но не для сетапа всего express-приложения.
Таймураз
У коа нагляднее код
Anonymous
Что подразумевается под фильтром запросов? По мне так это роутингом решается. /api/ - динамика, /public/ - статика, и т.д.
зависит от приложения, у меня например еще происходит фильтрация для spa через переопределения роутов на index.html но в целом миддлварка примерно такая
async function staticServer(req, res, next){
if (req.url.slice(1, 4) !== 'api' && (req.method == 'HEAD' || req.method == 'GET')) {
if(req.headers && typeof req.headers.accept === 'string' &&
req.headers.accept.indexOf('application/json') !== 0 &&
(req.headers.accept.indexOf('text/html') !== -1 || req.headers.accept.indexOf('*!/!*') !== -1) &&
urlUtil.parse(req.url).pathname.indexOf('.') === -1)){
console.log('override path to');
req.url = '/';
}
// отдача файла
....
} else {
await next()
}
}
Vint
hamper 𓅝
А нода http2 уже нормально поддерживает?
Roman
hamper 𓅝
Для снижения нагрузки например, коннект то один на сессию
Roman
Roman
hamper 𓅝
А ну да, nginx то к ноде все равно будет несколько коннектов делать...
Roman
hamper 𓅝
Ну и nginx удобно использовать если у тебя десяток серверов кластер и надо запросы раскидать
hamper 𓅝
Нет, зачем http2?
Например гуглобот вроде как предпочитает http2 обычному в раздаче рейтингов.
Roman
hamper 𓅝
И статистику удобно в stub выдает
Roman
Roman
Оох
hamper 𓅝
Нужно знать скольлко было 200 ответов, сколько 499, сколько 5xx
hamper 𓅝
После этого логи можно удалять.
hamper 𓅝
Хотя часто приходится в них лезть и искать конкретный запрос в пределах пары часов.
Roman
hamper 𓅝
В целях каких нибудь проверок логики.
hamper 𓅝
Собственно логи хранятся только за 6 часов вроде, это как раз около 100Гб.
hamper 𓅝
А или не, это сутки 100Гб были, потом укоротили.
Denis
https://github.com/dominictarr/JSONStream крутая штука)
hamper 𓅝
А в одном проекте логи из nginx вообще клиентам выгружались.
hamper 𓅝
Там надо было соответствие значения куки и ip всего лишь, для этого nginx хватало вполне.
hamper 𓅝
А ну и параметр из запроса
Roman
Зачем nginx? Он хреновый балансер
hamper 𓅝
А кто хороший?
hamper 𓅝
Только что бы умел подробные логи писать, роутить на несколько разных бекэндов, статистику по нагрузкам отдавать, иногда обрабатывать параметры из запросов и из кук
hamper 𓅝
Иногда клиенты хотят странного )
Roman
hamper 𓅝
До бекэндов запрос может и не дойти, nginx хотя бы 499 ошибку или 5хх в лог напишет
hamper 𓅝
Клиенты например специфичные, ждут ответа в течение 100мс и отваливаются если не получают ответа.
Roman
hamper 𓅝
300к я не балансил еще )) так что не знаю, у нас небольшие нагрузки совсем, не больше 30к, с ними nginx на хиленьком сервере легко справляется.
Roman
Ну и трафика на исход 20-30гбит/с
hamper 𓅝
Такого у меня еще тоже не было ни разу, так что не знаю, у меня каждый респонс это килобайт максимум.
hamper 𓅝
Если будет что-то на столько нагруженное там и будем думать.
hamper 𓅝
А вообще да, надо бы как нибудь попробовать всякие эти haproxy и прочие, может понравятся...
hamper 𓅝
Вот сейчас по быстрому загуглил, везде почти по бенчмаркам nginx и haproxy на равне и иногда nginx выигрывает, да и настраивается nginx не сильно сложно.
Roman
nginx на проксировании нескольких гигабит начинает подтормаживать
Roman
hamper 𓅝
Ну таких нагрузок у меня не бывало еще, если вдруг будут тогда да... А так у меня даже вроде ни на одном из проектов больше 1gbit даже в локалке между сервисами не было.
hamper 𓅝
В общем на будущее запомню, может применю где нибудь.
Roman
hamper 𓅝
Неплохо, и с latency я смотрю у нее получше чем у nginx вроде, для меня это несколько важнее показатель.
hamper 𓅝
В общем конструктивненько вышло, но пора спать ))
Denis
Denis
А что насчёт haproxy vs ipvs ?
kalloc
а разве ipvs умеет OSI 7 ?
kalloc
L4 же только
kalloc
superserver.ru клевый домен?
Denis
а haproxy может?
Ilia
Дмитрий
Dmytro Bondarenko:
Ребята, такая проблема(я ее обошел, но чет не вьеду чё оно не работало): есть массив из объектов пр. var obj = [{a:1}, {b:2},{c:3},{a:1}, {b:2},{c:3}].
Как видно, есть дубликаты и их надо удалить. Как я сделал(когда не работало) запустил в функции форыч по объекту, и вначале функции создал список пустой. Написал еще одну функцию, которая возвращает тру или фалс в зависимости от того, есть ли объект в новом списке, и если фалс, то я пушу в новый список. В 2й функции я сразу делал проверку на длину массива, если 0, то фалс.
Проблема была в том что 1я функция возвращала массив только с 1м элементом, после первого фалс, 2я функция возвращала только андефайнды, такое чувство, что они не ждали друг друга, а просто работали. Не подскажите в чем проблема? Если надо будет уод, я могу примерно его восстановить
Oleg
hamper 𓅝
hamper 𓅝
hamper 𓅝
Oleg
Ты ничего не сэкономишь. У тебя веб занимается тем что ждёт базу
Ilia
В rtb же другие требования и правила базы используются типо монги без сесурити мода.
Sergey
опять войс-мессаги
Vlad
Dmytro Bondarenko:
Ребята, такая проблема(я ее обошел, но чет не вьеду чё оно не работало): есть массив из объектов пр. var obj = [{a:1}, {b:2},{c:3},{a:1}, {b:2},{c:3}].
Как видно, есть дубликаты и их надо удалить. Как я сделал(когда не работало) запустил в функции форыч по объекту, и вначале функции создал список пустой. Написал еще одну функцию, которая возвращает тру или фалс в зависимости от того, есть ли объект в новом списке, и если фалс, то я пушу в новый список. В 2й функции я сразу делал проверку на длину массива, если 0, то фалс.
Проблема была в том что 1я функция возвращала массив только с 1м элементом, после первого фалс, 2я функция возвращала только андефайнды, такое чувство, что они не ждали друг друга, а просто работали. Не подскажите в чем проблема? Если надо будет уод, я могу примерно его восстановить
Google Ramda docs filter
hamper 𓅝