6个版本
使用旧Rust 2015
0.1.5 | 2019年1月6日 |
---|---|
0.1.4 | 2018年12月27日 |
0.1.2 | 2018年10月13日 |
0.1.1 | 2018年9月2日 |
0.1.0 | 2018年8月4日 |
#51 in #production
14KB
236 行
Cosworth
一个用于构建JSON网页服务的Rust框架
目的
这是一个将Web服务编译成Rust静态二进制文件并部署到Docker容器中的工具。它是一个非常正在进行中的项目,因此还没有教程。
它应该在需要安全和可预测性能的生产环境中非常有用,在这些环境中,与内置前端、非JSON格式、流式响应等相比,安全性更为重要。生产服务器应该编译成一个小于25MB的Docker镜像,并且在最坏情况下响应速度比使用内存管理的语言快。
目标
使用此工具构建的Web服务有以下目标,按重要性排序
- 安全:服务器应该难以被利用或遭受DoS攻击。
- 高效:服务器不应该浪费CPU、内存或磁盘空间。
- 可预测:服务器在运行过程中不应该变慢。
- 快速:服务器应该能够快速处理大量请求。
- 简单:服务器不应该比必要的更复杂。
- 容易:服务器不应该难以开发或调试。
虽然某些其他框架运行得更快,而且大多数框架更容易上手,但它们也存在一些缺点
- 垃圾回收语言在turing-complete VM中运行,而不是在真实硬件上。这需要比非托管代码更多的内存,并使得防止性能的不确定性变得困难或不可能。
- 像C(以及一定程度上C++)这样的简单非托管语言不强制执行安全的内存访问。可以使用这些语言构建安全的服务,但需要深厚的经验和额外的工具(例如Valgrind)。
- 许多Web框架使用动态类型语言,导致了一种崇拜测试驱动开发和复杂的运行时调试器的文化。
- 大多数Web框架试图适应尽可能多的用例,这往往使它们要么“太大”,要么“太小”。
- 一些内置了许多“附带电池”功能的支持。通常这些框架更加成熟,最初是为服务完整Web应用程序(包括前端)而设计的。当这些额外功能不需要时,它们通常会碍事。
- 其他("微框架")只提供可扩展的核心,以便构建,这样它们可以与其他许多项目的功能相结合。这防止了它们针对或官方支持非平凡架构,这意味着开发人员通常必须寻找并验证大量的依赖项。
从一开始就既规定又谦虚地关于范围,希望这个框架能够保持极端之间的平衡,最适合实现其目标。
路线图
计划支持以下功能
- 异步请求传输
- 同步请求处理
- 带有连接池和ORM的Postgres
- 签名携带令牌认证
- 使用Token模型的授权
- 使用Redis查找的授权
- 使用代理HTTP请求的授权
- REST资源验证和序列化
- 通用端点或"视图"(http://django-rest-framework.django.ac.cn/api-guide/generic-views/)
正在考虑支持以下功能
- GraphQL
- WebSocket
- Redis pub/sub
- 可插拔OAuth
- 角色和用户管理
当前依赖包括 diesel 用于访问数据库, serde 用于操作JSON,以及 actix-web 用于处理HTTP请求。架构可能使用 actix 作为底层的actor系统。
依赖项
~26–36MB
~569K SLoC