在前面的文章中提到我们在一个高性能场景中尝试了rust
,那么它的效果如何呢?
在这次rust
的尝试中,我们实现了一个通用的特征数据处理框架,并实现了几个常用的算子。这个数据处理框架目标是实现 Spark ML pipeline
的在线计算,为机器学习模型的在线推理场景提供特征处理。
我们选用了两个rust
的grpc
框架对外提供服务。它们分别是grpc
和tonic
,前者是基于线程池的实现,后者是基于rust异步模式async/await
的实现。实验过程发现两者性能相差不大,tonic
稍好,快2ms
左右(不到5%),这可能是由于其数据结构设计更为精简带来的。
为了更有参考性,我们直接进行端到端的测试(用grpc
客户端发起请求,在客户端采集数据),并与scala
版本的实现进行性能对比。下面的结果中,服务端应用均部署在同一台64核心
+32GB内存
的服务器上,客户端也在此服务器上发起请求。由于数据处理的逻辑一致,客户端使用同一个java
版本的实现。