企业级应用服务器为**Node.js**:安全,轻量,互动且可扩展。
描述
第一个 利用多线程和超薄工作负载隔离扩展的Node.js服务器。优化用于高强度数据交换,快速开发和清晰架构。提供一切你需要的开箱即用的可靠和高效的后端,与网页和移动客户端的网络通信,不依赖协议的API,运行时类型验证,实时和内存数据处理,以及可靠的有状态服务。
弱点:不适用于内容发布(包括博客和在线商店)、服务器端渲染、提供静态内容和无状态服务。
强项:企业级应用的安全性和架构,通过WebSocket实现的长连接以最小化加密握手的开销,无第三方依赖。
快速开始
- 查看项目模板:metarhia/Example
- 使用
node server.js
启动服务器 - 查看 文档和规范
API端点示例:application/api/example.1/citiesByCountry.js
async ({ countryId }) => {
const fields = ['cityId', 'name'];
const where = { countryId };
const data = await db.select('City', fields, where);
return { result: 'success', data };
};
你可以从客户端调用它:
const res = await metacom.api.example.citiesByCountry({ countryId: 3 });
Metarhia 和 impress 应用服务器方式
- 应用代码需要简单且安全,所以我们使用V8隔离上下文、工作线程和JavaScript闭包进行沙箱处理;
- 领域代码应与系统代码分离;因此我们使用DDD、分层(洋葱)架构、DI、SOLID和GRASP原则、基于合同的方法;
- Impress 支持带有RPC和客户端会话黏性的有状态应用到服务器;微服务、集中式或分布式架构;
- 无I/O比异步I/O更快,所以我们将状态保存在内存中,在多个线程之间共享,使用懒惰I/O进行持久存储;
- 我们仅使用内部可信赖的依赖项,无第三方npm包;整个Metarhia技术栈大小小于2mb。
特性
- API自动路由 调用
endpoint
用于快速API开发(无需手动添加路由) - API并发性:请求执行超时和执行队列同时具有超时和大小限制
- 架构用于API合同、数据结构验证和领域模型
- 应用服务器 支持不同的API风格:通过AJAX和WebSocket的RPC,REST和Web钩子
- 多种协议 支持:HTTP、HTTPS、WS、WSS
- 自动加载器 具有
start
钩子,代码和依赖项的命名空间生成 - 实时重载 通过文件系统监视器重载代码
- 优雅关闭 具有
stop
钩子 - 最小依赖 和减少的代码大小
- 分层架构:api、领域逻辑、数据访问层和系统代码层(隐藏)
- 代码沙箱 增强安全性和执行上下文隔离
- 代码保护:防止引用污染、防止原型污染
- 多线程 用于CPU利用率和执行隔离
- 负载均衡 简单扩展,通过重定向到多个端口
- 缓存:内存缓存用于API和静态文件
- 配置:环境特定的应用程序设置
- 数据库访问 层兼容PostgreSQL并具有SQL注入保护
- 持久会话 带有身份验证、组和匿名会话
- 缓冲日志记录(惰性写入)具有日志轮换(保留日志N天)和控制台界面
- 测试:集成Node.js原生测试运行器和表格测试支持
- 进程间通信 和共享内存用于状态管理
- 文件工具:上传、下载,支持部分内容和流
- 任务管理:在特定时间间隔或特定时间执行计划任务
TODO列表
这些功能将在最近的未来(3-6个月)内实现:
- 服务器健康监控
- 数据库迁移
- 状态同步机制带事务和订阅
- 多租户支持
要求
- Node.js v18.x或v20.x
- Linux(已在Fedora v36-38,Ubuntu v18-23,CentOS v8-9上测试)
- Postgresql v11-16
- OpenSSL v3或更新版本(可选,用于https & wss)
- certbot(推荐但可选)
许可证及贡献者
版权所有(c) 2012-2024 Metarhia贡献者。参见GitHub获取完整的贡献者列表。Impress应用服务器遵循MIT许可证。项目协调员:<timur.shemsedinov@gmail.com>