Обзор подходов к построению прикладных программных систем на Node.js, анализ и сравнение архитектурных принципов развертывания высоконагруженных прикладных облачных сервисов, масштабирование, тенденции и перспективы в разработке приложений, обзор проблем платформы 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 и доступа в БД
}Коммуникационные паттерны
}Паттерны развертывания
}
9. #7 Что есть архитектура?
• Разделять
• называть
• и связывать
10. #8 Что есть архитектура?
Архитектурная задача
• Выделить и назвать модули, построить связи
• Скомпоновать подсистемы в систему
Выбор идей и инструментов
• Парадигмы, стандарты, модели данных
• Технологии, фреймворки, паттерны
• Модели взаимодействия модулей
• Выбор топологии
• Протоколы и форматы данных
Задача интеграции
• Стыковка модулей еще до их разработки
• Определить внешние интерфейсы (связи)
11. Модель асинхронности
• Максимальное использование памяти
• Отложенные операции
• Без I/O это еще быстрее асинхронного I/O
Состояние (stateful vs stateless)
• Долго живущие процессы могут себе позволить
• Отказ от состояния уже ничего не дает
• Система не может состоять из чистых функций
• Интерактивность или большое состояние
Масштабирование
• Приклеивание по IP и по Cookie
• Межпроцессовое взаимодействие
#9 Особенности Node.js
16. #14 Разделение на слои правильно
Клиент
Сервер
СУБД
Представление
ДанныеЛогика
Представление
ДанныеЛогика
Представление
ДанныеЛогика
17. Нельзя противопоставлять:
«Чем лучше система распределена,
тем лучше она централизована»
Монолит это не плохо, а плохо — это когда между
модулями сильная связанность, а внутри модулей
слабая связанность.
Общие правила, ограничения, соглашения и стандарты
делают микросервисы одним целым, монолитом, а
отсутствие согласованности ведет к тому, что система
распадается на части, не устойчива, не жизнеспособна
как организм.
#15 Микросервисы vs монолит