< 返回版块

苦瓜小仔 发表于 2025-12-19 20:04

Tags:日报

文章《Kraken:Rust 从实验到支柱》

作者:Kraken 工程团队

该文章是四年前“Oxidizing Kraken”系列的第二篇,总结了他们从当初下注 Rust 到现在 Rust 成为**核心基础设施(Backbone)**的六年历程。

1. 转型成果:从赌注到支柱

  • 规模:目前 Kraken 拥有数百万行 Rust 代码,覆盖数百个核心服务,工程团队超过 200 人。
  • 策略:他们没有进行“大爆炸式”的一次性重写,而是随着新功能的开发逐步用 Rust 替换老旧的 PHP 系统。这种“修修补补”的策略既保持了产品迭代速度,又解决了技术债务。
  • 收益
    • 高性能:在 2020-2021 年牛市期间,将 REST API 迁移到基于 Tokio 的异步 Rust 后,极大地提升了系统应对高并发的能力。
    • 稳定性:Rust 的内存安全和类型系统消除了整类的并发 Bug 和内存错误,使得服务非常稳定,减少了运维负担(Less toil)。

2. 技术架构:标准化与 pragmatism

  • gRPC 协议:为了支持多语言协作(Rust, C++, Go, Python, TS),他们统一使用 gRPC (Protobuf) 作为内部服务通信的标准协议。
  • 多语言策略:虽然 Rust 是默认的后端语言(尤其是 Tokio 生态),但并不强制。对于超低延迟的交易引擎仍保留 C++,对于其他适合场景仍使用 Go 或 Python。
  • 共享库:利用 Rust 开发了通用的内部库(Crates),处理认证、监控、配置等,实现了各团队间的代码复用。

3. 文化与 AI 的结合

  • 工程文化:Rust 这种注重正确性和严谨性的语言特性,帮助塑造了 Kraken 负责任的工程文化。它促进了知识的显性化(文档化),打破了以往依赖少数人的“部落知识”局面。
  • AI 辅助:团队积极使用 AI 编程助手。由于 Rust 强大的类型系统和编译器检查,AI 生成的代码更容易被验证和纠正,使得 AI 与 Rust 成为高效的组合。

4. 总结 Kraken 证明了在大型金融系统中引入 Rust 是可行的且收益巨大。Rust 不再是一个实验性的赌注,而是他们构建高性能、高可靠性金融系统的默认选择

阅读:https://blog.kraken.com/product/engineering/rust-part-2-from-bet-to-backbone

bincode 仍与历史源码保持一致

这个帖子讨论了 Rust 社区中关于 bincode 库的一个争议事件,特别是针对该库迁移到 SourceHut 并重写 Git 历史后是否包含恶意代码的验证。

1. 核心结论:代码是安全的

  • 发帖人(OP)没有盲目跟风担忧“供应链攻击”,而是亲自进行了代码审计。
  • 他将 bincode 在 SourceHut 上的新仓库代码与原 GitHub 仓库中最后已知的“良好”版本进行了 git diff 比对。
  • 结果显示:除了 README.md 文件的变动(主要是关于迁移和维护者声明的文本更新)以及一些元数据外,实际的源代码(Rust 代码)完全没有变化

2. 背景与争议点

  • 恐慌来源bincode 的维护者将项目从 GitHub 迁移到了 SourceHut,并重写了 Git 提交历史。此举导致原有 commit hash 改变,引发了社区对于“维护者是否趁机注入恶意代码”的猜疑。
  • 维护者动机:历史重写的主要原因似乎是为了更改维护者的名字(涉及跨性别身份转换,不希望保留旧名字/死名)。
  • 社区反应:虽然发帖人证明了代码的清白,但在之前的讨论中,社区的恐慌导致了激烈的争吵,甚至涉及对维护者的“人肉搜索”(doxxing)。

3. 后续影响

  • 尽管代码被证明是安全的,但由于这一连串的冲突(包括对维护者身份的攻击和过激反应),bincode 团队已宣布永久停止开发
  • 目前版本 1.3.3 被视为最终完成版,不会再有官方更新。

总结: 该帖子通过技术手段证实,bincode 的 Git 历史重写仅仅是为了更改维护者署名,并没有像许多人担心的那样植入恶意代码,但这场因不信任引发的风波最终导致了该项目的停摆。

阅读:https://www.reddit.com/r/rust/comments/1poe6ts/bincodes_source_code_still_matches_what_was_on/

BlazeDiff:高性能差异比较工具

BlazeDiff 是由开发者 teimurjan 创建的一个高性能差异比较(Diff)生态系统,主要用于图像比较和对象(Object)比较。

该项目最初基于 JavaScript/TypeScript,随后推出了 Rust 重写版(v2),旨在成为最快的单线程图像 Diff 工具。

  1. 核心定位
  • 极致性能:专注于速度。
    • Rust 版:在 4K 图像对比测试中,速度约为 odiff4 倍(327ms vs 1215ms),且二进制文件体积更小。它利用了 SIMD 指令集(x86 的 SSE4.1 和 ARM 的 NEON)进行硬件加速。
    • JS 版:比业界标杆 pixelmatch50% - 88%,比 microdiff(对象比较)快 55%
  • 多用途:不仅用于后端 CLI 工具,也提供前端组件,适用于视觉回归测试(Visual Regression Testing)、CI/CD 流程及数据结构对比。
  1. 主要功能与算法 BlazeDiff 提供了多种比较算法以适应不同需求:
  • 像素级比较(Pixel-by-Pixel)
    • 使用 YIQ 颜色空间进行更符合人类感知的颜色差异计算。
    • 内置抗锯齿(Anti-aliasing)检测,减少误报。
    • 采用智能的**分块预过滤(Block-based Pre-filtering)**技术:先快速扫描大块区域,仅对有差异的区块进行昂贵的像素计算(这是其速度快的主要原因)。
  • 感知质量指标:支持 SSIM(结构相似性)、MS-SSIMHitchhiker's SSIM 以及 GMSD(梯度幅度相似性偏差),用于更高级的图像质量评估。
  • 对象比较:提供高性能的 JSON/JS 对象深度比较功能。
  1. 生态系统组件 该项目被拆分为多个模块:
  • Core Libraries@blazediff/core(图像)、@blazediff/object(对象)、@blazediff/ssim 等。
  • CLI 工具:提供命令行接口,可直接替代 odiff,支持 PNG、JPEG、WebP 格式。
  • UI 组件:提供 Web Components 和 React 组件,用于在前端展示差异,支持“滑动对比(Swipe)”和“洋葱皮模式(Onion-skin)”等可视化效果。
  1. 总结 BlazeDiff 是目前追求最高性能的图像对比解决方案之一。如果你觉得现有的视觉测试工具(如 pixelmatch 或 odiff)速度不够快,或者需要在前端高效展示 Diff 结果,这是一个非常强力的替代品。

仓库:https://github.com/teimurjan/blazediff

Git Cherry Tree:没有任何相关经验的情况下编写 git 客户端

  1. 背景与动机
  • 作者背景:作者自称不是系统级程序员(主要从事代码审查/管理工作),此前从未写过 Rust 或 React 代码。
  • 起因:作者对 Windows 上的现有 Git 客户端感到沮丧,特别是在处理大型变基(Rebase)时性能不佳。
  • 起步:最初只是想用 Tauri(号称比 Electron 快)做一个简单的周末原型测试,结果“意外”地发展成了一个为期 6 个月的完整项目。
  1. 项目成果:Git Cherry Tree
  • 功能:一个高性能的 Git 客户端,能够轻松加载 Linux 内核仓库,处理两个分支间 80,000+ 文件的 Diff,并支持百万行文件的瞬间加载与搜索。
  • 技术栈
    • 前端:Typescript + React (通过 Tauri 运行)。
    • 后端:Rust。
    • 核心库:主要使用 git2 (libgit2 的 Rust 绑定) 处理 Git 操作,但针对性能瓶颈编写了自定义 Rust 代码。
  • 代码量:约 2.5 万行代码(1.2 万行 Rust,1.3 万行 TypeScript)。
  • 发布形式:单个约 11MB 的可执行文件,无需安装。
  1. 开发体验与感悟
  • Rust 对初学者很友好:作者认为 Rust 帮助他突破了能力的上限。虽然有些概念复杂,但 Cargo 工具链和文档让一切变得可行。
  • “消失”的 bug:作者惊讶地发现,许多平时工作中常见的内存管理、线程管理等“诅咒级”问题在 Rust 中几乎没有出现。代码写完就能跑,且非常稳定。
  • 唯一的崩溃:在几个月的开发中,程序只崩溃过一次,而且是因为触发了 C 语言库(libgit2)中的缓冲区溢出。这反向证明了 Rust 代码的安全性。
  1. 性能优化(Rust vs C) 作者分享了一个有趣的细节:虽然 libgit2 (C语言) 很快,但在某些特定场景下,手写的 Rust 代码反而比 C 库快得多
  • 重命名检测:手写 Rust 实现比 libgit2 快了约 20 倍
  • 自定义 Revwalker (版本遍历):配合缓存机制,比通用实现快了约 40 倍。 这让作者拥有了一个“调节旋钮”:可以先用库快速实现功能,如果不够快,就用 Rust 重写关键路径,性能随即大幅提升。

总结:这是一个关于非系统程序员如何利用 Rust 的安全性和高性能,从零开始构建出超越现有工具(特别是在 Windows 大仓库场景下)的励志故事。

阅读:https://www.reddit.com/r/rust/comments/1ploppl/i_accidentally_made_a_git_client_in_rust_with_no/

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页