impress application server for node.js (ru)

Post on 16-Jun-2015

2.414 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

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:timur.shemsedinov@gmail.comskype:timur.shemsedinov

npm install impress С3

C3N3

C3N1 C3N2

top related