接受新项目 · 纯资深工程师团队 · 远程优先 PWN-ALL · 定制软件工作室

Rust 和 Python 构建经久不衰 软件。

我们是一家纯资深工程师工作室,有意选择两种语言构建定制软件: Rust 用于出错代价高昂之处, Python 用于交付迟缓代价高昂之处。

平均 p99 提升 来自 40 次迁移项目
内存占用降低 0% 对比 JVM / Node 基准
在生产环境运行的服务 0 自 2024 年起
已上线的安全事故 0 贯穿我们整个历史
信任我们代码的团队
01 两种语言。不是五种。

一套有意选择的技术栈。

多语言机构在推介材料里听起来很美。但在生产环境中,它意味着三套构建系统、四种 null 的写法,以及一堆半死不活的服务。我们选择了覆盖 95% 真实工作负载的两种语言——并在两者上都做到了炉火纯青。

热路径 · 系统 · 安全

Rust

9.6 内部适配评分

无需垃圾回收器即可实现内存安全。编译期消除数据竞争。它是你遇过最严苛的代码审查者——而一旦通过审查,你的服务就不会在周日凌晨把你吵醒。

我们选择它的场景

  • 支付链路及一切涉及资金或个人隐私数据的场景
  • 需要五个九 SLA 的热点 API 网关
  • 低延迟撮合引擎、交易、实时系统
  • 发布到浏览器的 WebAssembly 模块
  • 必须毫秒级启动的 CLI 工具与守护进程

我们不会回避的权衡

  • 新人上手周期:约 2–4 周达到生产效率
  • 大型工作区编译时间较长(我们用 sccache 解决)
  • 生态系统比 Java 年轻——但在关键领域已经成熟
胶水层 · 数据 · 机器学习 · 速度

Python

9.3 内部适配评分

从白板到可运行系统的最快路径。地球上数据、机器学习与自动化领域最丰富的生态系统。现代 Python——3.12、uv、ruff、pydantic、FastAPI——是一门精确、强类型且对大多数需求而言足够快的语言。

我们选择它的场景

  • 内部工具、仪表盘、管理后台
  • ETL、数据管道、Airflow / Dagster / Prefect
  • 机器学习——训练、推理、评估
  • 自动化任务及与第三方 API 的集成
  • 本季度就要上线的 MVP,而不是明年

我们不会回避的权衡

  • 单核吞吐量比 Rust 慢 20–50 倍
  • 每请求内存占用较高——对某些工作负载致命
  • 没有严格的 mypy / pydantic,动态类型会坑人
Rust 用于出错代价高昂之处。 Python 用于交付迟缓代价高昂之处。 一支团队。零教条。
02 数字说话,而非感觉

Rust & Python 对比常见选项。

点击指标以突出显示各语言的得分。评分范围 0–10,来自我们自己的基准测试及公开数据源(Techempower R22、CLBG,以及我们实际完成的迁移项目)。

指标 Rust Python Go C++ Java Node.js
原始性能 (p99,单核) 10 3 7 10 7 5
内存安全 与数据竞争 10 9 8 2 8 7
原型开发周期 5 10 7 3 6 8
生态系统广度 8 10 7 9 10 9
并发 无痛实现 10 6 9 4 6 7
运维成本 每请求 10 5 8 9 5 6
资深人才可招募性 6 10 7 8 10 9
10 年可维护性 10 8 8 5 8 5
03 迁出 → 迁入

迁移后会发生什么变化。

选择起始语言,查看迁移到 Rust 或 Python 的影响。数字是我们最近 40 个迁移项目的中位数,绝非营销噱头。

当前使用

C / C++

确实快速。但每个空指针都是潜在的 CVE,每个线程都是潜在的数据竞争,而你的构建系统足以让人全职维护。

典型痛点
  • 内存安全 CVE
  • 未定义行为
  • 构建系统混乱
迁移至

Rust

吞吐量 ×6.4
内存占用 −78%
运行时崩溃 −99%
每月算力账单 −65%

最适合当前饱受空指针漏洞、数据竞争或内存无限增长之苦的场景。Rust 保留速度,消除隐患。

迁移至

Python

开发速度 ×3.1
代码行数 −55%
发布周期 −60%
运行时开销 +40%

最适合真正的成本在于工程师时间而非 CPU 的场景。用原始吞吐量换取更短的反馈循环、更丰富的库,以及人类真正能读懂的代码。

我们如何衡量这些数字

基于 2023 年至 2026 年间 40 个已完成迁移项目的中位数。吞吐量在应用层测量(真实负载下的端到端 p50,而非微基准测试)。内存为稳定状态下的 RSS。成本为 AWS/GCP 上的按需算力月账单,其他条件相同。个体结果存在差异——未达预期的项目我们也会按需公开。

04 没有星号的数字

真实负载下的每秒请求数。

完全相同的工作负载——JSON 校验 → 查询 Postgres → 渲染——在单台 AMD Ryzen 7 机器上测量。这不是微基准测试。数据来源与方法论 ↓

  1. 1 Rust · Axum
    21,030 req/s
  2. 2 C# .NET · ASP.NET Core
    14,707 req/s
  3. 3 Node.js · Fastify
    9,340 req/s
  4. 4 C++ · Drogon
    7,200 req/s
  5. 5 Go · Gin
    3,546 req/s
  6. 6 Python · FastAPI (Uvicorn)
    1,185 req/s
  7. 7 PHP · Laravel
    299 req/s

正确解读方式:Python 接近榜单底部,这很正常。我们不会在热路径上运行 FastAPI。我们在 1,185 req/s 已经比工作负载需求多出约 10 倍、且工程师时间比 CPU 周期更值钱的地方运行它。方法论:AMD Ryzen 7,Linux,Docker,单实例,每种语言选一个主流框架。数字为多次运行的平均值。

05 代码故障的真实代价

一次故障究竟让你损失多少。

"五个九"不是营销话术。以下是各行业一小时计划外停机的成本——附数据来源。我们在这些数字最敏感的地方使用 Rust 构建系统。

自您打开本节以来累计的损失
金融 / 医疗 $0 ~$83k/分钟 · $5M/小时
汽车制造 $0 ~$38k/分钟 · $2.3M/小时
大型企业 $0 $23,750/分钟 · $1.4M/小时
中型企业 $0 ~$5k/分钟 · $300k/小时
金融 & 医疗 $5M+ / 小时

风险最高的行业。交易平台、结算系统和临床系统在严重故障期间每小时损失可超过 500 万美元——这还不包括监管处罚或诉讼成本。

来源:Gartner 2024 年财富 500 强研究;ITIC 2024 年停机小时成本报告。
汽车制造 $2.3M / 小时

停止运转的生产线每秒消耗约 640 美元。2024 年 7 月 CrowdStrike 故障仅 Delta Air Lines 一家在五天内就损失了 3.8 亿美元

来源:Erwood Group 2025 年行业分析;Antithesis CrowdStrike 故障复盘。
大型企业(均值) $1.4M / 小时

BigPanda 2024 年大型企业数据:每分钟 23,750 美元。ITIC 报告显示,41% 的大型企业每次故障每小时损失在 100 万至 500 万美元之间。

来源:BigPanda 2024 年研究;ITIC 第 11 届年度停机小时成本报告。
全球 2000 强(Oxford Economics) $400B / 年

根据 Oxford Economics 2024 年研究,全球最大的 2,000 家公司因计划外停机产生的总隐性成本——按收入、生产力和修复费用合计,每家公司平均影响达 2 亿美元。

来源:Oxford Economics 2024,“停机的隐性成本”。
中大型企业(典型小时) $300k+ / 小时

ITIC 2024 年调查:超过 90% 的中大型企业将单次计划外停机损失置于此门槛之上——不包括法律、民事或监管处罚。

来源:ITIC 2024 年停机小时成本报告。
中小企业(SMB) $25k–$150k / 小时

2025 年 ITIC / Calyptix 联合研究发现许多中小企业每小时损失达此数额;Siemens 报告称受停机影响的中小企业损失可高达 $150,000/小时。平均每次故障持续 87 分钟

来源:ITIC + Calyptix 2025;Siemens 停机真实成本 2024。
06 精选案例

三个项目。三场不同的危机。

保密协议要求的地方已匿名处理,结果允许的地方据实呈现。这些是我们会首先推荐给技术决策者的合作案例。

  1. 案例 01 Python 数据库 加密 GDPR

    金融科技数据仓库:缩减 4 倍、提速 5.5 倍、全球合规。

    客户拥有一个 1.8 TB 的 Postgres 集群,因七年来积累的冗余字段、失效索引和内联加密 BLOB 而臃肿不堪。加密模块运行在一个被三次独立审计标记为废弃的旧库上。监管风险真实存在;审计人员已经在关注。

    我们做了什么

    • 全面 Schema 与使用情况审计,删除未使用的字段和索引,引入合理分区。
    • 将加密管道从旧库迁移至现代经审计的 AEAD 技术栈,并支持密钥轮换。
    • 将 BLOB 内联加密转换为引用式信封加密 + 专用 KMS。
    • 将数据保留和数据主体访问流程对齐至 GDPR、CCPA 和 APPI 要求。
    成果

    同样的数据,四分之一的存储费用,5.5 倍的吞吐量,以及面对下一位监管审计人员时的清白记录。

  2. 案例 02 Rust C++ → Rust 安全 存储

    C++ 服务用 Rust 重写:9 周内消灭 100+ 个 CVE 级漏洞。

    面向用户的 C++ 文件处理服务每 4–5 天崩溃一次,每次都打补丁修复。我们的审计发现了 100+ 个真实漏洞:拒绝服务路径、缓冲区溢出、无界请求处理。高峰时段 503 错误已是每周固定节目。存储方面,用户上传的文件已堆积成一片占满存储桶的重复文件沼泽。

    我们做了什么

    • 用 Rust(axum + tokio)完全重写,加入严格的输入校验和有界资源限制。
    • 对每个解析器和线格式边界进行基于属性的测试 + cargo-fuzz 模糊测试。
    • 实现写入时去重的内容寻址存储层。
    • 在 4 小时集成窗口内完成蓝绿部署,零停机。
    成果

    服务从"脆弱且每周打补丁"变为"我们不再盯着告警大屏"。去重降低了存储成本,关于错误和 503 的支持工单销声匿迹,重写费用在当季内便已收回。

  3. 案例 03 Rust Python eBPF / XDP CRM · 4k 用户

    企业级 CRM 重建:18 台服务器 → 5 台,支出降低 60%+。

    内部 CRM 服务 4,000+ 名用户,涵盖 IAM、SOC、集中日志、即时通讯、文件共享、VoIP 和端到端加密数据。十八台服务器、顶部挂着 Cloudflare,云账单持续增长与人员规模无关。我们用 Rust 重建热路径,将 Python 保留在集成和报表层,并在入口前直接部署 eBPF/XDP 过滤器。

    我们做了什么

    • 用 Rust 实现认证(IAM)、实时消息、VoIP 信令、文件传输服务。
    • 用 Python 处理管理界面、报表、SOC 事件关联及与第三方 API 的集成。
    • 在内核层实现 eBPF/XDP 机器人和滥用过滤——替代了该工作负载上的 Cloudflare。
    • 围绕零拷贝 Schema 重写结构化日志管道。
    成果

    少了十三台服务器,不再有 Cloudflare 费用条目,SOC 团队通过日志管道看到了更清晰的信号,CFO 也不再追问基础设施预算的问题。

07 我们实际如何工作

调节旋钮,看计划实时变化。

每个项目都在速度、成本和可靠性之间寻求平衡。下方的五阶段估算以行业中位数为基准(探索 2–6 周,架构 1–4 周,实现 4–20 周,加固 2–8 周,交付 1–2 周——来自 NIX United、Agilie、SOLTECH、OTG Lab 的 2024–2026 年报告)。移动滑块,计划实时重新权衡。

01

探索

3 周

阅读您的代码,访谈运维团队,列出未知项,按组件选择语言。

  • 领域访谈与代码审计
  • 风险登记册与 SLA 目标
  • 每个服务的语言决策
02

架构

2 周

先定契约,再写代码。OpenAPI / protobuf、数据模型、部署拓扑、运行手册骨架。

  • 每个公开契约的 RFC
  • 数据模型 + 迁移计划
  • 基础设施即代码基线
03

实现

8 周

小 PR,从第一天起 CI 保持绿色,每次合并即部署,由第二位资深工程师审查。

  • Rust: axum · tonic · sqlx
  • Python: FastAPI · Pydantic · SQLAlchemy
  • 每周演示 + 变更日志
04

加固

3 周

模糊测试、基于属性的测试、针对真实流量的负载测试、威胁建模。

  • cargo-fuzz · proptest · hypothesis
  • 与 SLO 挂钩的 k6 负载测试
  • 安全审查与依赖项审计
05

交付

1 周

运行手册、值班轮换、ADR,以及一支已经交付过一次的团队。

  • 运行手册 + 值班矩阵
  • ADR 日志与架构图
  • 上线后 30 天支持
08 同一问题,两种语言

同一个接口在两种语言中的样子。

查询用户、校验输入、持久化到 Postgres、返回 JSON。在两种语言间切换——都是我们会真正上线的代码。

SQL_CREATE_USER = "insert into users(email,name) values(lower($1),$2) returning id,email,name"
Name = Annotated[str, StringConstraints(strip_whitespace=True, min_length=1, max_length=120)]

class UserIn(BaseModel):
    email: EmailStr
    name: Name

class UserOut(UserIn):
    id: int

@router.post("/users", response_model=UserOut, status_code=201)
async def create_user(u: UserIn) -> UserOut:
    try:
        row = await pool.fetchrow(SQL_CREATE_USER, str(u.email), u.name)
    except UniqueViolationError as exc:
        raise HTTPException(status_code=409, detail="email already exists") from exc
    if row is None:
        raise HTTPException(status_code=500, detail="insert failed")
    return UserOut.model_validate(dict(row))
#[derive(Deserialize, Validate)]
#[serde(deny_unknown_fields)]
pub struct UserIn {
    #[validate(email)]
    pub email: String,
    #[validate(custom(function = "valid_name"))]
    pub name: String,
}

pub async fn create_user(
    State(pool): State<PgPool>,
    ValidatedJson(u): ValidatedJson<UserIn>,
) -> Result<(StatusCode, Json<UserOut>), ApiError> {
    let user = sqlx::query_as!(UserOut,
        "insert into users(email,name) values(lower($1),$2) returning id,email,name",
        u.email.as_str(),
        u.name.trim(),
    )
    .fetch_one(&pool)
    .await
    .map_err(ApiError::from_db)?;

    Ok((StatusCode::CREATED, Json(user)))
}
代码行数
16 22
吞吐量
1,185 req/s 21,030 req/s
p50 延迟
21.0 ms 1.6 ms
空闲时内存
41.2 MB 8.5 MB
我们在 1 个工作日内回复。不开玩笑。

您读完了整页。
构建它吧。

告诉我们您的技术栈出了什么问题,或者您想从零开始构建什么。您将得到真正的工程意见——而不是销售 PPT。

  • 没有初级工程师。不外包。
  • 范围明确的工作提供固定价格选项。
  • 在询问任何信息之前先签署保密协议。