impress application server for node.js (ru)
DESCRIPTION
Многофункциональный сервер приложений, обеспечивающий среду запуска на одном сервере и группе серверов, дающий полный набор инструментов для создания прикладного программного обеспечения.TRANSCRIPT
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий полный набор инструментов для создания прикладного программного обеспечения
Несколько приложений• на одном сервере• в одном процессе ноды• на одном порту• на одном домене (разные пути)
Одно приложение• несколько процессов на одном сервере• несколько процессов на разных серверах• имеет несколько доменов (виртуалхостов)• на нескольких сетевых интерфейсах• на нескольких портах• несколько протоколов
Масштабирование
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
1
Стратегии разворачивания:• Все в одном процессе (для разработки):
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
Масштабирование
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
2
Масштабирование
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
3
Load Balancer
С1 С2 С3
С0
C2N2C1N2C1N1 C1N3 C2N1 C2N3 C3N1 C3N2
Impress Cloud Controller
Impress Application Server
IPC
HTTP
ØMQpub/sub + req/rep
Установка:npm install impressПосле этого имеем:
Структура файлов
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
4Порядок обработки• access.js• request.js• get.js, post.js...• html.template
Маршрутизация URL• создание обработчиков• наследование обработчиков и шаблонов• типы возвращаемых данных (HTLM, JSON…)• запуск обработчиков и шаблонов из памяти• слежение за файловой системой• консолидация изменений файлов• несколько копий обработчиков в памяти• URL-реврайтинг• перенаправление и reverse-proxy
Маршрутизация URL
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
5
Конфигурация
МасштабированиеСтруктура файловМаршрутизация 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
Шаблоны
13
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
Отдача статики
14
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
• Отдача статических файлов прямо из оперативной памяти• Обновление кеша при изменении
файлов на диске• Удаление кеша при удалении
файлов и каталогов с диска• Сжатие gzip (кроме маленьких файлов)
и сохранение в сжатом виде в памяти• Использование HTTP if-modified-since
и выдача 304 Not modified• Минификация клиентского JavaScript
(при помощи плагина "uglify-js")
События SSE
15
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
С1
C1N2C1N1 C1N3
IPC
Client1 Client2 Client3 ClientN…
События SSE
16
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
С1 С2 С3
С0
C2N2C1N2C1N1 C1N3 C2N1 C2N3 C3N1 C3N2
Impress Cloud Controller
IPC
HTTP/SSE
ØMQpub/sub + req/rep
Client1 Client2 Client3 ClientN…
Доступ к БД
17
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
• Драйвера сделаны плагинами db.*.js• Удобства для SQL-совместимых БД• Компиляция схем для реляционных БД• DBMI Веб-интерфейс для управления• MongoDB• MySQL
Доступ к БД / DBMI
18
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
Плагины
19
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
• плагин почты (используется nodemailer, multiparty)
• плагин geoip (используется geoip-lite, ставится отдельно)
• плагин CMS (находится в разработке)
• плагин системы пользовательских прав• плагин npm (ставится отдельно)
Ссылки и контакты
20
МасштабированиеСтруктура файловМаршрутизация URLКонфигурацияСоздание APIШаблоныОтдача статикиСобытия (SSE)Доступ к БДПлагины
https://npmjs.org/package/impresshttps://github.com/tshemsedinov/impresshttp://blog.aumcode.comhttp://bit.ly/1cSdTF3 (NFX, AUM, UNISTACK)
mailto:[email protected]:timur.shemsedinov
npm install impress С3
C3N3
C3N1 C3N2