Size: a a a

2020 March 26

с

сomorsiс in Node.js SPb
Aibar
@amel_true здравствуйте! Было бы интересно послушать на следующем митапе, возможные Ваши решения проблемы, когда тебе приходится на node обрабатывать большое количество запросов, где тебе необходимо совершать тяжеловесные синхронные операции
Ну, навскидку:
1) разбивать сеттаймаутами
2) вынести в отдельный тред
3) вынести в отдельный процесс
4) вынести в микросервис
источник

GA

Gleb Azarov in Node.js SPb
Ну на самом деле есть много разных приколов от залипания трэда, например если протокол подключения к какому-то внешнему сервису подразумевает хартбиты выше tcp слоя (проверка живо или нет соединение, e.g. в amqp) это соединение может отваливаться (EL висит - на хардбит ответить не можем), ну и тому подобное.
источник

GA

Gleb Azarov in Node.js SPb
Про долгие синхронные операции, ну и вообще про построение тяжёлых и больших приложений на ноде можно много чего рассказать, но кмк это больше тянет на формат живого диалога, а не прям доклад-доклад. Это скорее много маленьких историй из разряда "как делать не надо" 😅
источник

NM

Nikolay Matvienko in Node.js SPb
Согласен. Все просто – нужно строить много маленьких приложений. И масшабировать их горизонтальро. (но декомпозировать надо тоже без фанатизма, а то это сильно замедляет разработку, не говоря уже о том что транспорт накладывает тоже свои задержки).
источник

с

сomorsiс in Node.js SPb
Nikolay Matvienko
Согласен. Все просто – нужно строить много маленьких приложений. И масшабировать их горизонтальро. (но декомпозировать надо тоже без фанатизма, а то это сильно замедляет разработку, не говоря уже о том что транспорт накладывает тоже свои задержки).
*если вы Гугл
Для всего остального есть монолит
источник

GA

Gleb Azarov in Node.js SPb
сomorsiс
*если вы Гугл
Для всего остального есть монолит
Я бы сформулировал это так: если у команды на старте проекта уже есть опыт построения микросервисной архитектуры или если проект потенциально может вырасти в ближайшие 3-4 года за пределы 3-ёх команд (садитесь с бизнесом и оцениваете нишу и планы) или если вы планируете на полную использовать облачную инфраструктуру (e.g. k8s).
источник

GA

Gleb Azarov in Node.js SPb
Разговоры про монолит имеют права на жизнь вне nodejs экосистемы. У нас здесь нет готового инструментария для получения низкосвязанного кода внутри монолита, а без этого монолит - самоубийство.

(поддерживаем 6-ти летний монолит * ~ 30 человек разработки)
источник

AM

Andrey Melikhov in Node.js SPb
Nikolay Matvienko
Согласен. Все просто – нужно строить много маленьких приложений. И масшабировать их горизонтальро. (но декомпозировать надо тоже без фанатизма, а то это сильно замедляет разработку, не говоря уже о том что транспорт накладывает тоже свои задержки).
У тебя же доклад есть )
источник

NM

Nikolay Matvienko in Node.js SPb
Конечно, все обсуждается и строится по требованиям и воможным требованиям в будущем. А если делать все просто и категорично, ... не знаю как объяснить, но это больше про отшонение и какую-то принятую позицию к работе. Разные требования - разные пути решения. Здесь можно много сказать, но я учу своих слушать клиента, не бояться делать ошибки, но уметь исправлять их и рости при этом.
источник

NM

Nikolay Matvienko in Node.js SPb
Gleb Azarov
Разговоры про монолит имеют права на жизнь вне nodejs экосистемы. У нас здесь нет готового инструментария для получения низкосвязанного кода внутри монолита, а без этого монолит - самоубийство.

(поддерживаем 6-ти летний монолит * ~ 30 человек разработки)
Вот такие слова мне всегда печально слышать или читать. Почему нельзя писать низко связанный код?  Паттерны и солид (без фаназма) ...все. Честное слово, никаких проблем не испытываем.
источник

NM

Nikolay Matvienko in Node.js SPb
Вот по памяти цепочка например.
app -> routeFactory (creates route)-> ControllerFactory (creates controller)-> Service -> Repository or SomyClientAdaptor -> SomeSDK

+ IoC (можно на слои разбить presentation, business layer, domain, infrastructure и в каждом свои IoC), и все зависимости передавать через констктор (DI)
источник

AM

Andrey Melikhov in Node.js SPb
В языке без интерфейсов инверсия так себе
источник

NM

Nikolay Matvienko in Node.js SPb
ну началось :)  и поэтому пишется связанный код )
источник

AM

Andrey Melikhov in Node.js SPb
Да, даже популярные IOC-решения зачастую провоцируют писать сильно связанный код, тот же nest
источник

AM

Andrey Melikhov in Node.js SPb
А вспомнить ужас require cache?
источник

AM

Andrey Melikhov in Node.js SPb
А мидллвары в экспрессе?
источник

с

сomorsiс in Node.js SPb
Andrey Melikhov
А мидллвары в экспрессе?
никогда не понимал, зачем на них строить код
кроме вещей транспортного уровня конечно же
источник

NM

Nikolay Matvienko in Node.js SPb
сори, а что за ужас с require =)
источник

AM

Andrey Melikhov in Node.js SPb
Нужно очень постараться, чтобы из этого всего собрать хорошее числе решение. Схожу без опыта не выйдет
источник

AM

Andrey Melikhov in Node.js SPb
Nikolay Matvienko
сори, а что за ужас с require =)
Ну как же, глобальный манкипатчинг
источник