在 PayPal 改善 Node.js 的 SSL 的性能

阅读数:1133 2014 年 5 月 7 日

话题:性能调优Node.js语言 & 开发

Trevor Livingston是一名就职于 PayPal 的软件工程师,他在最近的一篇帖子里概括了一些改善 Node.js 出站 SSL 性能的建议

用计算没那么密集的加密算法

首先,Livingston 谈到 Node.js 使用的一些默认加密算法(比如 Diffie HellmanElliptical Curve )非常强大但是“极为昂贵,当你以默认设置开始发起大量出站 SSL 调用时会从根本上削弱 Node.js 的性能”。Livingston 说,在一个服务调用中密钥生成占 87% 的时间。他建议使用占资源较少的算法。

var agent = new https.Agent({
    "key": key,
    "cert": cert,
    "ciphers": "AES256-GCM-SHA384"
});

在 Livingston 的测试中,使用 AES256 生成密钥所需的时间会减少到 32.5%。

使用keep alive——keepAliveAgent包的作者说,它能将每秒事务数提升 50% 以上。这个包在即将发布的 Node.js 0.12 中不是必需的。

优化agent.maxSockets——每个源默认的并发 socket 数量是 5,这个数目不能太高,因为它“能导致负面的性能影响”,Livingston 说。

调整slab buffer size应该小心地操作,因为在高容量时它会影响垃圾收回的时间。0.12 版发布后应该就不再需要这种微调了。

Livingston 还写下了即将发布的 Node.js 0.12 已经做出的一部分改进,使用 AES256 的时候几乎使每秒服务的请求数翻了一倍。

会话重用。另一个改善 Node 性能的建议是会话重用Miroslav Bajtoš 在早先的一个帖子里提到过一个详细的思路。为此,需要创建一个会话存储并处理 newSession 和 resumeSession 事件。在他们各自的帖子中所包含的代码示例展示了针对单线程应用和针对工作进程集群的会话重用。

查看英文原文:Improving Node.js’ SSL Performance at PayPal


感谢杨赛对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。