Многофункциональный сервер приложений,...
TRANSCRIPT
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий полный набор инструментов для создания прикладного программного обеспечения
Несколько приложений • на одном сервере • в одном процессе ноды • на одном порту • на одном домене (разные пути)
Одно приложение • несколько процессов на одном сервере • несколько процессов на разных серверах • имеет несколько доменов (виртуалхостов) • на нескольких сетевых интерфейсах • на нескольких портах • несколько протоколов
Масштабирование
Масштабирование Структура файлов Маршрутизация URL Конфигурация Создание API Шаблоны Отдача статики События (SSE) Доступ к БД Плагины
1
Стратегии разворачивания: • Все в одном процессе (для разработки): cluster.strategy: "single" • Свой процесс ноды для каждой пары хост/порт: cluster.strategy: "specializaZon" • Кластер на одном сервере (master+workers) cluster: { strategy: "mulZple", workers: N } • Кластер на 1 сервере с прилипанием по IP cluster.strategy: "sZcky" • Группа серверов с кластером на каждом: strategy: "specializaZon", nginx обеспечивает балансировку и прилипание • Прикладное облако: аппаратный балансировщик, несколько кластеров с strategy: "mulZple", ØMQ, impress controller
Масштабирование
Масштабирование Структура файлов Маршрутизация URL Конфигурация Создание API Шаблоны Отдача статики События (SSE) Доступ к БД Плагины
2
Масштабирование
Масштабирование Структура файлов Маршрутизация URL Конфигурация Создание API Шаблоны Отдача статики События (SSE) Доступ к БД Плагины
3
Load Balancer
С1 С2 С3
C3N3
С0
C2N2 C1N2 C1N1 C1N3 C2N1 C2N3 C3N1 C3N2
Impress Cloud Controller
Impress ApplicaZon Server
IPC
HTTP
ØMQ pub/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
C1N2 C1N1 C1N3
IPC
Client1 Client2 Client3 ClientN …
События SSE
16
Масштабирование Структура файлов Маршрутизация URL Конфигурация Создание API Шаблоны Отдача статики События (SSE) Доступ к БД Плагины
С1 С2 С3
C3N3
С0
C2N2 C1N2 C1N1 C1N3 C2N1 C2N3 C3N1 C3N2
Impress Cloud Controller
IPC
HTTP/SSE
ØMQ pub/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, mulZparty) • плагин geoip (используется geoip-‐lite, ставится отдельно) • плагин CMS (находится в разработке) • плагин системы пользовательских прав • плагин npm (ставится отдельно)
Ссылки и контакты
20
Масштабирование Структура файлов Маршрутизация URL Конфигурация Создание API Шаблоны Отдача статики События (SSE) Доступ к БД Плагины
h�ps://npmjs.org/package/impress h�ps://github.com/tshemsedinov/impress mailto:[email protected] skype:Zmur.shemsedinov npm install impress
С3
C3N3
C3N1 C3N2