Size: a a a

Node.js — русскоговорящее сообщество

2020 April 02

KA

Kylych Asankulov in Node.js — русскоговорящее сообщество
Доброго времени суток господа! У меня следующий кейс. Есть сервис наподобие bit.ly или tinyurl для укорачивания ссылок. У новых ссылок скорее всего будет срок истечения. И думаю кешировать новые ссылки в редисе со сроком истечения, чтобы быстрее редиректить запрос на реальную ссылку. Насколько это разумно или это оверхед?
источник

PS

Pavel Shakhov (pongo) in Node.js — русскоговорящее сообщество
Kylych Asankulov
Доброго времени суток господа! У меня следующий кейс. Есть сервис наподобие bit.ly или tinyurl для укорачивания ссылок. У новых ссылок скорее всего будет срок истечения. И думаю кешировать новые ссылки в редисе со сроком истечения, чтобы быстрее редиректить запрос на реальную ссылку. Насколько это разумно или это оверхед?
ну а скока длится тот редирект с сервиса? 100 миллисекунд?
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Kylych Asankulov
Доброго времени суток господа! У меня следующий кейс. Есть сервис наподобие bit.ly или tinyurl для укорачивания ссылок. У новых ссылок скорее всего будет срок истечения. И думаю кешировать новые ссылки в редисе со сроком истечения, чтобы быстрее редиректить запрос на реальную ссылку. Насколько это разумно или это оверхед?
Вполне разумно, только время сброса данных на диск настроить нужно в балансе с требованием "нагрузка / сохранность"... Но это не из-за ноды или кода, а в принципе - зачем придумывать то, что отлично работает ;)
источник

KA

Kylych Asankulov in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
ну а скока длится тот редирект с сервиса? 100 миллисекунд?
Я ещё не сделал, пока на стадии обдумывания реализации, так сказать бэст практис.
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Kylych Asankulov
Я ещё не сделал, пока на стадии обдумывания реализации, так сказать бэст практис.
Бест-практик - это разумно использовать существующие и зарекомендовавшие себя инструменты... Можно все хранить в памяти приложения и таймеры вести... плюсы - мгновенно, минусы - падение приложения = потеря ссылок... улучшаем - добавляем БД... плюсы - надежно, минусы - нужно вести таймеры, чистить от устаревших данных, тратится время на запросы/чтение (или городить механизмы синхронизации)...
и тут вступает редис - умеет вести самостоятельно время жизни записи (механизмы синхронизации), очень быстрая работа с данными (т.к. они в памяти), пишет на диск в соответствии с настройками сброса (надежность)... итог - вам остается написать только два куска кода: создать ссылку и сунуть ее по короткому ключу в редис с временем жизни, при запросе считать по короткому ключу полную ссылку из редиса и кинуть редирект... итого работы над кодом примерно час времени и надежность на высоте
источник

KA

Kylych Asankulov in Node.js — русскоговорящее сообщество
Artem Zuev
Бест-практик - это разумно использовать существующие и зарекомендовавшие себя инструменты... Можно все хранить в памяти приложения и таймеры вести... плюсы - мгновенно, минусы - падение приложения = потеря ссылок... улучшаем - добавляем БД... плюсы - надежно, минусы - нужно вести таймеры, чистить от устаревших данных, тратится время на запросы/чтение (или городить механизмы синхронизации)...
и тут вступает редис - умеет вести самостоятельно время жизни записи (механизмы синхронизации), очень быстрая работа с данными (т.к. они в памяти), пишет на диск в соответствии с настройками сброса (надежность)... итог - вам остается написать только два куска кода: создать ссылку и сунуть ее по короткому ключу в редис с временем жизни, при запросе считать по короткому ключу полную ссылку из редиса и кинуть редирект... итого работы над кодом примерно час времени и надежность на высоте
После сохранения в бд сразу же создаю запись в редисе с со сроком жизни, а при запросе буду дергать с редиса если нету то с бд, а если и там нету значит 404. Всё верно?)
источник

s

southyyy in Node.js — русскоговорящее сообщество
Ребят привет, очень нужна ваша помощь, мне надо написать прокси чекер на ноде, мб кто имел с этим дело? дело в том, что надо обрабатывать и прокси с логином и паролем, такие npm пакеты я не нашел….
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Зачем бд нужно? Редис держит в памяти данные, но и сбрасывает их на диск, т.е. в случае падения сервиса он поднимется, считает с диска свой "слепок" и будет дальше работать.
источник

PS

Pavel Shakhov (pongo) in Node.js — русскоговорящее сообщество
southyyy
Ребят привет, очень нужна ваша помощь, мне надо написать прокси чекер на ноде, мб кто имел с этим дело? дело в том, что надо обрабатывать и прокси с логином и паролем, такие npm пакеты я не нашел….
ну странно, вроде везде есть поддержка паролей https://www.npmjs.com/package/socks-proxy-agent
источник

KA

Kylych Asankulov in Node.js — русскоговорящее сообщество
Artem Zuev
Зачем бд нужно? Редис держит в памяти данные, но и сбрасывает их на диск, т.е. в случае падения сервиса он поднимется, считает с диска свой "слепок" и будет дальше работать.
У ссылок ещё будут владельцы, чтоб можно было все свои ссылки достать
источник

PS

Pavel Shakhov (pongo) in Node.js — русскоговорящее сообщество
Kylych Asankulov
У ссылок ещё будут владельцы, чтоб можно было все свои ссылки достать
в таком случае бд нужна, да. ну а редис будет ускоряющим кешем. все норм
источник

s

southyyy in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
ну странно, вроде везде есть поддержка паролей https://www.npmjs.com/package/socks-proxy-agent
спасибо, видимо плохо искал))
источник

KA

Kylych Asankulov in Node.js — русскоговорящее сообщество
Спасибо, парни!
источник

ms

malcev sergey in Node.js — русскоговорящее сообщество
странно, письмо отправляется на почту, я его там нахожу и вроде бы всё ок, (консоль логаю email - там объект письма). Но почему то с сервера приходит ошибка request pending - canceled.... использую  nodemailer в async function ( в доке так же юзают)
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Kylych Asankulov
У ссылок ещё будут владельцы, чтоб можно было все свои ссылки достать
Тогда просто монгу юзай и не парься ;)
Пиши в коллекцию каждую новую ссылку как запись вида:
- полный линк
- владелец
- таймстамп удаления

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

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Для использования чего-то посолиднее типа постгре нет причин по сути. А если хочешь вообще ссылки вечными делать, то глянь в сторону clickhouse - объемы переваривает дикие с отличной скоростью доступа.
источник

RB

Random Balance in Node.js — русскоговорящее сообщество
А потом появится желание вести статистику, показывать владельцам ссылок. Редактирование/удаление (метрики по странам, языкам, ос, браузерам 😂) и т.д. Для этого ещё может понадобиться авторизация. Так что база скорей всего нужна будет хотя бы для всего этого.
источник

SZ

Saken Zhalgas in Node.js — русскоговорящее сообщество
Пытаюсь понять работу async в node. Для примера я написал функцию которая подключает базу данных. И сделал эту функцию как async. И эта фунцкия будет находиться в конце кода. Из-за async он будет уже выполняться в начале, не смотря на положение в коде? Правильно?
источник

RB

Random Balance in Node.js — русскоговорящее сообщество
Saken Zhalgas
Пытаюсь понять работу async в node. Для примера я написал функцию которая подключает базу данных. И сделал эту функцию как async. И эта фунцкия будет находиться в конце кода. Из-за async он будет уже выполняться в начале, не смотря на положение в коде? Правильно?
Совсем не правильно. На то, когда функция будет запущена это никак не влияет.
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Saken Zhalgas
Пытаюсь понять работу async в node. Для примера я написал функцию которая подключает базу данных. И сделал эту функцию как async. И эта фунцкия будет находиться в конце кода. Из-за async он будет уже выполняться в начале, не смотря на положение в коде? Правильно?
Асинк - просто синтаксический сахар над промисами. Изучите сначала их и все станет на свои места ;)
источник