Impress Application Server for node.js. All decisions are made. Solutions are scaled and optimized for performance and load.
Metarhia and Impress Application Server way:
- Applied code need to be simple and secure, so we use code sandboxing with v8 isolated contexts, worker threads and minimal trusted npm dependencies;
- Domain code need to be separated from system code; so we use DDE, layered (onion) architecture, DI, SOLID:DIP principle and contract-based approach;
- Impress supports both stateful applications with RPC and client-session sticky to servers; microservices, centralized and distributed architectire;
- No I/O is faster even then async I/O, so we hold state in memory and use lazy I/O for persistent storage;
- Auto API routing, just create endpoint files as an async js lambda function;
- API code live reload with file system watch (when files changes on disk);
- Graceful shutdown and application state recovery after reload;
- Minimum code size and dependencies;
- Can scale on multiple threads and servers;
- Code sandboxing for security, dependency injection and context isolation;
- Utilize multiple CPU cores and serve multiple ports with worker threads;
- Inter-process communication and shared memory used for state management;
- State synchronization mechanism with transactions and subscription;
- Cache server-side executable JavaScript in memory;
- API development support: AJAX RPC and Websocket support;
- Serve static files from memory cache;
- Application configuration (for different named environments);
- Database access layer for PostgreSQL and Relational db schemas;
- Persistent sessions support with authentication, groups and anonymous;
- Multiple protocols: HTTP, HTTPS, WS, WSS;
- Logging with buffering (lazy write) and rotation (keep logs N days);
- File utilities: upload, download, streaming;
- Built-in simple testing framework;
- Server health monitoring;
- Built-in data structures validation and preprocessing library;
- Task scheduling (interval or certain time);
- Request queue with timeout and size;
- Execution timeout and error handling;
- Install with
npm install impress
- See project structure Metarhia Starter Kit
- Start server with
npm run start
ornode server.js
- To select execution mode (test, dev, prod) use
MODE=dev node server.js
- Node.js v12.9.0 or later (v14 preferred)
- Linux (tested on Fedora 30, Ubuntu 16, 18, 19 and 20, CentOS 7 and 8)
- Postgresql 9.5 or later (v11.8 preferred)
- OpenSSL v1.1.1 or later (optional, for https & wss)
- certbot (recommended but optional)
- Timur Shemsedinov (marcusaurelius)
- See github for full contributors list
Copyright (c) 2012-2020 Metarhia contributors. Impress Application Server is MIT licensed. Project coordinator: <[email protected]>