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 и 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

PPT
ВВЕДЕНИЕ В NODE.JS
PDF
Moscow js node.js enterprise development
PDF
Проектирование архитектуры крупных веб-систем
PDF
Денис Чистяков — JavaScript на фронте и в тылу
PDF
Микросервисы на практике
PPTX
Особенности тестирования NoSQL приложений
PPTX
Строим простые и масштабируемые бекэнды
PPTX
CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.
ВВЕДЕНИЕ В NODE.JS
Moscow js node.js enterprise development
Проектирование архитектуры крупных веб-систем
Денис Чистяков — JavaScript на фронте и в тылу
Микросервисы на практике
Особенности тестирования NoSQL приложений
Строим простые и масштабируемые бекэнды
CloudsNN 2014. Андрей Бешков. Защита ваших данных в Office 365.

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

ODP
Архитектура программных систем на Node.js
PDF
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
PPTX
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
PDF
Powershell, Graphs and more. Or how to find dependencies in your systems
PPTX
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
PPTX
Микросервисы в .NET Core
PDF
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
PDF
PDF
AiCare - самоорганизующийся сервис управления
PPTX
AiCare - self-organizing device management service
PPTX
Jelastic для разработчиков ПО
PDF
20160323 Пример бизнес-приложения контроля качества в розничной торговле
PPTX
Windows azure общий обзор
PPTX
Опыт построения микросервисной архитектуры в цифровом банке
PPTX
система высоконагруженных распределенных вычислений Aurora
PDF
Микросервисная архитектура на базе CoreOS и Kubernetes
PPTX
Андрей Завадский "Бессерверная архитектура"
PDF
Анатомия веб-сервиса, Андрей Смирнов
PDF
Анатомия веб-сервиса (РИТ-2014)
PDF
Готовые решения Cisco для построения «частного облака»
Архитектура программных систем на Node.js
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Powershell, Graphs and more. Or how to find dependencies in your systems
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Микросервисы в .NET Core
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
AiCare - самоорганизующийся сервис управления
AiCare - self-organizing device management service
Jelastic для разработчиков ПО
20160323 Пример бизнес-приложения контроля качества в розничной торговле
Windows azure общий обзор
Опыт построения микросервисной архитектуры в цифровом банке
система высоконагруженных распределенных вычислений Aurora
Микросервисная архитектура на базе CoreOS и Kubernetes
Андрей Завадский "Бессерверная архитектура"
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса (РИТ-2014)
Готовые решения Cisco для построения «частного облака»
Ad

More from GeeksLab Odessa (20)

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

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 Тимур Шемсединов НИИ Системных Технологий Спасибо за внимание Задавайте вопросы