Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 高效地终止大量SSL连接大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近设置了一个基于Node.js的Web套接字服务器,经过测试,可以在小型EC2实例(m1.small)上每秒处理大约2,000个新的连接请求.虑到m1.small实例的成本,以及将多个实例放在支持WebSocket的代理服务器(如HAProxy)后的能力,我们对结果非常满意.

但是,我们意识到我们还没有使用SSL进行任何测试,因此查看了许多SSL选项.很明显,在代理服务器上终止SSL连接是理想的,因为代理服务器可以检查流量并插入诸如X-ForWARD-For的头,以便服务器知道请求来自哪个IP.

所以我研究了一些解决方案,如Pound,stunnel和stud,所有这解决方案都允许终止443上的进入连接,然后传递到端口80上的HAProxy,然后将连接传递到Web服务器上.不幸的是,我发现,向c1.medium(高cpu)实例上的SSL终端代理服务器发送流量很快地消耗了所有的cpu资源,而且每秒只有50个请求.我尝试使用上面列出的所有三个解决方案,并且所有这些都完全相同,我假设他们都依赖于OpenSSl.我尝试使用一个64位非常大的高cpu实例(c1.xlargE),发现性能只有成本线性缩放.所以根据EC2的定价,我需要每秒支付大约600p / m的200个SSL请求,而不是每秒2000个非SSL请求的$60p / m.当我们开始计划每秒接收1,000或10,000个请求时,前者的价格在经济上变得非常不可行.

我还尝试使用Node.js的https服务器终止SSL,性能与Pound,stunnel和stud非常相似,所以没有明确的优势.

所以我希望有人可以帮忙,建议我如何解决这个可笑的成本,我们必须吸收提供SSL连接.我听说SSL硬件加速器提供了更好的性能,因为硬件设计用于SSL加密和解密,但是正如我们目前在所有服务器上使用Amazon EC2一样,使用SSL硬件加速器不是一个选择,除非我们有一个单独的数据中心与物理服务器.如果亚马逊,谷歌,Facebook可以通过SSL提供所有的流量,那么这样的成本如此之高,我就很难想像.那里必须有一个更好的解决方案.

任何建议或意见将不胜感激.

谢谢
马特

解决方法

我不太了解在不同EC2实例上可用的cpu功耗,但我认为您的问题不在于您选择使用TLS终止代理软件,而是配置它们.
没有任何配置,我假设他们都会提供他们支持的所有密码套件,包括(非常)慢的.他们也许会让客户选择最喜欢的一个.

不是所有的TLS密码套件都是相同的,有些比其他硬件更高的cpu成本,无论是从密钥交换还是密码本身.
根据使用的软件,应该有一种方法来指定服务器接受的密码字符串(也是使服务器坚持使用该方法).对于OpenSSL,这些工作方式如下:http://www.openssl.org/docs/apps/ciphers.html#CIPHER_STRINGS

如果你要加快速度,至少要确保你不使用采用Diffie-HellmAnn(非椭圆曲线类型)密钥交换的密码.
要使用DH密钥交换来禁用密码套件,请确保字符串包含!DH在某个时间点.
您可以测试什么字符串导致可用的密码,例如openssl ciphers -v’HIGH:!aNULL:!DH:!ECDH’.

该字符串禁用正常的Diffie-Hellman以及椭圆曲线Diffie-HellmAnn密钥交换.这可能只是离开RSA密钥交换,具体取决于您的OpenSSL版本.

关于密码,你应该测试你想要的EC2硬件.没有硬件加速,你应该更喜欢RC4超过AES128超过AES256超过任何其他,at least according to this benchmark.

我还建议阅读this wonderful post,特别是启发性的第一张图,显示了DH对TLS握手性能的影响.

最后,确保使用TLS会话缓存.这也节省了一些cpu.

大佬总结

以上是大佬教程为你收集整理的node.js – 高效地终止大量SSL连接全部内容,希望文章能够帮你解决node.js – 高效地终止大量SSL连接所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。