Impress Application Server for node.js (en)
-
Upload
timur-shemsedinov -
Category
Education
-
view
955 -
download
2
description
Transcript of Impress Application Server for node.js (en)
![Page 1: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/1.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/2.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/3.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/4.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/5.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/6.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/7.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/8.jpg)
Configuration
ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins
7
![Page 9: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/9.jpg)
Configuration
ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins
8
![Page 10: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/10.jpg)
API Development
ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins
9
![Page 11: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/11.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/12.jpg)
API Development
ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins
11
![Page 13: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/13.jpg)
Templating
ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins
12
![Page 14: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/14.jpg)
Templating
13
ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins
![Page 15: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/15.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/16.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/17.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/18.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/19.jpg)
DB Access / DBMI
18
ScalingFilesystem StructureURL RoutingConfigurationAPI DevelopmentTemplatingStatic ResourcesEvents (SSE)DB AccessPlugins
![Page 20: Impress Application Server for node.js (en)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/20.jpg)
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)](https://reader035.fdocuments.in/reader035/viewer/2022081413/5476f68bb4af9f22068b4699/html5/thumbnails/21.jpg)
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