SlideShare a Scribd company logo
1 of 18
Download to read offline
Архитектура
программных
систем
на 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 и DB паттерны
Паттерны организации кода
Модели развертывания
#7 Что есть архитектура?
• Разделять
• называть
• и связывать
#8 Что есть архитектура?
Архитектурная задача
• Выделить и назвать модули, построить связи
• Скомпоновать подсистемы в систему
Выбор идей и инструментов
• Парадигмы, стандарты, модели данных
• Технологии, фреймворки, паттерны
• Модели взаимодействия модулей
• Выбор топологии
• Протоколы и форматы данных
Задача интеграции
• Стыковка модулей еще до их разработки
• Определить внешние интерфейсы (связи)
Модель асинхронности
• Максимальное использование памяти
• Отложенные операции
• Без I/O это еще быстрее асинхронного I/O
Состояние (statefull 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

Similar to JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"

Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Anna Tarasenko
 
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 - самоорганизующийся сервис управления
Кварта Технологии
 
система высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Auroraсистема высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Aurora
Alex Povar
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
Ontico
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
Andrey Smirnov
 
Готовые решения Cisco для построения «частного облака»
Готовые решения Cisco для построения «частного облака»Готовые решения Cisco для построения «частного облака»
Готовые решения Cisco для построения «частного облака»
Cisco Russia
 

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

Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.js
 
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 ...
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
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
 
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
 
Sivko
SivkoSivko
Sivko
 
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 - самоорганизующийся сервис управления
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
 
20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле
 
Windows azure общий обзор
Windows azure общий обзорWindows azure общий обзор
Windows azure общий обзор
 
Опыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеОпыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банке
 
система высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Auroraсистема высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Aurora
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 
Готовые решения Cisco для построения «частного облака»
Готовые решения Cisco для построения «частного облака»Готовые решения Cisco для построения «частного облака»
Готовые решения Cisco для построения «частного облака»
 

More from GeeksLab Odessa

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
GeeksLab Odessa
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
GeeksLab Odessa
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
GeeksLab Odessa
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
GeeksLab Odessa
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
GeeksLab Odessa
 

More from GeeksLab Odessa (20)

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский Виктор
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображение
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
 

JSLab.Тимур Шемсединов. "Архитектура программных систем на 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 и DB паттерны Паттерны организации кода Модели развертывания
  • 9. #7 Что есть архитектура? • Разделять • называть • и связывать
  • 10. #8 Что есть архитектура? Архитектурная задача • Выделить и назвать модули, построить связи • Скомпоновать подсистемы в систему Выбор идей и инструментов • Парадигмы, стандарты, модели данных • Технологии, фреймворки, паттерны • Модели взаимодействия модулей • Выбор топологии • Протоколы и форматы данных Задача интеграции • Стыковка модулей еще до их разработки • Определить внешние интерфейсы (связи)
  • 11. Модель асинхронности • Максимальное использование памяти • Отложенные операции • Без I/O это еще быстрее асинхронного I/O Состояние (statefull 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 Тимур Шемсединов НИИ Системных Технологий Спасибо за внимание Задавайте вопросы