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

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

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JavaScript

node.js

io.js

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

S

B

Архи

тект

оры

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

булшит

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

JavaScript

node.js

io.js

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

S

B

Архи

тект

оры

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

булшит

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#6 Что НЕ есть архитектура?

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

Паттерны ООП

Паттерны коммуникации

GUI и DB паттерны

Паттерны организации кода

Модели развертывания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Клиент

Сервер

СУБД

интерфейс

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

запрос

ответ

Клиент

Сервер

СУБД

браузер

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

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

Клиент

Сервер

СУБД

браузер

Клиент

Сервер

СУБД

браузер

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

связывание

e.g. ORM

e.g. RPC

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

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

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

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

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

Клиент

Сервер

СУБД

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

Логика

Данные

Логи

ка

Да н

ные

Ин т

ерф

.

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

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

Клиент

Сервер

СУБД

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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