Npam的指数级增长促使npm工程团队从Node.js切换到Rust,以处理那些将成为性能瓶颈的CPU绑定任务。最近的一份白皮书概述了在Rust中开发这个新服务,以及将其投入生产一年多的经验。

大部分npm操作是流量密集型的,Node.js正是针对这种场景设计的。但是,npm工程师们发现,确保只有授权用户可以发布包的授权服务显示出令人担心的计算密集型负载。Npm工程师Chris Dickinson解释到,因为身份验证服务有点过时了,所以做出从头开始重写它的决定并不难。因此,npm工程师开始寻找最适合该任务的编程语言。因为缺乏内存安全性,C和C++很快就被排除在外,而Java因为依赖虚拟机,也出局了。剩下的语言有两种,分别是Go和Rust。为了更好地评估最终解决方案,npm团队决定用这两种语言以及Node.js分别重写他们的身份验证服务,以便进行比较。

不可否认,npm的身份验证服务没那么复杂,以Node.js重写只花了一个小时。另一方面,Go需要2天,但以Rust重写花了整整一个星期,主要是因为Rust的学习曲线更加陡峭以及该语言的内在复杂性,Chris Dickinson这样解释说。

我们将编写一个正确的程序,但是,我们必须思考该正确程序的方方面面。

最后,npm团队决定部署Rust版本的身份验证服务,这主要归功于他们获得来自Rust社区的强力支持,以及与当时Go能提供的包管理器相比,Rust包管理器Cargo具有优势。

对npm团队来说,好消息是Rust服务已经在生产环境中运行一年有余,没有任何告警。这与在npm部署Node.js服务的常规经验形成鲜明对比,为让错误和资源的使用可控,在npm部署Node.js要包括大量的监控。消极的一面是,根据Chris Dickinson的说法,在npm引入Rust的最大缺点就是不得不处理另外的栈,包括监控和日志记录。

阅读英文原文:NPM Adopted Rust to Remove Performance Bottlenecks

最新文章

  1. iOS 10的正确解锁方式
  2. sqlite锁的机制
  3. 【原】IOS中KVO模式的解析与应用
  4. 加载程序到android虚拟机报错: android.widget.RelativeLayout cannot be cast to android.widget.Button
  5. 运行从别处复制过来的linux可执行程序
  6. 《深度探索c++对象模型》chapter2 构造函数语义学
  7. ZooKeeper搭建
  8. lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
  9. apk反编译方式
  10. 使用dns批量管理普通主机名相关问题
  11. [知了堂学习笔记]_JSON数据操作第2讲(JSON的封装与解析)
  12. Maven(一)初识Maven
  13. Linux入门(3)——Ubuntu16.04下安装VMware
  14. 【原创】大叔经验分享(2)为什么hive在大表上加条件后执行limit很慢
  15. Windows10下使用python+selenium实现谷歌浏览器的自动控制
  16. ABP框架系列之一:(Entity-实体)
  17. 排序算法<No.5>【堆排序】
  18. 5. Longest Palindromic Substring - Unsolved
  19. 收集整理的oracle常用命令大全
  20. PAT甲题题解-1076. Forwards on Weibo (30)-BFS

热门文章

  1. es6的箭头函数和es5的function函数区别
  2. mysql正则匹配中文时存在的问题
  3. 怎么用scratch做大鱼吃小鱼
  4. Oacle学习-01Oracle的安装
  5. 如何使用npt结合crontab实现集群之间的时间同步
  6. floyd三重循环最外层为什么一定是K
  7. Win10安装Keras+Tensorflow+Opencv
  8. VulnHub靶场学习_HA: ARMOUR
  9. 【Java】手动编写第一个Java程序,HelloWorld!
  10. D - Fox And Two Dots DFS