18
Архитектура программных систем на Node.js Тимур Шемсединов НИИ Системных Технологий

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

Embed Size (px)

Citation preview

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

Архитектурапрограммныхсистемна Node.jsТимур ШемсединовНИИ Системных Технологий

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

Локальные и консольные утилиты• Сборщики, трансляторы, пакетная обработка• Скрипты, CLI, генерация документации, тесты

Серверы• API и бекенды для SPA (AJAX/JSON, RPC, REST)• Трансляция событий (чаты, игры, интерактив)• Заплаты узкие места уже готовых систем

Клиенты• Кравлеры, сбор данных, сценарии тестов• Оконные приложения (nw.js, node-webkit)

Железо• Системы управления для контроллеров

#1 Типы приложений на Node.js

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

#2 Где начинается архитектура?

Сложность• Система не помещается в голове• Долгий период разработки• Большой коллектив

• Сохранение наработокНадежность• Гарантии для владельцев• Масштабируемость нагрузки• Масштабируемость коллектива

Изменчивость• Живая система постоянно меняется

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

#3 Архитектура и Node.js

JavaScript

node.js

io.js

Орды фронтенд разработчиков вторгаются на сервер

S

B

Архи

тект

оры

КонцептуалистыКорпоративный

булшит

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

JavaScript

node.js

io.js

И тут все зависит от правильного выбора союзников

S

B

Архи

тект

оры

КонцептуалистыКорпоративный

булшит

#3 Архитектура и Node.js

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

#4 Архитектурные проблемы ноды

Мышление не перестроилсь • Языки и сервера с короткой жизнью процесса• Фронтенд (веб или оконные приложения)• Тяжелое наследие ООП

Проблемы абстрагирования• Прикладной код смешан с системным• Не выдержан принцип слоев абстракции

(от низкого уровня к высокому)• Неоднородность (абстракции разного уровня

смешаны в одном слое)• Попытки разделить логику и данные

(невозможно в рамках фоннеймановской архитектуры вычислительной техники)

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

#5 Заблуждения по поводу ноды

Общепринятые практикиЕще не сформировалось общепринятых архитектурных практик для Node.js,но есть мнение, что они уже сформировалисьи это самое худшее

Кажется, что все из коробки......но голая нода очень низкоуровневая

Связка несовместимых:технологий, стандартов и принципов в одном приложении (нет однородности)

NIH (not invented here)чем это хорошо и чем плохо

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

#6 Что НЕ есть архитектура?• Middleware• Роутеры• Single entry point...• Фасад, синглтон• Примесь, замыкание• Фабрика, декоратор• Класс и объект• Прототип, DI и т.д.• MVC, MVP, MVVM• ORM, CRUD, Key-value• Pull/Push, Pub/Sub• REST, RPC и т. д.• Облака, SaaS, PaaS...

Паттерны организации кода}ООП паттерны}Паттерны GUI и доступа в БД}

Коммуникационные паттерны}Паттерны развертывания}

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

#7 Что есть архитектура?

• Разделять• называть• и связывать

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

#8 Что есть архитектура?

Архитектурная задача• Выделить и назвать модули, построить связи• Скомпоновать подсистемы в систему

Выбор идей и инструментов• Парадигмы, стандарты, модели данных• Технологии, фреймворки, паттерны

• Модели взаимодействия модулей• Выбор топологии• Протоколы и форматы данных

Задача интеграции• Стыковка модулей еще до их разработки• Определить внешние интерфейсы (связи)

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

Модель асинхронности• Максимальное использование памяти• Отложенные операции• Без I/O это еще быстрее асинхронного I/O

Состояние (stateful vs stateless)• Долго живущие процессы могут себе позволить• Отказ от состояния уже ничего не дает• Система не может состоять из чистых функций• Интерактивность или большое состояние

Масштабирование• Приклеивание по IP и по Cookie• Межпроцессовое взаимодействие

#9 Особенности Node.js

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

#10 Минимальный клиент-сервер

Клиент

Сервер

СУБД

интерфейс

тело процесса

запрос

ответ

Клиент

Сервер

СУБД

браузер

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

#11 Разделение и связывание

Клиент

Сервер

СУБД

браузер

Клиент

Сервер

СУБД

браузер

заглушки и маршалинг

связывание

e.g. ORM

e.g. RPC

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

#12 Интроспекция и связывание

динамическое связывание

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

#13 Криво разделяем

Клиент

Сервер

СУБД

Предста-вление

Логика

Данные

Лог

ика

Да н

ные

Ин т

ерф

.

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

#14 Разделение на слои правильно

Клиент

Сервер

СУБД

Представление

ДанныеЛогика

Представление

ДанныеЛогика

Представление

ДанныеЛогика

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

Нельзя противопоставлять:«Чем лучше система распределена, тем лучше она централизована»

Монолит это не плохо, а плохо — это когда между модулями сильная связанность, а внутри модулейслабая связанность.

Общие правила, ограничения, соглашения и стандарты делают микросервисы одним целым, монолитом, а отсутствие согласованности ведет к тому, что система распадается на части, не устойчива, не жизнеспособна как организм.

#15 Микросервисы vs монолит

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

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

Тимур ШемсединовНИИ Системных Технологий

Спасибо за вниманиеЗадавайте вопросы