Impress Application Server for node.js (en)

Post on 27-Nov-2014

955 views 2 download

Tags:

description

Multipurpose Application Server for Node.JS. All decisions are made. Solutions are scaled. Tools are provided and optimized for high load. Ready for applied development and production.

Transcript of Impress Application Server for node.js (en)

Multipurpose Application Server for Node.JS All decisions are made. Solutions are scaled Tools are provided and optimized for high load Ready for applied development and production

Multiple applications• at single server• at single node.js process• at single tcp/ip port • at one domain (different path)

One application• multiple processes at single server• multiple processes at multiple servers• at multiple domains (virtualhosts)• at multiple network interfaces• at multiple ports• over multiple protocols

Scaling

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

1

Deployment strategies:• All in one process (for development):

cluster.strategy: "single"• Separate process for each host/port pair:

cluster.strategy: "specialization"• Single server cluster, master + multiple workers

cluster: { strategy: "multiple", workers: N }• Single server cluster with IP-sticky

cluster.strategy: "sticky"• Multiple servers with multiple workers on each:

strategy: "specialization", + nginx provides balancing and sticky• Applied cloud: hardware balancer,

multiple servers with multiple workers, strategy: "multiple", ØMQ, impress controller

Scaling

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

2

Scaling

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

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

Installation:npm install impressAfter that we have:

Filesystem Structure

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

4Processing steps:• access.js• request.js• get.js, post.js...• html.template

Features:• folders are URL-handlers• handlers and templates inheritance/overriding• handlers by result type (html, json, csv, xml…)• serving handlers and templates from memory• filesystem monitoring and cache refreshing• files changes consolidation• multiple handler instances in memory• URL-rewriting (using regular expressions)• routing and reverse-proxy

URL Routing

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

5

Configuration

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

6

• file: config.js• file system monitoring• config.js soft reloading• configuration preprocessing

Configuration

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

7

Configuration

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

8

API Development

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

9

API Development

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

10

• RPC API (Stateful, state will store in RAM between request/response pairs)• REST API (Stateless, each request/responce

is independent, order is not important, state is not stored in RAM)

State classification:• system global state• session (or connection) state• user state• data-object (subject domain) state

API Development

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

11

Templating

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

12

Templating

13

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

Static Resources

14

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

• Serves static files directly from RAM (memory cache)• File system monitoring and cache refreshing

when file changes• Cache garbage collection (multiple file buffers)

removes items when deleting files or folders• Gzip compresion (except small files)

storing gzipped files in RAM• Implemented HTTP if-modified-since

and HTTP error 304 (Not modified)• Client JavaScript minification

(using plugin "uglify-js")

Events (SSE)

15

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

С1

C1N2C1N1 C1N3

IPC

Client1 Client2 Client3 ClientN…

Events (SSE)

16

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

С1 С2 С3

С0

C2N2C1N2C1N1 C1N3 C2N1 C2N3 C3N1 C3N2

Impress Cloud Controller

IPC

HTTP/SSE

ØMQpub/sub + req/rep

Client1 Client2 Client3 ClientN…

DB Access

17

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

• Database drivers are plugins /lib/db.*.js• Utilities for SQL-compatible DBMS• Database schema compilation from JSON• DBMI Web-interface for database management• MongoDB• MySQL

DB Access / DBMI

18

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

Plugins

19

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

• mail plugin (using nodemailer, multiparty)

• geoip plugin (using geoip-lite, optional installation)

• CMS plugin (in development)

• authentication, authorisation and accounting plugin• npm plugin (optional installation)

Contacts and links

20

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

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