Многофункциональный сервер приложений,
обеспечивающий среду запуска, и дающий
полный набор инструментов для создания
прикладного программного обеспечения
Масштабирование
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

1

Несколько приложений
• на одном сервере
• в одном процессе ноды
• на одном порту
• на одном домене (разные пути)
Одно приложение
• несколько процессов на одном сервере
• несколько процессов на разных серверах
• имеет несколько доменов (виртуалхостов)
• на нескольких сетевых интерфейсах
• на нескольких портах
• несколько протоколов
Масштабирование
Масштабирование
Структура файлов
Маршрутизация 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
Масштабирование
Load Balancer

Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

Impress
Application
Server

HTTP

С2

С1

С3

IPC

C1N1

C1N2

C1N3

C2N1

C2N2

C2N3

C3N1

ØMQ
pub/sub + req/rep

3

С0

Impress Cloud Controller

C3N2
Структура файлов
Установка:
npm install impress
После этого имеем:
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

4

Порядок обработки
• access.js
• request.js
• get.js, post.js...
• html.template
Маршрутизация URL
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

5

Маршрутизация URL
• создание обработчиков
• наследование обработчиков и шаблонов
• типы возвращаемых данных (HTLM, JSON…)
• запуск обработчиков и шаблонов из памяти
• слежение за файловой системой
• консолидация изменений файлов
• несколько копий обработчиков в памяти
• URL-реврайтинг
• перенаправление и reverse-proxy
Конфигурация
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

6

Конфигуация:
• config.js
• слежение за файловой системой
• препроцессинг конфигурации
Конфигурация
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

7
Конфигурация
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

8
Создание API
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

9
Создание API
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

10

• RPC API (Stateful, состояние может
сохраняться в памяти между запросами)
• REST API (Stateless, каждый запрос
независимый, состояние не сохраняется)
Типы состояния:
• общее состояние системы
• состояние сессии
• состояние пользователя
• состояние объекта предметной области
Создание API
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

11
Шаблоны
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

12
Шаблоны
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

13
Отдача статики
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

14

• Отдача статических файлов
прямо из оперативной памяти
• Обновление кеша при изменении
файлов на диске
• Удаление кеша при удалении
файлов и каталогов с диска
• Сжатие gzip (кроме маленьких файлов)
и сохранение в сжатом виде в памяти
• Использование HTTP if-modified-since
и выдача 304 Not modified
• Минификация клиентского JavaScript
(при помощи плагина "uglify-js")
События SSE
Client1
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

15

Client2

Client3

С1
IPC

C1N1

C1N2

C1N3

…

ClientN
События 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
Доступ к БД
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

17

• Драйвера сделаны плагинами db.*.js
• Удобства для SQL-совместимых БД
• Компиляция схем для реляционных БД
• DBMI Веб-интерфейс для управления
• MongoDB
• MySQL
Доступ к БД / DBMI
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

18
Плагины
Масштабирование
Структура файлов
Маршрутизация URL
Конфигурация
Создание API
Шаблоны
Отдача статики
События (SSE)
Доступ к БД
Плагины

19

• плагин почты (используется nodemailer, multiparty)
• плагин geoip (используется geoip-lite, ставится отдельно)
• плагин CMS (находится в разработке)
• плагин системы пользовательских прав
• плагин npm (ставится отдельно)
Ссылки и контакты
Масштабирование
Структура файлов
Маршрутизация 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

Impress Application Server for node.js (ru)