Многофункциональный сервер приложений, обеспечивающий среду запуска на одном сервере и группе серверов, дающий полный набор инструментов для создания прикладного программного обеспечения.
2. Масштабирование
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
1
Несколько приложений
• на одном сервере
• в одном процессе ноды
• на одном порту
• на одном домене (разные пути)
Одно приложение
• несколько процессов на одном сервере
• несколько процессов на разных серверах
• имеет несколько доменов (виртуалхостов)
• на нескольких сетевых интерфейсах
• на нескольких портах
• несколько протоколов
3. Масштабирование
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
2
Стратегии разворачивания:
• Все в одном процессе (для разработки):
cluster.strategy: "single"
• Свой процесс ноды для каждой пары
хост/порт: cluster.strategy: "specialization"
• Кластер на одном сервере (master+workers)
cluster: { strategy: "multiple", workers: N }
• Кластер на 1 сервере с прилипанием по IP
cluster.strategy: "sticky"
• Группа серверов с кластером на каждом:
strategy: "specialization", nginx
обеспечивает балансировку и прилипание
• Прикладное облако: аппаратный
балансировщик, несколько кластеров с
strategy: "multiple", ØMQ, impress controller
5. Структура файлов
Установка:
npm install impress
После этого имеем:
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
4
Порядок обработки
• access.js
• request.js
• get.js, post.js...
• html.template
6. Маршрутизация URL
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
5
Маршрутизация URL
• создание обработчиков
• наследование обработчиков и шаблонов
• типы возвращаемых данных (HTLM, JSON…)
• запуск обработчиков и шаблонов из памяти
• слежение за файловой системой
• консолидация изменений файлов
• несколько копий обработчиков в памяти
• URL-реврайтинг
• перенаправление и reverse-proxy
11. Создание API
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
10
• RPC API (Stateful, состояние может
сохраняться в памяти между запросами)
• REST API (Stateless, каждый запрос
независимый, состояние не сохраняется)
Типы состояния:
• общее состояние системы
• состояние сессии
• состояние пользователя
• состояние объекта предметной области
15. Отдача статики
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
14
• Отдача статических файлов
прямо из оперативной памяти
• Обновление кеша при изменении
файлов на диске
• Удаление кеша при удалении
файлов и каталогов с диска
• Сжатие gzip (кроме маленьких файлов)
и сохранение в сжатом виде в памяти
• Использование HTTP if-modified-since
и выдача 304 Not modified
• Минификация клиентского JavaScript
(при помощи плагина "uglify-js")
17. События SSE
Client1
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
Client2
Client3
…
ClientN
HTTP/SSE
С2
С1
С3
IPC
C1N1
C1N2
C1N3
C2N1
C2N2
C2N3
C3N1
ØMQ
pub/sub + req/rep
16
С0
Impress Cloud Controller
C3N2
18. Доступ к БД
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
17
• Драйвера сделаны плагинами db.*.js
• Удобства для SQL-совместимых БД
• Компиляция схем для реляционных БД
• DBMI Веб-интерфейс для управления
• MongoDB
• MySQL
19. Доступ к БД / DBMI
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
18
20. Плагины
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
19
• плагин почты (используется nodemailer, multiparty)
• плагин geoip (используется geoip-lite, ставится отдельно)
• плагин CMS (находится в разработке)
• плагин системы пользовательских прав
• плагин npm (ставится отдельно)
21. Ссылки и контакты
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины
20
https://npmjs.org/package/impress
https://github.com/tshemsedinov/impress
http://blog.aumcode.com
http://bit.ly/1cSdTF3 (NFX, AUM, UNISTACK)
mailto:timur.shemsedinov@gmail.com
skype:timur.shemsedinov
npm install impress