SlideShare a Scribd company logo
1 of 18
Архитектура
программных
систем
на 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)

Terraform
TerraformTerraform
Terraform
 
Use Node.js to create a REST API
Use Node.js to create a REST APIUse Node.js to create a REST API
Use Node.js to create a REST API
 
Express node js
Express node jsExpress node js
Express node js
 
Drools rule Concepts
Drools rule ConceptsDrools rule Concepts
Drools rule Concepts
 
What Is Express JS?
What Is Express JS?What Is Express JS?
What Is Express JS?
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Vue Vuex 101
Vue Vuex 101Vue Vuex 101
Vue Vuex 101
 
Embedded Android : System Development - Part II (HAL)
Embedded Android : System Development - Part II (HAL)Embedded Android : System Development - Part II (HAL)
Embedded Android : System Development - Part II (HAL)
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
ASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP Fundamentals
 
ArangoDB
ArangoDBArangoDB
ArangoDB
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modules
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Api presentation
Api presentationApi presentation
Api presentation
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
 
Microservices with Micronaut
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
 

Viewers also liked

Проектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-системПроектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-системTKConf
 
Moscow js node.js enterprise development
Moscow js node.js enterprise developmentMoscow js node.js enterprise development
Moscow js node.js enterprise developmentPavel Tiunov
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptTimur Shemsedinov
 
Metarhia: Node.js Macht Frei
Metarhia: Node.js Macht FreiMetarhia: Node.js Macht Frei
Metarhia: Node.js Macht FreiTimur Shemsedinov
 
AllcountJS VTB24 loan сonveyor POC
AllcountJS VTB24 loan сonveyor POCAllcountJS VTB24 loan сonveyor POC
AllcountJS VTB24 loan сonveyor POCPavel Tiunov
 
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012Dmytro Mindra
 
Learn Developing REST API in Node.js using LoopBack Framework
Learn Developing REST API  in Node.js using LoopBack FrameworkLearn Developing REST API  in Node.js using LoopBack Framework
Learn Developing REST API in Node.js using LoopBack FrameworkMarudi Subakti
 
Visualize your architecture and information
Visualize your architecture and informationVisualize your architecture and information
Visualize your architecture and informationPeter Norrhall
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js GeeksLab Odessa
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Timur Shemsedinov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
Introduction to REST API with Node.js
Introduction to REST API with Node.jsIntroduction to REST API with Node.js
Introduction to REST API with Node.jsYoann Gotthilf
 
Impress Application Server for node.js (en)
Impress Application Server for node.js (en)Impress Application Server for node.js (en)
Impress Application Server for node.js (en)Timur Shemsedinov
 
Асинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsАсинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsGeeksLab Odessa
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Developing and Testing a MongoDB and Node.js REST API
Developing and Testing a MongoDB and Node.js REST APIDeveloping and Testing a MongoDB and Node.js REST API
Developing and Testing a MongoDB and Node.js REST APIAll Things Open
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
Architecting large Node.js applications
Architecting large Node.js applicationsArchitecting large Node.js applications
Architecting large Node.js applicationsSergi Mansilla
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture AppDynamics
 

Viewers also liked (20)

Проектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-системПроектирование архитектуры крупных веб-систем
Проектирование архитектуры крупных веб-систем
 
Moscow js node.js enterprise development
Moscow js node.js enterprise developmentMoscow js node.js enterprise development
Moscow js node.js enterprise development
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
 
Metarhia: Node.js Macht Frei
Metarhia: Node.js Macht FreiMetarhia: Node.js Macht Frei
Metarhia: Node.js Macht Frei
 
AllcountJS VTB24 loan сonveyor POC
AllcountJS VTB24 loan сonveyor POCAllcountJS VTB24 loan сonveyor POC
AllcountJS VTB24 loan сonveyor POC
 
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Learn Developing REST API in Node.js using LoopBack Framework
Learn Developing REST API  in Node.js using LoopBack FrameworkLearn Developing REST API  in Node.js using LoopBack Framework
Learn Developing REST API in Node.js using LoopBack Framework
 
Visualize your architecture and information
Visualize your architecture and informationVisualize your architecture and information
Visualize your architecture and information
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Introduction to REST API with Node.js
Introduction to REST API with Node.jsIntroduction to REST API with Node.js
Introduction to REST API with Node.js
 
Impress Application Server for node.js (en)
Impress Application Server for node.js (en)Impress Application Server for node.js (en)
Impress Application Server for node.js (en)
 
Асинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsАсинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.js
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Developing and Testing a MongoDB and Node.js REST API
Developing and Testing a MongoDB and Node.js REST APIDeveloping and Testing a MongoDB and Node.js REST API
Developing and Testing a MongoDB and Node.js REST API
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Architecting large Node.js applications
Architecting large Node.js applicationsArchitecting large Node.js applications
Architecting large Node.js applications
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture
 

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

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

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

JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
 
Powershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsPowershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systems
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
AiCare - self-organizing device management service
AiCare - self-organizing device management serviceAiCare - self-organizing device management service
AiCare - self-organizing device management service
 
AiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управленияAiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управления
 
Sivko
SivkoSivko
Sivko
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
 
OTUS Infrastructure as Code
OTUS Infrastructure as CodeOTUS Infrastructure as Code
OTUS Infrastructure as Code
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
 
Опыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеОпыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банке
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
система высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Auroraсистема высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Aurora
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 
CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.
CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.
CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
 
Готовые решения Cisco для построения «частного облака»
Готовые решения Cisco для построения «частного облака»Готовые решения Cisco для построения «частного облака»
Готовые решения Cisco для построения «частного облака»
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
 

More from Timur Shemsedinov

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.jsTimur Shemsedinov
 
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...Timur Shemsedinov
 
Multithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScriptMultithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScriptTimur Shemsedinov
 
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 tasksTimur Shemsedinov
 
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.jsTimur Shemsedinov
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceTimur Shemsedinov
 
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 3Timur Shemsedinov
 
Node.js middleware: Never again!
Node.js middleware: Never again!Node.js middleware: Never again!
Node.js middleware: Never again!Timur Shemsedinov
 
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-memoryTimur Shemsedinov
 
Asynchronous programming and mutlithreading
Asynchronous programming and mutlithreadingAsynchronous programming and mutlithreading
Asynchronous programming and mutlithreadingTimur Shemsedinov
 
Information system structure and architecture
Information system structure and architectureInformation system structure and architecture
Information system structure and architectureTimur Shemsedinov
 

More from 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

  • 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

  1. Серверы – события - Websocket, SSE <number>
  2. <number>
  3. <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>