impress application server for node.js (en)

21
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

Upload: timur-shemsedinov

Post on 27-Nov-2014

969 views

Category:

Education


2 download

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

Page 1: 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

Page 2: Impress Application Server for node.js (en)

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

Page 3: Impress Application Server for node.js (en)

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

Page 4: Impress Application Server for node.js (en)

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

Page 5: Impress Application Server for node.js (en)

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

Page 6: Impress Application Server for node.js (en)

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

Page 7: Impress Application Server for node.js (en)

Configuration

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

6

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

Page 8: Impress Application Server for node.js (en)

Configuration

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

7

Page 9: Impress Application Server for node.js (en)

Configuration

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

8

Page 10: Impress Application Server for node.js (en)

API Development

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

9

Page 11: Impress Application Server for node.js (en)

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

Page 12: Impress Application Server for node.js (en)

API Development

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

11

Page 13: Impress Application Server for node.js (en)

Templating

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

12

Page 14: Impress Application Server for node.js (en)

Templating

13

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

Page 15: Impress Application Server for node.js (en)

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")

Page 16: Impress Application Server for node.js (en)

Events (SSE)

15

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

С1

C1N2C1N1 C1N3

IPC

Client1 Client2 Client3 ClientN…

Page 17: Impress Application Server for node.js (en)

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…

Page 18: Impress Application Server for node.js (en)

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

Page 19: Impress Application Server for node.js (en)

DB Access / DBMI

18

ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins

Page 20: Impress Application Server for node.js (en)

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)

Page 21: Impress Application Server for node.js (en)

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:[email protected]:timur.shemsedinov

npm install impress С3

C3N3

C3N1 C3N2