10 万行 Rust 代码开发实测封神!AI 应用经验大揭秘

news2026/5/21 20:39:34
从 10 万行 Rust 代码开发中获得的 AI 应用经验2025 年 12 月 1 日在过去几个月里对 AI 编码工具在构建实际生产级分布式系统方面的能力进行了压力测试。结果是开发出了一个基于 Rust 的多 Paxos 共识引擎。它不仅实现了 Azure 复制状态库Replicated State LibraryRSL[ [1](https://github.com/Azure/RSL) ]的所有功能RSL 是大多数主要 Azure 服务的基础还针对现代硬件对其进行了升级。整个项目历时约 3 个月其中约 4 周内编写了 10 万行 Rust 代码约 3 周内将性能从每秒 2.3 万次操作提升到了每秒 30 万次操作。除了实现前所未有的开发效率外还发现了一些非常有用的技术。本文将分享在以下方面最有价值的经验通过代码契约确保代码正确性、采用轻量级规范驱动开发方法、积极进行性能优化以及对未来 AI 辅助编码的期望。为何要升级 RSLAzure 的 RSL 实现了多 Paxos 共识协议是许多 Azure 服务复制功能的核心。然而RSL 是十多年前编写的。尽管它很健壮但未能跟上现代硬件和工作负载的发展。推动这个项目的主要有三个关键差距1. 缺乏流水线机制当一个投票正在进行时新请求必须等待这会增加延迟。2. 不支持非易失性内存NVM非易失性内存在 Azure 数据中心已很常见它可以显著减少提交时间。3. 对硬件的感知有限RSL 没有针对远程直接内存访问RDMA进行优化而 RDMA 在 Azure 数据中心已广泛使用。消除这些限制可以显著降低延迟并提高吞吐量这对于现代云工作负载和 AI 驱动的服务至关重要。鉴于对 Rust 和 AI 加速开发的兴趣决定从头开始构建一个现代版的 RSL。开发效率大幅提升在大约六周的时间里借助 AI 实现了超过 13 万行 Rust 代码涵盖了 RSL 的所有功能包括多 Paxos、领导者选举、日志复制、快照和配置更改等。使用了许多可用的 AI 编码工具如 GitHub Copilot、Claude Code、Codex、Augment Code、Kiro 和 Trae。工作流程不断演变目前主要使用的是 Claude Code 和 Codex CLI同时用 VS Code 处理代码差异和进行小的编辑。发现从命令行界面CLI进行编码能形成完美的异步工作流程极大地提高了开发效率。还发现了一个简单的心理技巧 每月支付 100 美元订阅 Anthropic 的高级计划。这成了一种驱动力——如果睡前不使用 Claude 启动一个编码任务就会觉得在浪费钱。当 Codex CLI 推出后又订阅了第二个 ChatGPT Plus 账号来应对速率限制一个账号用于周一至周三另一个用于周四至周日。由 AI 生成、为 AI 服务的代码契约最常被问到的问题是“AI 如何能正确实现像 Paxos 这样复杂的算法”测试是第一道防线。系统现在有 1300 多个测试从单元测试到最小集成测试如仅测试提议者和接受者再到包含故障注入的多副本全集成测试。具体项目状态可查看相关内容。但真正的突破来自于 AI 驱动的 代码契约 。代码契约为关键函数指定了 前置条件 、 后置条件 和 不变量 。这些契约在测试时会转换为运行时断言但在生产环境中为了性能可以禁用。虽然很久以前就在 .NET 中使用过这种方法 [ [2](https://learn.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts) ]但 AI 让契约的功能变得更强大。从三个层面应用代码契约1. 让 AI 编写契约Opus 4.1 能编写不错的契约而 GPT - 5 High 编写的契约更出色。主要负责审查和完善。例如process_2a 方法处理 Paxos 协议中的 2a 阶段消息有 16 个契约其中一个如下2. 根据契约生成测试用例定义好契约后让 AI 为每个后置条件创建有针对性的测试用例。AI 在这方面表现出色能自动生成有意义的边界情况。3. 基于属性的契约测试这是最喜欢的方法。AI 将契约转换为基于属性的测试探索大量随机输入。任何契约违反都会触发程序崩溃从而尽早发现深层次的 bug。例如一个由 AI 生成的契约发现了一个微妙的 Paxos 安全漏洞这个契约避免了一个可能严重影响复制一致性的问题而且是在问题进入生产环境之前就被发现了。轻量级规范驱动开发尝试过各种规范驱动开发Spec - Driven DevelopmentSDD工具。实际上早期的组件如领导者选举、提议者、接受者和学习者都是按照严格的 SDD 方法实现的。会从需求文档开始将其转化为设计文档再转化为任务列表文档。然而逐渐发现这个过程过于僵化在开发过程中进行更改并确保所有文档保持一致变得很麻烦。现在转向了更轻量级的方法。当开发一个功能如快照功能时使用 spec kit [ [3](https://github.com/github/spec-kit) ] 中的 /specify 命令生成一个规范文档。这个规范文档包含几个用户故事和验收标准。以下是一个关于快照功能的用户故事示例然后使用 /clarify 命令让 AI 对用户故事和标准进行自我审查和改进并让它提出初始规范中未涵盖的其他用户故事。大部分时间都花在这一步。满意后进入 计划模式 让 AI 为特定的用户故事生成一个计划。鉴于当今 AI 编码工具的能力单个用户故事似乎是它们能有效处理的“最佳”工作单元。在这个过程中可能会发现一些需要添加或调整的地方这些在同一个编码会话中很容易处理AI 可能会压缩上下文但通常不担心会丢失太多信息。以下是一个关于配置更改的 /clarify 交互示例● 问题 4起始槽位确定新配置的起始槽位应如何相对于结束槽位来确定建议选项 A - 始终为结束槽位 1这确保了槽位序列没有间隙并保持配置之间的连续性防止任何槽位被孤立或未分配。| 选项 | 描述 || ---- | ---- || A | 始终为结束槽位 1 || B | 允许操作员指定任何大于结束槽位的值 || C | 结束槽位之后的下一个 1000 的倍数以获得更清晰的边界 || D | 与结束槽位相同两个配置共享最后一个槽位 |你可以回复选项字母如“A”通过说“是”或“建议”接受建议或提供你自己的简短答案。积极的性能优化性能优化是 AI 真正发挥作用的地方。在确保代码初始正确性后花了大约三周时间专门进行吞吐量调优AI 成为了性能优化的得力助手。通过迭代循环在一台笔记本电脑上将吞吐量从每秒约 2.3 万次操作提高到了每秒约 30 万次操作。反复遵循以下步骤1. 让 AI 在所有代码路径上插入延迟指标。2. 运行性能测试并输出跟踪日志。3. 让 AI 分析延迟分布它会编写 Python 脚本来计算分位数并识别瓶颈。4. 让 AI 提出优化建议实施其中一个建议重新测量然后重复这个过程。这个过程揭示了一些可能会忽略的问题例如异步路径上的锁竞争、冗余的内存复制和不必要的任务创建。Rust 的安全模型让可以放心地进行这些优化。关键的改进来自于减少内存分配、应用零拷贝技术、避免使用锁以及有选择地消除异步开销。每一次改进都像是从高性能引擎上剥去一层延迟而且不用担心内存损坏的问题。对 AI 辅助编码的期望回顾开发历程一直在思考 AI 还能在哪些方面发挥更大的价值。以下是一些期望1. 端到端用户故事执行仍然更喜欢自己定义用户故事。作为架构师觉得自己更清楚要构建什么以及如何构建。然而相信 AI 在完美执行方面会越来越出色。目前仍然需要花很多时间引导 AI比如在它暂停时让它继续工作、建议重构、审查测试覆盖率并建议添加额外的测试。希望 AI 能在端到端的执行过程中拥有更多自主权。2. 自动化契约工作流应用契约的流程似乎大部分可以自动化。虽然仍然希望审查契约并提出建议但希望 AI 能完成其余的工作如根据契约生成测试、调试单个测试用例、确保测试和契约的一致性以及编写基于属性的测试。当测试失败时希望 AI 能自动调试并修复一些小问题只有在契约或实现中存在真正的正确性问题时才通知。3. 自主性能优化性能调优似乎很适合进一步自动化。所做的很多工作都是重复性的且可以并行进行。像 AlphaEvolve或 OpenEvolve这样的项目在这方面展现出了潜力。理想情况下只需提出潜在的优化方向AI 就能完全自主地进行实验。虽然目前的工具只能处理小代码块但将类似的技术应用于更大的代码库并进行端到端的测量似乎是可行的。附录项目状态这个项目的灵感来源于微软研究院的 Jay Lorch 撰写的一份优雅的设计文档 [ [4](https://jaylorch.net/) ]。这份设计大大简化了多 Paxos 中的所有组件使其更易于实现和理解。到目前为止RSL 的三个限制中已经解决了两个流水线机制和 NVM 支持Jay 集成了在 OSDI 2025 会议上发表的 PoWER Never Corrupts 论文 [ [5](https://www.usenix.org/conference/osdi25/presentation/leblanc) ] 中经过完全验证的 NVM 持久化日志。RDMA 支持仍有待实现。到目前为止项目已发展到超过 13 万行 Rust 代码有 1300 多个测试占代码库的 65% 以上。一个学习与分享的小天地

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2632636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…