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

Preview:

Citation preview

Архитектурапрограммныхсистемна 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

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

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

Recommended