SlideShare ist ein Scribd-Unternehmen logo
1 von 87
Downloaden Sie, um offline zu lesen
Node.js
Меньше сложности,
больше надежности
Timur Shemsedinov
Chief Architect at Metarhia, CTO at Salucyber
Lecturer at KPI & KSE
github.com/tshemsedinov
Куда мы идем?
Много нового
потоки
Promises API потоки
Promises API
Больше Web API
потоки
ESM
Promises API
Больше Web API
потоки
ESM
Promises API
Больше Web API
потоки
WASI
Когда fetch завезут?
ESM
Promises API
Больше Web API
потоки
WASI
Когда fetch завезут?
Че там со стримами?
ESM
Promises API
Больше Web API
потоки
WASI
Когда fetch завезут?
Че там со стримами?
ESM
Promises API
Больше Web API
потоки
WASI
http/3
Но подождите
Но подождите
Куда мы несемся?
Но подождите
Куда мы несемся?
У нас же все сломано
Фатальные недостатки
Какие проблемы?
● Нодежсоднопоточный
Какие проблемы?
● Нодежсоднопоточный
● Джаваскриптоднопоточный
Какие проблемы?
● Нодежсоднопоточный
● Джаваскриптоднопоточный
● Модель параллелизма в go гораздо лучше
Какие проблемы?
● Нодежсоднопоточный
● Джаваскриптоднопоточный
● Модель параллелизма в go гораздо лучше
Какие проблемы?
github.com/metarhia/noroutine
Какие проблемы?
● Habr: 2011
“Node.js — раковая опухоль”
Александр Кавун
Какие проблемы?
● Habr: 2011
“Node.js — раковая опухоль”
Александр Кавун
● Holy.js 2017
“Фатальный недостаток Node.js”
Алексей Охрименко
Какие проблемы?
Process
Thread v8::Isolate
v8::Context
Какие проблемы?
● Память течет
Какие проблемы?
● Память течет
● Callback hell
Какие проблемы?
● Память течет
● Callback hell
● Promise hell
Какие проблемы?
● Память течет
● Callback hell
● Promise hell
● Блокирующие операции
Какие проблемы?
● Память течет
● Callback hell
● Promise hell
● Блокирующие операции
● Неотловленные исключения
Какие проблемы?
● Память течет
● Callback hell
● Promise hell
● Блокирующие операции
● Неотловленные исключения
● Процесс крашится
Какие проблемы?
● Память течет
● Callback hell
● Promise hell
● Блокирующие операции
● Неотловленные исключения
● Процесс крашится
● Дыры в безопасности
Какие проблемы?
Ваш код в окружении node_modules
> 500 Mb
< 50 Kb
В чем же проблема?
Разруха в головах
● Слабое знание Node.js
Разруха в головах
● Слабое знание Node.js
● Сотни мегабайт зависимостей
Разруха в головах
● Слабое знание Node.js
● Сотни мегабайт зависимостей
● Устаревшие фреймворки
Разруха в головах
● Слабое знание Node.js
● Сотни мегабайт зависимостей
● Устаревшие фреймворки
● Недостаток знаний и культуры в сообществе
Разруха в головах
● Слабое знание Node.js
● Сотни мегабайт зависимостей
● Устаревшие фреймворки
● Недостаток знаний и культуры в сообществе
● Непонимание асинхронщины
Разруха в головах
● Слабое знание Node.js
● Сотни мегабайт зависимостей
● Устаревшие фреймворки
● Недостаток знаний и культуры в сообществе
● Непонимание асинхронщины
● Быстрый старт, но ...
разработка вязнет в болоте
Разруха в головах
Что делать?
fs, v8, vm, child_process,
worker_threads, perf_hooks, crypto,
assert, stream/web,
async_hooks, async_context,
events, wasi
Неизвестное внутреннее API
axios, express, lodash, async.js,
bcrypt, argon2, mkdirp, bluebird,
socket.io, request, cluster
Как выбирать зависимости
axios, express, lodash, async.js,
bcrypt, argon2, mkdirp, bluebird,
socket.io, request, cluster
undici, pino, fastify, ws, llparse
Как выбирать зависимости
axios, express, lodash, async.js,
bcrypt, argon2, mkdirp, bluebird,
socket.io, request, cluster
undici, pino, fastify, ws, llparse
Как выбирать зависимости
Как выбирать зависимости
● Возможно, встроенные модули это умеют
Как выбирать зависимости
● Возможно, встроенные модули это умеют
● Пакеты с похожими именами
Как выбирать зависимости
● Возможно, встроенные модули это умеют
● Пакеты с похожими именами
● Зараженные пакеты
Как выбирать зависимости
● Возможно, встроенные модули это умеют
● Пакеты с похожими именами
● Зараженные пакеты
● Перед использованием смотрим код
Как выбирать зависимости
● Возможно, встроенные модули это умеют
● Пакеты с похожими именами
● Зараженные пакеты
● Перед использованием смотрим код
● Смотрим вложенные зависимости
Как выбирать зависимости
● Возможно, встроенные модули это умеют
● Пакеты с похожими именами
● Зараженные пакеты
● Перед использованием смотрим код
● Смотрим вложенные зависимости
● Проверяем по базам уязвимостей
Как выбирать зависимости
● Возможно, встроенные модули это умеют
● Пакеты с похожими именами
● Зараженные пакеты
● Перед использованием смотрим код
● Смотрим вложенные зависимости
● Проверяем по базам уязвимостей
● Проверяем сообщество и поддержку
Как выбирать зависимости
Недостаток культуры разработки
Недостаток культуры разработки
● Отрицание DDD и Clean Architecture
Недостаток культуры разработки
● Отрицание DDD и Clean Architecture
● Слабое проникновение GRASP, SOLID, GoF
Недостаток культуры разработки
● Отрицание DDD и Clean Architecture
● Слабое проникновение GRASP, SOLID, GoF
● Перемешивание слоев абстракций
Недостаток культуры разработки
● Отрицание DDD и Clean Architecture
● Слабое проникновение GRASP, SOLID, GoF
● Перемешивание слоев абстракций
● Повсеместное использование антипаттернов:
mixin, middleware,
reference pollution, prototype pollution ...
Уязвимости роутинга
● ReDOS
● Path traversal
Уязвимости роутинга
● ReDOS
● Path traversal
Вместо этого,
можно искать эндпоинт по URL
в коллекции (Map)
Уязвимости
XSS, SQLI, XSRF, заражения из NPM...
CSP (Content Security Policy)
https://developer.mozilla.org/en-US/docs/
Web/HTTP/CSP
npm audit, snyk, Github Security Alert
Нестабильность процессов
● Утечки памяти и других ресурсов
(приводящие к падению)
● Игнорирование ошибок
● Сильная связанность модулей
● Массовый манкипатчинг структур данных
Все сложно
Кто виноват?
Clean
Architecture
Application services
Domain services
Domain
model
Persistence
Postgres
Redis
Validation
Infrastructure
Logger
Configs
Scheduler
Health mon
Cryptography
Sessions
AAA
Presentation
Web UI
Mobile UI
External API
App firewall
API gateway
Внедрение зависимостей
● Через передачу в конструктор класса
● Модуль экспортирует функцию, в которую
передаются зависимости
● Через DI контейнеры
● Через vm: createContext, createScript
● Зависимости импортируются в одном модуле
и оттуда экспортируются
Что интересует программистов
Язык: любимый синтаксис, крутые фичи
IDE: подсказки, автокомплит, финтифлюшки
Привычные и популярные фреймворки
Наслушались: нагрузки, микросервисы, арх...
Инструменты: оптимизация, дебаг, либы
Экосистема: сообщества, группы, S-Overflow
Должно быть важно программистам
Моделирование предметной области
Язык и парадигмы: синтаксис и семантика
Простота и сложность, поддерживаемый код
Как не накапливать технический долг
Как минимизировать протекание абстракций
Как избавиться от зависимостей
Снизить зацепление, повысить связность
Важные аспекты архитектуры
● Приложение это место для прикладного кода
● Декларативный код лучше императивного
● Состояние: управляемое и явное
● Конфигурация и инфраструктура в коде
● Изолируем подсистемы и модули
● Используем слоеную архитектуру
Важные аспекты для Node.js
● Избегаем состояния гонки, ограничиваем
конкурентность очередями и семафорами
● Закон Деметры
● framework-агностик
● Асинхронное и параллельное
программирование
● Реализуем graceful shutdown
Enterprise development requirements
● Корпоративные требования: надежность,
поддерживаемость, высокая доступность,
безопасность, изоляция, совместимость
● Приложение это место для прикладного кода
● Бизнесу нужны прототипы быстро (TTM)
● Избавляемся зависимостей, качество и
безопасность которых сомнительна
Как понять, что что-то пошло не так
● Вы чувствуете себя формошлепом
● Вы постоянно разрабатываете API
● Вы все время решаете задачки тайпскрипта
● Вы мыслите роутингом
● Вы концентрируетесь на фреймворках
Лекции
Курс по ноде
github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS.md
Курс асинхронщине
github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md
Все лекции
github.com/HowProgrammingWorks/Index
Доклады
Индекс докладов
github.com/HowProgrammingWorks/Index/blob/master/Courses/Talks.md
Презентация Метархии
youtu.be/PHyl4b8Fj5A
Node.js в 2021
youtu.be/nnB7ADYso8s
Ссылки
Гитхаб
github.com/tshemsedinov
Ютюб
youtube.com/c/TimurShemsedinov
Телеграм
github.com/HowProgrammingWorks/Index/blob/master/Links.md

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Building Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaBuilding Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache Kafka
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
 
Базы данных в 2020
Базы данных в 2020Базы данных в 2020
Базы данных в 2020
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services Architecture
 
Distributed tracing using open tracing &amp; jaeger 2
Distributed tracing using open tracing &amp; jaeger 2Distributed tracing using open tracing &amp; jaeger 2
Distributed tracing using open tracing &amp; jaeger 2
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
 
Building rich domain models with ddd and tdd ivan paulovich - betsson
Building rich domain models with ddd and tdd   ivan paulovich - betssonBuilding rich domain models with ddd and tdd   ivan paulovich - betsson
Building rich domain models with ddd and tdd ivan paulovich - betsson
 
High Performance Systems in Go - GopherCon 2014
High Performance Systems in Go - GopherCon 2014High Performance Systems in Go - GopherCon 2014
High Performance Systems in Go - GopherCon 2014
 
Reactive Web - Servlet & Async, Non-blocking I/O
Reactive Web - Servlet & Async, Non-blocking I/OReactive Web - Servlet & Async, Non-blocking I/O
Reactive Web - Servlet & Async, Non-blocking I/O
 
Citi Tech Talk Disaster Recovery Solutions Deep Dive
Citi Tech Talk  Disaster Recovery Solutions Deep DiveCiti Tech Talk  Disaster Recovery Solutions Deep Dive
Citi Tech Talk Disaster Recovery Solutions Deep Dive
 
Real World Event Sourcing and CQRS
Real World Event Sourcing and CQRSReal World Event Sourcing and CQRS
Real World Event Sourcing and CQRS
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the Roadmap
 
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with ThymeleafSpring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
 
Managing an OSGi Framework with Apache Felix Web Console
Managing an OSGi Framework with  Apache Felix Web ConsoleManaging an OSGi Framework with  Apache Felix Web Console
Managing an OSGi Framework with Apache Felix Web Console
 
Microservices in the Apache Kafka Ecosystem
Microservices in the Apache Kafka EcosystemMicroservices in the Apache Kafka Ecosystem
Microservices in the Apache Kafka Ecosystem
 
CQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility SegregationCQRS: Command/Query Responsibility Segregation
CQRS: Command/Query Responsibility Segregation
 
How to build Micro Frontends with @angular/elements
How to build Micro Frontends with @angular/elementsHow to build Micro Frontends with @angular/elements
How to build Micro Frontends with @angular/elements
 
JavaScript Functions
JavaScript Functions JavaScript Functions
JavaScript Functions
 
Redis cluster
Redis clusterRedis cluster
Redis cluster
 
Apache Kafka - Event Sourcing, Monitoring, Librdkafka, Scaling & Partitioning
Apache Kafka - Event Sourcing, Monitoring, Librdkafka, Scaling & PartitioningApache Kafka - Event Sourcing, Monitoring, Librdkafka, Scaling & Partitioning
Apache Kafka - Event Sourcing, Monitoring, Librdkafka, Scaling & Partitioning
 

Ähnlich wie Node.js Меньше сложности, больше надежности Holy.js 2021

Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Ontico
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
beched
 
александр макаров Yii Rit 2010
александр макаров Yii Rit 2010александр макаров Yii Rit 2010
александр макаров Yii Rit 2010
rit2010
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
Media Gorod
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
DarkestMaster
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Ontico
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
Alexander Makarov
 

Ähnlich wie Node.js Меньше сложности, больше надежности Holy.js 2021 (20)

Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
 
александр макаров Yii Rit 2010
александр макаров Yii Rit 2010александр макаров Yii Rit 2010
александр макаров Yii Rit 2010
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScriptWaf.js: как защищать веб-приложения с использованием JavaScript
Waf.js: как защищать веб-приложения с использованием JavaScript
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
Yii rit 2010
Yii rit 2010Yii rit 2010
Yii rit 2010
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
 
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Mythbusters - Web Application Security
Mythbusters - Web Application SecurityMythbusters - Web Application Security
Mythbusters - Web Application Security
 
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Windows azure общий обзор
Windows azure общий обзорWindows azure общий обзор
Windows azure общий обзор
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 

Mehr von Timur Shemsedinov

Information system structure and architecture
Information system structure and architectureInformation system structure and architecture
Information system structure and architecture
Timur Shemsedinov
 
Node.js in 2020 - part 1
Node.js in 2020 - part 1Node.js in 2020 - part 1
Node.js in 2020 - part 1
Timur Shemsedinov
 

Mehr von Timur Shemsedinov (20)

How to use Chat GPT in JavaScript optimizations for Node.js
How to use Chat GPT in JavaScript optimizations for Node.jsHow to use Chat GPT in JavaScript optimizations for Node.js
How to use Chat GPT in JavaScript optimizations for Node.js
 
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
 
Multithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScriptMultithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScript
 
Node.js threads for I/O-bound tasks
Node.js threads for I/O-bound tasksNode.js threads for I/O-bound tasks
Node.js threads for I/O-bound tasks
 
Rethinking low-code
Rethinking low-codeRethinking low-code
Rethinking low-code
 
Hat full of developers
Hat full of developersHat full of developers
Hat full of developers
 
FwDays 2021: Metarhia Technology Stack for Node.js
FwDays 2021: Metarhia Technology Stack for Node.jsFwDays 2021: Metarhia Technology Stack for Node.js
FwDays 2021: Metarhia Technology Stack for Node.js
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS Conference
 
Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3
 
Node.js in 2021
Node.js in 2021Node.js in 2021
Node.js in 2021
 
Node.js middleware: Never again!
Node.js middleware: Never again!Node.js middleware: Never again!
Node.js middleware: Never again!
 
Patterns and antipatterns
Patterns and antipatternsPatterns and antipatterns
Patterns and antipatterns
 
Race-conditions-web-locks-and-shared-memory
Race-conditions-web-locks-and-shared-memoryRace-conditions-web-locks-and-shared-memory
Race-conditions-web-locks-and-shared-memory
 
Asynchronous programming and mutlithreading
Asynchronous programming and mutlithreadingAsynchronous programming and mutlithreading
Asynchronous programming and mutlithreading
 
Node.js in 2020 - part 3
Node.js in 2020 - part 3Node.js in 2020 - part 3
Node.js in 2020 - part 3
 
Node.js in 2020 - part 2
Node.js in 2020 - part 2Node.js in 2020 - part 2
Node.js in 2020 - part 2
 
Information system structure and architecture
Information system structure and architectureInformation system structure and architecture
Information system structure and architecture
 
Node.js in 2020 - part 1
Node.js in 2020 - part 1Node.js in 2020 - part 1
Node.js in 2020 - part 1
 
Web Locks API
Web Locks APIWeb Locks API
Web Locks API
 
Node.js in 2020
Node.js in 2020Node.js in 2020
Node.js in 2020
 

Node.js Меньше сложности, больше надежности Holy.js 2021