SlideShare a Scribd company logo
Архитектура
программных
систем
на Node.js
Тимур Шемсединов
НИИ Системных Технологий
Локальные и консольные утилиты
• Сборщики, трансляторы, пакетная обработка
• Скрипты, CLI, генерация документации, тесты
Серверы
• API и бекенды для SPA (AJAX/JSON, RPC, REST)
• Трансляция событий (чаты, игры, интерактив)
• Заплаты узкие места уже готовых систем
Клиенты
• Кравлеры, сбор данных, сценарии тестов
• Оконные приложения (nw.js, node-webkit)
Железо
• Системы управления для контроллеров
#1 Типы приложений на Node.js
#2 Где начинается архитектура?
Сложность
• Система не помещается в голове
• Долгий период разработки
• Большой коллектив
• Сохранение наработок
Надежность
• Гарантии для владельцев
• Масштабируемость нагрузки
• Масштабируемость коллектива
Изменчивость
• Живая система постоянно меняется
#3 Архитектура и Node.js
JavaScript
node.js
io.js
Орды фронтенд разработчиков вторгаются на сервер
S
B
Архитекторы
Концептуалисты
Корпоративный
булшит
JavaScript
node.js
io.js
И тут все зависит от правильного выбора союзников
S
B
Архитекторы
Концептуалисты
Корпоративный
булшит
#3 Архитектура и Node.js
#4 Архитектурные проблемы ноды
Мышление не перестроилсь
• Языки и сервера с короткой жизнью процесса
• Фронтенд (веб или оконные приложения)
• Тяжелое наследие ООП
Проблемы абстрагирования
• Прикладной код смешан с системным
• Не выдержан принцип слоев абстракции
(от низкого уровня к высокому)
• Неоднородность (абстракции разного уровня
смешаны в одном слое)
• Попытки разделить логику и данные
(невозможно в рамках фоннеймановской
архитектуры вычислительной техники)
#5 Заблуждения по поводу ноды
Общепринятые практики
Еще не сформировалось общепринятых
архитектурных практик для Node.js,
но есть мнение, что они уже сформировались
и это самое худшее
Кажется, что все из коробки...
...но голая нода очень низкоуровневая
Связка несовместимых:
технологий, стандартов и принципов в одном
приложении (нет однородности)
NIH (not invented here)
чем это хорошо и чем плохо
#6 Что НЕ есть архитектура?
• Middleware
• Роутеры
• Single entry point...
• Фасад, синглтон
• Примесь, замыкание
• Фабрика, декоратор
• Класс и объект
• Прототип, DI и т.д.
• MVC, MVP, MVVM
• ORM, CRUD, Key-value
• Pull/Push, Pub/Sub
• REST, RPC и т. д.
• Облака, SaaS, PaaS...
Паттерны организации кода}
ООП паттерны
}Паттерны GUI и доступа в БД
}Коммуникационные паттерны
}Паттерны развертывания
}
#7 Что есть архитектура?
• Разделять
• называть
• и связывать
#8 Что есть архитектура?
Архитектурная задача
• Выделить и назвать модули, построить связи
• Скомпоновать подсистемы в систему
Выбор идей и инструментов
• Парадигмы, стандарты, модели данных
• Технологии, фреймворки, паттерны
• Модели взаимодействия модулей
• Выбор топологии
• Протоколы и форматы данных
Задача интеграции
• Стыковка модулей еще до их разработки
• Определить внешние интерфейсы (связи)
Модель асинхронности
• Максимальное использование памяти
• Отложенные операции
• Без I/O это еще быстрее асинхронного I/O
Состояние (stateful vs stateless)
• Долго живущие процессы могут себе позволить
• Отказ от состояния уже ничего не дает
• Система не может состоять из чистых функций
• Интерактивность или большое состояние
Масштабирование
• Приклеивание по IP и по Cookie
• Межпроцессовое взаимодействие
#9 Особенности Node.js
#10 Минимальный клиент-сервер
Клиент
Сервер
СУБД
интерфейс
тело процесса
запрос
ответ
Клиент
Сервер
СУБД
браузер
#11 Разделение и связывание
Клиент
Сервер
СУБД
браузер
Клиент
Сервер
СУБД
браузер
заглушки и маршалинг
связывание
e.g. ORM
e.g. RPC
#12 Интроспекция и связывание
динамическое связывание
#13 Криво разделяем
Клиент
Сервер
СУБД
Предста-
вление
Логика
Данные
Логика
Данные
Интерф.
#14 Разделение на слои правильно
Клиент
Сервер
СУБД
Представление
ДанныеЛогика
Представление
ДанныеЛогика
Представление
ДанныеЛогика
Нельзя противопоставлять:
«Чем лучше система распределена,
тем лучше она централизована»
Монолит это не плохо, а плохо — это когда между
модулями сильная связанность, а внутри модулей
слабая связанность.
Общие правила, ограничения, соглашения и стандарты
делают микросервисы одним целым, монолитом, а
отсутствие согласованности ведет к тому, что система
распадается на части, не устойчива, не жизнеспособна
как организм.
#15 Микросервисы vs монолит
Архитектура
программных систем
на Node.js
Тимур Шемсединов
НИИ Системных Технологий
Спасибо за внимание
Задавайте вопросы

More Related Content

What's hot (20)

PPTX
JSON-LD for RESTful services
Markus Lanthaler
 
PDF
Spring Framework - Expression Language
Dzmitry Naskou
 
PDF
API for Beginners
Sébastien Saunier
 
PPT
Web Services Hacking and Security
Blueinfy Solutions
 
PPTX
Indexing with MongoDB
MongoDB
 
PDF
개발자를 위한 (블로그) 글쓰기 intro
Seongyun Byeon
 
PDF
Node.js Меньше сложности, больше надежности Holy.js 2021
Timur Shemsedinov
 
PDF
REST vs. GraphQL: Critical Look
Nordic APIs
 
PPSX
Rest api standards and best practices
Ankita Mahajan
 
PPTX
Node.js File system & Streams
Eyal Vardi
 
PDF
The Xtext Grammar Language
Dr. Jan Köhnlein
 
PDF
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
 
PPTX
Hydra: A Vocabulary for Hypermedia-Driven Web APIs
Markus Lanthaler
 
PPTX
Mongo db queries
ssuser6d5faa
 
PPTX
Web Cache Deception Attack
Omer Gil
 
PPT
Advanced Json
guestfd7d7c
 
PPT
JavaScript Event Loop
Thomas Hunter II
 
PPTX
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
 
PPTX
Express JS Rest API Tutorial
Simplilearn
 
PDF
Spring Data JPA from 0-100 in 60 minutes
VMware Tanzu
 
JSON-LD for RESTful services
Markus Lanthaler
 
Spring Framework - Expression Language
Dzmitry Naskou
 
API for Beginners
Sébastien Saunier
 
Web Services Hacking and Security
Blueinfy Solutions
 
Indexing with MongoDB
MongoDB
 
개발자를 위한 (블로그) 글쓰기 intro
Seongyun Byeon
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Timur Shemsedinov
 
REST vs. GraphQL: Critical Look
Nordic APIs
 
Rest api standards and best practices
Ankita Mahajan
 
Node.js File system & Streams
Eyal Vardi
 
The Xtext Grammar Language
Dr. Jan Köhnlein
 
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
 
Hydra: A Vocabulary for Hypermedia-Driven Web APIs
Markus Lanthaler
 
Mongo db queries
ssuser6d5faa
 
Web Cache Deception Attack
Omer Gil
 
Advanced Json
guestfd7d7c
 
JavaScript Event Loop
Thomas Hunter II
 
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
 
Express JS Rest API Tutorial
Simplilearn
 
Spring Data JPA from 0-100 in 60 minutes
VMware Tanzu
 

Viewers also liked (20)

PDF
Проектирование архитектуры крупных веб-систем
TKConf
 
PDF
Moscow js node.js enterprise development
Pavel Tiunov
 
PPTX
Метапрограммирование с примерами на JavaScript
Timur Shemsedinov
 
PDF
Metarhia: Node.js Macht Frei
Timur Shemsedinov
 
PDF
AllcountJS VTB24 loan сonveyor POC
Pavel Tiunov
 
PPTX
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Dmytro Mindra
 
PPT
Node.js (RichClient)
Serge Shirokov
 
PPTX
Learn Developing REST API in Node.js using LoopBack Framework
Marudi Subakti
 
PPTX
Visualize your architecture and information
Peter Norrhall
 
PPTX
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
GeeksLab Odessa
 
PDF
Use Node.js to create a REST API
Fabien Vauchelles
 
PPTX
Impress Application Server for node.js (ru)
Timur Shemsedinov
 
PPT
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
PDF
Introduction to REST API with Node.js
Yoann Gotthilf
 
PPTX
Impress Application Server for node.js (en)
Timur Shemsedinov
 
PDF
Асинхронность и параллелизм в Node.js
GeeksLab Odessa
 
PDF
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Ontico
 
PDF
Developing and Testing a MongoDB and Node.js REST API
All Things Open
 
PDF
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Ontico
 
PDF
Architecting large Node.js applications
Sergi Mansilla
 
Проектирование архитектуры крупных веб-систем
TKConf
 
Moscow js node.js enterprise development
Pavel Tiunov
 
Метапрограммирование с примерами на JavaScript
Timur Shemsedinov
 
Metarhia: Node.js Macht Frei
Timur Shemsedinov
 
AllcountJS VTB24 loan сonveyor POC
Pavel Tiunov
 
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Dmytro Mindra
 
Node.js (RichClient)
Serge Shirokov
 
Learn Developing REST API in Node.js using LoopBack Framework
Marudi Subakti
 
Visualize your architecture and information
Peter Norrhall
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
GeeksLab Odessa
 
Use Node.js to create a REST API
Fabien Vauchelles
 
Impress Application Server for node.js (ru)
Timur Shemsedinov
 
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
Introduction to REST API with Node.js
Yoann Gotthilf
 
Impress Application Server for node.js (en)
Timur Shemsedinov
 
Асинхронность и параллелизм в Node.js
GeeksLab Odessa
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Ontico
 
Developing and Testing a MongoDB and Node.js REST API
All Things Open
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Ontico
 
Architecting large Node.js applications
Sergi Mansilla
 
Ad

Similar to Архитектура программных систем на Node.js (20)

PDF
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
GeeksLab Odessa
 
PDF
Powershell, Graphs and more. Or how to find dependencies in your systems
Andrey Vernigora
 
PDF
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Fwdays
 
PPTX
Микросервисы в .NET Core
Andrew Gubskiy
 
PPTX
AiCare - self-organizing device management service
Кварта Технологии
 
PDF
AiCare - самоорганизующийся сервис управления
Кварта Технологии
 
PDF
Sivko
kuchinskaya
 
PPTX
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
IT Event
 
PPTX
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Anna Tarasenko
 
PDF
OTUS Infrastructure as Code
Igor Kurochkin
 
PDF
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Mail.ru Group
 
PPTX
Опыт построения микросервисной архитектуры в цифровом банке
CUSTIS
 
PPT
Hl2008 Spy Log Architechture 169
Media Gorod
 
PPTX
система высоконагруженных распределенных вычислений Aurora
Alex Povar
 
PDF
Анатомия веб-сервиса (РИТ-2014)
Andrey Smirnov
 
PDF
Анатомия веб-сервиса, Андрей Смирнов
Ontico
 
PPTX
CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.
Clouds NN
 
PPT
New SpyLOG architechture (Highload 2008)
Sergey Skvortsov
 
PDF
Готовые решения Cisco для построения «частного облака»
Cisco Russia
 
PPTX
Jelastic для разработчиков ПО
Dmitry Lazarenko
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
GeeksLab Odessa
 
Powershell, Graphs and more. Or how to find dependencies in your systems
Andrey Vernigora
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Fwdays
 
Микросервисы в .NET Core
Andrew Gubskiy
 
AiCare - self-organizing device management service
Кварта Технологии
 
AiCare - самоорганизующийся сервис управления
Кварта Технологии
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
IT Event
 
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Anna Tarasenko
 
OTUS Infrastructure as Code
Igor Kurochkin
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Mail.ru Group
 
Опыт построения микросервисной архитектуры в цифровом банке
CUSTIS
 
Hl2008 Spy Log Architechture 169
Media Gorod
 
система высоконагруженных распределенных вычислений Aurora
Alex Povar
 
Анатомия веб-сервиса (РИТ-2014)
Andrey Smirnov
 
Анатомия веб-сервиса, Андрей Смирнов
Ontico
 
CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.
Clouds NN
 
New SpyLOG architechture (Highload 2008)
Sergey Skvortsov
 
Готовые решения Cisco для построения «частного облака»
Cisco Russia
 
Jelastic для разработчиков ПО
Dmitry Lazarenko
 
Ad

More from Timur Shemsedinov (20)

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

Архитектура программных систем на Node.js

  • 2. Локальные и консольные утилиты • Сборщики, трансляторы, пакетная обработка • Скрипты, CLI, генерация документации, тесты Серверы • API и бекенды для SPA (AJAX/JSON, RPC, REST) • Трансляция событий (чаты, игры, интерактив) • Заплаты узкие места уже готовых систем Клиенты • Кравлеры, сбор данных, сценарии тестов • Оконные приложения (nw.js, node-webkit) Железо • Системы управления для контроллеров #1 Типы приложений на Node.js
  • 3. #2 Где начинается архитектура? Сложность • Система не помещается в голове • Долгий период разработки • Большой коллектив • Сохранение наработок Надежность • Гарантии для владельцев • Масштабируемость нагрузки • Масштабируемость коллектива Изменчивость • Живая система постоянно меняется
  • 4. #3 Архитектура и Node.js JavaScript node.js io.js Орды фронтенд разработчиков вторгаются на сервер S B Архитекторы Концептуалисты Корпоративный булшит
  • 5. JavaScript node.js io.js И тут все зависит от правильного выбора союзников S B Архитекторы Концептуалисты Корпоративный булшит #3 Архитектура и Node.js
  • 6. #4 Архитектурные проблемы ноды Мышление не перестроилсь • Языки и сервера с короткой жизнью процесса • Фронтенд (веб или оконные приложения) • Тяжелое наследие ООП Проблемы абстрагирования • Прикладной код смешан с системным • Не выдержан принцип слоев абстракции (от низкого уровня к высокому) • Неоднородность (абстракции разного уровня смешаны в одном слое) • Попытки разделить логику и данные (невозможно в рамках фоннеймановской архитектуры вычислительной техники)
  • 7. #5 Заблуждения по поводу ноды Общепринятые практики Еще не сформировалось общепринятых архитектурных практик для Node.js, но есть мнение, что они уже сформировались и это самое худшее Кажется, что все из коробки... ...но голая нода очень низкоуровневая Связка несовместимых: технологий, стандартов и принципов в одном приложении (нет однородности) NIH (not invented here) чем это хорошо и чем плохо
  • 8. #6 Что НЕ есть архитектура? • Middleware • Роутеры • Single entry point... • Фасад, синглтон • Примесь, замыкание • Фабрика, декоратор • Класс и объект • Прототип, DI и т.д. • MVC, MVP, MVVM • ORM, CRUD, Key-value • Pull/Push, Pub/Sub • REST, RPC и т. д. • Облака, SaaS, PaaS... Паттерны организации кода} ООП паттерны }Паттерны GUI и доступа в БД }Коммуникационные паттерны }Паттерны развертывания }
  • 9. #7 Что есть архитектура? • Разделять • называть • и связывать
  • 10. #8 Что есть архитектура? Архитектурная задача • Выделить и назвать модули, построить связи • Скомпоновать подсистемы в систему Выбор идей и инструментов • Парадигмы, стандарты, модели данных • Технологии, фреймворки, паттерны • Модели взаимодействия модулей • Выбор топологии • Протоколы и форматы данных Задача интеграции • Стыковка модулей еще до их разработки • Определить внешние интерфейсы (связи)
  • 11. Модель асинхронности • Максимальное использование памяти • Отложенные операции • Без I/O это еще быстрее асинхронного I/O Состояние (stateful vs stateless) • Долго живущие процессы могут себе позволить • Отказ от состояния уже ничего не дает • Система не может состоять из чистых функций • Интерактивность или большое состояние Масштабирование • Приклеивание по IP и по Cookie • Межпроцессовое взаимодействие #9 Особенности Node.js
  • 12. #10 Минимальный клиент-сервер Клиент Сервер СУБД интерфейс тело процесса запрос ответ Клиент Сервер СУБД браузер
  • 13. #11 Разделение и связывание Клиент Сервер СУБД браузер Клиент Сервер СУБД браузер заглушки и маршалинг связывание e.g. ORM e.g. RPC
  • 14. #12 Интроспекция и связывание динамическое связывание
  • 16. #14 Разделение на слои правильно Клиент Сервер СУБД Представление ДанныеЛогика Представление ДанныеЛогика Представление ДанныеЛогика
  • 17. Нельзя противопоставлять: «Чем лучше система распределена, тем лучше она централизована» Монолит это не плохо, а плохо — это когда между модулями сильная связанность, а внутри модулей слабая связанность. Общие правила, ограничения, соглашения и стандарты делают микросервисы одним целым, монолитом, а отсутствие согласованности ведет к тому, что система распадается на части, не устойчива, не жизнеспособна как организм. #15 Микросервисы vs монолит
  • 18. Архитектура программных систем на Node.js Тимур Шемсединов НИИ Системных Технологий Спасибо за внимание Задавайте вопросы

Editor's Notes

  • #3: Серверы – события - Websocket, SSE <number>
  • #4: <number>
  • #5: <number>
  • #6: <number>
  • #7: Предыдущим языком или техно логическим стеком Слоев или вообще нет или в одном слое используются абстракции разного уровня <number>
  • #8: Предыдущим языком или техно логическим стеком Слоев или вообще нет или в одном слое используются абстракции разного уровня <number>
  • #9: <number>
  • #10: <number>
  • #11: <number>
  • #12: <number>
  • #13: <number>
  • #14: <number>
  • #15: <number>
  • #16: <number>
  • #17: <number>
  • #18: <number>
  • #19: <number>