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

MIT 许可证

14KB
236

Cosworth

一个用于构建JSON网页服务的Rust框架

目的

这是一个将Web服务编译成Rust静态二进制文件并部署到Docker容器中的工具。它是一个非常正在进行中的项目,因此还没有教程。

它应该在需要安全和可预测性能的生产环境中非常有用,在这些环境中,与内置前端、非JSON格式、流式响应等相比,安全性更为重要。生产服务器应该编译成一个小于25MB的Docker镜像,并且在最坏情况下响应速度比使用内存管理的语言快。

目标

使用此工具构建的Web服务有以下目标,按重要性排序

  1. 安全:服务器应该难以被利用或遭受DoS攻击。
  2. 高效:服务器不应该浪费CPU、内存或磁盘空间。
  3. 可预测:服务器在运行过程中不应该变慢。
  4. 快速:服务器应该能够快速处理大量请求。
  5. 简单:服务器不应该比必要的更复杂。
  6. 容易:服务器不应该难以开发或调试。

虽然某些其他框架运行得更快,而且大多数框架更容易上手,但它们也存在一些缺点

  • 垃圾回收语言在turing-complete VM中运行,而不是在真实硬件上。这需要比非托管代码更多的内存,并使得防止性能的不确定性变得困难或不可能。
  • 像C(以及一定程度上C++)这样的简单非托管语言不强制执行安全的内存访问。可以使用这些语言构建安全的服务,但需要深厚的经验和额外的工具(例如Valgrind)。
  • 许多Web框架使用动态类型语言,导致了一种崇拜测试驱动开发和复杂的运行时调试器的文化。
  • 大多数Web框架试图适应尽可能多的用例,这往往使它们要么“太大”,要么“太小”。
  • 一些内置了许多“附带电池”功能的支持。通常这些框架更加成熟,最初是为服务完整Web应用程序(包括前端)而设计的。当这些额外功能不需要时,它们通常会碍事。
  • 其他("微框架")只提供可扩展的核心,以便构建,这样它们可以与其他许多项目的功能相结合。这防止了它们针对或官方支持非平凡架构,这意味着开发人员通常必须寻找并验证大量的依赖项。

从一开始就既规定又谦虚地关于范围,希望这个框架能够保持极端之间的平衡,最适合实现其目标。

路线图

计划支持以下功能

正在考虑支持以下功能

  • GraphQL
  • WebSocket
  • Redis pub/sub
  • 可插拔OAuth
  • 角色和用户管理

当前依赖包括 diesel 用于访问数据库, serde 用于操作JSON,以及 actix-web 用于处理HTTP请求。架构可能使用 actix 作为底层的actor系统。

依赖项

~26–36MB
~569K SLoC