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:[email protected]:timur.shemsedinov
npm install impress С3
C3N3
C3N1 C3N2