Rust-初见 | 后篇
在上次写了一篇关于我首次学习Rust的文章后,我从北美辗转来到了新加坡,并在这个新的城市中开启了我的实习之旅。
尽管本次实习是在一个非互联网企业,但是得益于我老板是NUS的CS硕士,我除了需要帮助我们公司完成第三方企业AGM中立审查的任务以及设计一些项目的商业策划之外,还揽到了一些Web开发+AI技术方面的项目。
然后由于目前我这个公司比较chill,我也想在做我平常会做的事情以外学习一些新的东西,所以把AI逻辑和后端逻辑拆开了。后端将会由Rust编写,而AI逻辑将由Python进行,这是由于:
- 使用Rust编写后端可以承载大规模的API并发并减少延时
- 使用Python编写AI逻辑可以方便的进行热更新和调试(Python Research => Python Deploy),在不损失太多性能的情况下减少许多运维(Python Research 转 AI通用模型 => 然后用MLOps 高性能C++/Rust推理)的成本
而Rust与Python之间使用Redis进行队列的Push和Pull. Python处理完成后Rust会有一个独立的线程跑在线程池中,然后将处理完的数据做持久化保存(MongoDB)。
目前来说,这个系统运行还算比较顺畅,每个API Call平均20-30ms内都可以完成回复。
因为这篇文章是谈论Rust初见后嘛,所以我还是想聊一聊Rust的使用体验。
目前来说,我觉得用Rust写HTTP服务器真的比C++舒服很多,而且这是在没有损失很多性能的情况下
首先Rust支持async/await
特性,而且tokio
这个库自带线程池,它直接按照逻辑处理器数量自动初始化线程池然后自动做IO的调度,真的很舒服。
另外Rust
的http Request/Response
生态和服务器的生态做的真的很好,有很多框架可以选择,而且编译的时候就一个命令cargo build
就可以了,都不用自己写CMake
文件。
除了这些以外,Rust跟C++比最大的优点就是Macro
这个东西, Serde
这个库的序列化以及bson
的doc!
macro的支持都让我少写了非常多非常多的代码,而且这个对比Dart
的Annotation Generator
来说不需要自己手动写Connector。
对对,反正大概就是这样,总之就是Rust写服务端可能雀石没有NodeJS那么爽,但是我觉得可能爽度有NodeJS的75%,相比之下C++的体验就是NodeJS的5%。如果加上性能考量的话,那我觉得Rust真的是太适合做大规模的高性能API服务器了。大家都给我用Rust!