跳转到内容

Robyn — Rust 内核驱动的 Python 高性能 Web 框架

待复核

Robyn 是一个用 Rust 写引擎、用 Python 写业务的异步 Web 框架——你写的代码和 Flask / FastAPI 几乎一样简单,但请求到达后真正干活的是一个 Rust 编译的多进程运行时。

日常类比:普通 Python 框架像骑自行车送快递——你能到处跑,但腿(CPython 单线程 GIL)就那么快。Robyn 像给你换了辆电动三轮车:踏板(API 写法)没变,但底盘换成了电机(Rust 运行时),载重和速度直接上一个台阶。

from robyn import Robyn
app = Robyn(__file__)
@app.get("/")
async def index(request):
return "Hello from Robyn!" # Python 写法,Rust 跑
app.start(host="0.0.0.0", port=8080)

看上去和 Flask 没区别,但底下的 HTTP 解析、路由匹配、多进程调度全由 Rust 完成。写 Python,跑 Rust——这就是 Robyn 的核心卖点。

理解 Robyn 能帮你看清这些趋势:

  • 为什么”Python 性能差”不再是铁律——Pydantic v2、Polars、Robyn 都在把热路径下沉到 Rust
  • 为什么 Python Web 也能吃多核——多 worker 进程 + Rust 异步运行时,绕开 GIL 热路径
  • 为什么 TechEmpower 某几轮 plaintext/JSON 里 Robyn 能摸到 Actix / Fastify 同档(看具体 round,不是全面追平纯 Rust)
  • 为什么一个 2021 年起步的新框架能拿到 7k+ stars——“胶水语言写业务、系统语言跑引擎”从系统软件蔓延到应用层

Robyn 代表的不只是一个框架,而是一类设计范式:高级语言当胶水写业务,系统语言当引擎跑性能

Robyn 的架构可以拆成三层:

  1. Rust 运行时(核心引擎):HTTP 解析、路由匹配、事件循环全在 Rust 侧完成。通过 PyO3 把 Rust 编译成 Python C 扩展(.so/.pyd),Python 端 import 进来就能用。类比:餐厅的后厨(Rust)和前台(Python)分离,前台只管接单传菜,炒菜的活全在后厨。

  2. 多进程 worker + Rust 异步运行时:master 管监听与拉起 worker(可用 --processes),每个 worker 里用 Tokio 异步调度,HTTP 层借 Actix Web 等 Rust 组件扛解析与连接。和 Gunicorn prefork 一样是多进程扩核,但热路径在 Rust 侧,不是纯 Python 事件循环。别把它理解成 Erlang 式 mailbox actor——那是营销口径,官方架构叙事是 master/worker + 异步运行时。

  3. Python API 层:路由装饰器(@app.get)、中间件、WebSocket、依赖注入——开发者接触到的全是 Python。框架还支持 const 请求(启动时算好结果缓存,运行时零开销返回)和热重载。写法借鉴 flask 的简洁和 fastapi 的异步风格。

一句话总结底层栈:PyO3 桥接 + Tokio/Actix 系 Rust 运行时 + Flask 级 Python API

from robyn import Robyn
app = Robyn(__file__)
@app.get("/users/:user_id")
async def get_user(request):
uid = request.path_params["user_id"]
return {"id": uid, "name": "test"}
app.start(host="0.0.0.0", port=8080)

注意路径参数语法是 :user_id(类似 Express),不是 {user_id}(FastAPI 风格)。返回 dict 会自动序列化成 JSON。

from robyn import Robyn
app = Robyn(__file__)
@app.before_request()
async def auth_check(request):
if request.headers.get("x-token") != "secret":
return {"error": "unauthorized"}, 401
return request # 放行
@app.get("/protected")
async def protected(request):
return "you are in"
app.start(host="0.0.0.0", port=8080)

@app.before_request 在每个请求到达 handler 前运行。返回 request 表示放行,返回其他值表示拦截——和 Express 中间件的 next() 思路类似。

from robyn import Robyn, WebSocket
app = Robyn(__file__)
ws = WebSocket(app, "/ws")
@ws.on("connect")
async def on_connect(ws_instance):
return "connected"
@ws.on("message")
async def on_message(ws_instance, msg):
return f"echo: {msg}"
app.start(host="0.0.0.0", port=8080)

WebSocket 支持是内建的,不需要额外装 websockets 库——因为 Rust 运行时已经包含了 WebSocket 协议实现。

  1. 路径参数语法不一样:习惯了 FastAPI 的 {id} 写法,到 Robyn 要换成 :id。混用会导致路由匹配失败但不报错,请求直接 404——很难 debug。

  2. 生态不如 FastAPI 成熟:没有 Pydantic 级别的请求体校验集成,复杂输入校验要自己写或手动接 Pydantic。ORM 集成也需要自己搭,没有官方推荐方案。

  3. 调试时 Rust 层报错不友好:如果触发了 Rust 运行时的 panic,Python 侧看到的是一个难以理解的 pyo3_runtime.PanicException,堆栈信息全在 Rust 侧,Python 开发者很难定位。

  4. 多进程模式下的状态共享:默认多 worker 进程意味着 Python 全局变量不共享。如果在 handler 里用一个 global counter += 1,每个 worker 各自计数——和 Gunicorn 的坑一模一样,但新手容易忽略。

适用

  • I/O 密集型 API 服务(高并发、大量网络请求)——Rust 事件循环吞吐量碾压纯 Python
  • 想要 Python 写法但 Flask/FastAPI 性能不够的场景——不改语言直接提速
  • WebSocket 实时服务——内建支持、无需额外依赖
  • 微服务节点——启动快、内存相对省;用 pip/wheel 安装(wheel 里带原生扩展),不是 Go 那种单二进制

不适用

  • 需要丰富生态(ORM、Admin、OAuth 集成)的全栈项目 → djangofastapi + 插件更成熟
  • 团队完全不了解 Rust、出问题没人能看底层 → 调试成本高
  • 需要 Pydantic 深度集成(自动文档、请求校验)→ fastapi 目前无可替代
  • CPU 密集型计算 → Rust 运行时管的是 I/O 调度,CPU 密集任务还是要用 multiprocessing 或 Celery

Robyn 的名字来源于瑞典电子流行歌手 Robyn——框架作者 Sanskar Jethi 想表达”轻量、有节奏感”的设计理念。项目始于 2021 年,最初是 Sanskar 在探索 PyO3(Rust-Python 绑定)时的个人实验:能不能用 Rust 写一个 HTTP 运行时,让 Python 开发者几乎感觉不到 Rust?同年他在 PyCon Sweden 公开演讲,展示 TechEmpower 部分测试项上的成绩,引发关注。到 2026 年项目已积累 7k+ stars,社区贡献覆盖 WebSocket、中间件、CLI 脚手架等,成为 Python 高性能框架的一个选项。

  1. “胶水 + 引擎”分离是性能与易用的最佳折中——Python 写业务、Rust 跑热路径,两边各做最擅长的事
  2. 多进程扩核 + 热路径下沉——和 Gunicorn 一样靠进程吃多核,但 HTTP/调度在 Rust,Python 只跑业务 handler
  3. PyO3 是 Rust-Python 融合的关键桥梁——没有它,Rust 代码无法被 Python 直接 import,整个”写 Python 跑 Rust”的故事就讲不通
  4. 新框架的最大风险不是性能而是生态——Robyn 性能强,但没有 Pydantic / SQLAlchemy 级别的官方集成,生产选型要权衡
  • fastapi —— Python 类型驱动框架的标杆,Robyn 在 API 风格上向它看齐但换了 Rust 引擎
  • flask —— Robyn 的路由装饰器风格直接借鉴 Flask,但底层完全不同
  • actix-web —— Robyn 的 Rust HTTP 层会用到 Actix Web 一类组件,性能叙事也常对标它
  • sanic —— 同样追求 async Python 高性能,但 Sanic 是纯 Python 实现
  • starlette —— FastAPI 的 ASGI 底座;Robyn 不走 ASGI,自己用 Rust 实现了同层功能
  • axum —— Rust 生态的类型驱动 Web 框架,和 Robyn 的 Rust 层定位类似

(暂无反向链接)