返回顶部
首页 > 资讯 > 前端开发 > node.js >提高NodeJS中SSL服务的性能
  • 422
分享到

提高NodeJS中SSL服务的性能

性能NodeJSSSL 2022-06-04 17:06:09 422人浏览 安东尼
摘要

在浏览互联网时,我们都知道,通过SSL进行加密是非常重要的。在贝宝(PayPal),安全是我们的首要任务。我们使用端到端的加密,不仅只是我们的公共网站,对于我们的内部服务调用也同样如此。SSL加密技术将在很

在浏览互联网时,我们都知道,通过SSL进行加密是非常重要的。在贝宝(PayPal),安全是我们的首要任务。我们使用端到端的加密,不仅只是我们的公共网站,对于我们的内部服务调用也同样如此。SSL加密技术将在很大程度上影响node.js的性能。我们已经花时间调整我们的对外服务,并充分地利用他们。下面是一些我们发现能显著地提高SSL对外性能的SSL配置调整清单。

SSL密码

开箱即用,node.js 的SSL使用一组非常强大的密码算法。特别是,迪菲赫尔曼密钥交换和椭圆曲线算法是极其昂贵的。而且当你在默认配置中用了太多的对外SSL调用,Node.js的性能将从根本上得到削弱。为了得到它到底有多慢这个结论,这儿有个服务调用的CPU样本:


918834.0ms 100.0% 0.0 node (91770)
911376.0ms 99.1% 0.0  start
911376.0ms 99.1% 0.0  node::Start
911363.0ms 99.1% 48.0  uv_run
909839.0ms 99.0% 438.0  uv__io_poll
876570.0ms 95.4% 849.0   uv__stream_io
873590.0ms 95.0% 32.0    node::StreamWrap::OnReadCommon
873373.0ms 95.0% 7.0     node::MakeCallback
873265.0ms 95.0% 15.0     node::MakeDomainCallback
873125.0ms 95.0% 61.0     v8::Function::Call
873049.0ms 95.0% 13364.0    _ZN2v88internalL6InvokeEbNS0
832660.0ms 90.6% 431.0     _ZN2v88internalL21Builtin
821687.0ms 89.4% 39.0      node::crypto::Connection::ClearOut
813884.0ms 88.5% 37.0       ssl23_connect
813562.0ms 88.5% 54.0       ssl3_connect
802651.0ms 87.3% 35.0        ssl3_send_client_key_exchange
417323.0ms 45.4% 7.0         EC_KEY_generate_key
383185.0ms 41.7% 12.0        ecdh_compute_key
1545.0ms 0.1% 4.0          tls1_generate_master_secret
123.0ms 0.0% 4.0           ssl3_do_write
...

让我们重点关注一下密钥的生成:


802651.0ms 87.3% 35.0 ssl3_send_client_key_exchange
417323.0ms 45.4% 7.0 EC_KEY_generate_key
383185.0ms 41.7% 12.0 ecdh_compute_key

这个调用87%的时间都花在了生成密钥上!

这些密码能被改变以减少密集的计算。这个想法已经在https(或代理)得以实现了。例如:


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

上面的密钥已经没用昂贵的迪菲赫尔曼密钥交换。用相似的东西代替之后,在下面的样例中我们能看到显著的变化:


...
57945.0ms 32.5% 16.0 ssl3_send_client_key_exchange
28958.0ms 16.2% 9.0 generate_key
26827.0ms 15.0% 2.0 compute_key
...

通过OpenSSL文档,你可以学习更多关于密码串的东西。

SSL会话恢复

如果您的服务器支持SSL会话恢复,那么你可以通过https(或代理)来传递会话。你也可以将代理的createConnection函数包裹起来:


var createConnection = agent.createConnection;

agent.createConnection = function (options) {
  options.session = session;
  return createConnection.call(agent, options);
};

通过给连接增加简短的握手机制,会话恢复能降低连接数的使用。

保持活动

允许代理保持活动将缓和SSL握手。一个保持活动的代理,比如agenTKEepalive可以修复结点保持活动的问题,但在Node0.12中它是非必须的。

另一个需要铭记在心的东西是代理的maxSockets,这个值高的话能对性能造成负面的影响。在你创建的对外连接数量的基础上控制你的maxSockets值。

Slab的大小

tls.SLAB_BUFFER_SIZE决定了被tls客户端(服务器)使用的slab缓冲区的分配大小。它的大小默认为10MB。

这些分配的区间将会扩展你的rss且会增加垃圾回收的时间。这意味着高容量将会影响到性能。把这个容量调整到一个比较低的值可以改善内存和垃圾收集的性能。在0.12 版本中,slab的分配已经得到改善了,没有必须再调整了。

SSL在0.12中近期的改变

测试Fedor的SSL增强版。

测试说明

运行一个作为SSL服务代理的http服务,全部运行在本机上。

v0.10.22


Running 10s test @ http://127.0.0.1:3000/
20 threads and 20 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 69.38ms 30.43ms 268.56ms 95.24%
Req/Sec 14.95 4.16 20.00 58.65%
3055 requests in 10.01s, 337.12KB read
Requests/sec: 305.28
Transfer/sec: 33.69KB

v0.11.10-pre (从主版本构建)


Running 10s test @ http://127.0.0.1:3000/
20 threads and 20 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 75.87ms 7.10ms 102.87ms 71.55%
Req/Sec 12.77 2.43 19.00 64.17%
2620 requests in 10.01s, 276.33KB read
Requests/sec: 261.86
Transfer/sec: 27.62KB

这没有太多的区别,但这应归于默认密码,所以让我们调整密码的代理选项。例如:


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

v0.10.22


Running 10s test @ http://localhost:3000/
20 threads and 20 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 59.85ms 6.77ms 95.71ms 77.29%
Req/Sec 16.39 2.36 22.00 61.97%
3339 requests in 10.00s, 368.46KB read
Requests/sec: 333.79
Transfer/sec: 36.83KB

v0.11.10-pre (从主版本构建)


Running 10s test @ http://localhost:3000/
20 threads and 20 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 38.99ms 5.96ms 71.87ms 86.22%
Req/Sec 25.43 5.70 35.00 63.36%
5160 requests in 10.00s, 569.41KB read
Requests/sec: 515.80
Transfer/sec: 56.92KB

正如我们所见,经过Fedor的修改,这有着巨大的区别:从0.10到0.12性能差不多差着2倍左右!

总结

有人可能会问“为什么不仅仅只是关掉SSL呢,关了之后它就会变得快起来”,且对于一些人来说这也是一种选择。实际上,当我问别人他们是如何解决SSL性能问题的时候这是比较有代表性的答案。但是,如果企业SSL要求的任何东西只增加不减少;且尽管已经做了很多来改善Node.js中的SSL,性能调整仍然还是需要的。我希望上述的一些技艺能够帮助你调整SSL用例性能。

--结束END--

本文标题: 提高NodeJS中SSL服务的性能

本文链接: https://lsjlt.com/news/11851.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 提高NodeJS中SSL服务的性能
    在浏览互联网时,我们都知道,通过SSL进行加密是非常重要的。在贝宝(PayPal),安全是我们的首要任务。我们使用端到端的加密,不仅只是我们的公共网站,对于我们的内部服务调用也同样如此。SSL加密技术将在很...
    99+
    2022-06-04
    性能 NodeJS SSL
  • 如何提高服务器的性能
    这篇文章主要介绍“如何提高服务器的性能”,在日常操作中,相信很多人在如何提高服务器的性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提高服务器的性能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!卸载...
    99+
    2023-06-07
  • 如何提高服务器性能
    提高服务器性能的方法:1、使用内存数据库,将数据放在内存中;2、使用RDD,加快数据处理速度;3、增加服务器缓存来降低访问磁盘带来的时间消耗;4、使用SSD来代替机械硬盘。具体内容如下:使用内存数据库内存数据库,其实就是将数据放在内存中直接...
    99+
    2024-04-02
  • 怎么提高mysql服务性能
    分享几个提高mysql服务性能的技巧开启查询缓存大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的...
    99+
    2024-04-02
  • 用 FieldMask 提高 C# gRpc 的服务性能
    目录前言:一.FieldMask二、Demo​1.定义.proto文件​​2.实现服务端​​3.实现客户端​​4.修改服务端​前言: 想象一下,有一个服务提供个多个客户端调用,但不是...
    99+
    2024-04-02
  • 如何提高香港服务器的性能
    以下是提高香港服务器性能的一些方法: 使用高性能硬件:选择高性能的服务器硬件,包括CPU、内存、硬盘和网络适配器,以确保服务器具...
    99+
    2024-04-02
  • 云服务器安全性如何提高性能
    云服务器提供了高性能、可靠性和易用性,使用户能够轻松地管理和配置他们的应用程序。以下是提高云服务器性能的一些方法: 性能优化:优化服务器性能是提高云服务器性能的重要因素。确保使用最佳的硬件和软件、减少服务器硬件故障和优化数据库、缓存和索...
    99+
    2023-10-26
    安全性 性能 服务器
  • 如何提高香港服务器性能
    提高香港服务器性能的方法:1、将香港服务器进行虚拟化操作;2、使用管理工具来提升香港服务器管理效率;3、升级香港服务器的配置来提高服务器性能。具体内容如下:将服务器虚拟化如果同期拥有多个项目,增加额外服务器会显得浪费,成本费用也会大幅度上升...
    99+
    2024-04-02
  • 如何提高服务器的抗攻击性能
    提高服务器的抗攻击性能的方法有:1、提高服务器的抗攻击性能要采用性能高的网络设备,尽量选择知名度高且口碑好的服务器设备;2、提高服务器的抗攻击性能要尽可能避免使用NAT;3、提高服务器的抗攻击性能要保证有充足的网络带宽;4、提高服务器的抗攻...
    99+
    2024-04-02
  • 怎么用FieldMask提高C#的gRpc服务性能
    这篇文章主要介绍“怎么用FieldMask提高C#的gRpc服务性能”,在日常操作中,相信很多人在怎么用FieldMask提高C#的gRpc服务性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Fiel...
    99+
    2023-06-29
  • 提高阿里云服务器性能的方法
    阿里云作为国内领先的云计算服务提供商,为用户提供了强大的服务器资源。然而,随着业务的发展和用户量的增长,服务器性能可能会受到各种因素的影响而降低。本文将介绍一些提高阿里云服务器性能的方法,帮助用户优化服务器性能,提升业务效率。方法一:合理...
    99+
    2024-01-16
    阿里 性能 服务器
  • 怎么提高服务器的抗攻击性能
    要提高服务器的抗攻击性能,可以采取以下几种措施: 使用防火墙:配置防火墙可以过滤网络流量,防止恶意攻击者进入服务器系统。 更...
    99+
    2024-04-09
    服务器
  • LeetCode 算法题能提高 Apache 服务器性能吗?
    随着互联网的发展,服务器性能的优化越来越重要。Apache 服务器是一个广泛使用的服务器,其性能优化一直是一个热门话题。那么,LeetCode 算法题能否提高 Apache 服务器性能呢?本文将探讨这个问题。 首先,让我们了解一下 Lee...
    99+
    2023-10-25
    leetcode 日志 apache
  • VPS服务器如何提高安全性能
    VPS服务器提高安全性能的方法:1、定期对VPS服务器漏洞进行扫描,及时发现并进行处理,防止被黑客轻易利用发起攻击;2、给VPS服务器部分重要的端口进行更换,避免黑客轻易扫描发现进行攻击;3、给VPS服务器安装安全软件,提高服务器防御能力、...
    99+
    2024-04-02
  • 怎么提高dml的性能
    这篇文章主要介绍“怎么提高dml的性能”,在日常操作中,相信很多人在怎么提高dml的性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么提高dml的性能”的疑惑有所帮助!接...
    99+
    2024-04-02
  • 怎么提高vps国外云服务器的性能
    提高vps国外云服务器性能的方法:1、定期对VPS漏洞进行扫描,及时发现并进行处理,防止被黑客轻易利用发起攻击;2、给VPS部分重要的端口进行更换,避免黑客轻易扫描发现进行攻击;3、给VPS安装安全软件,提高服务器防御能力、降低被攻击的风险...
    99+
    2024-04-02
  • 如何提高香港服务器租用的性能
    提高香港服务器租用性能的方法:1、给租用的香港服务器增加内存容量;2、将香港服务器的硬盘更换成优质的硬盘;3、使用SCSI接口卡;4、使用RAID独立冗余磁盘阵列;5、将香港服务器的处理器进行升级。具体内容如下:增加内存容量网站服务器的访问...
    99+
    2024-04-02
  • 如何提高美国服务器的建站性能
    提高美国服务器建站性能的方法:1、减少HTTP请求量,HTTP请求量越大,网页反应速度越慢;2、减少DNS查询时间,提升网站服务器整体性能;3、合理管理服务器,设置网站健康发展;具体分析如下:减少HTTP请求量HTTP请求量越大,网页的反应...
    99+
    2024-04-02
  • Cassandra中怎么提高性能和扩展性
    要提高Cassandra的性能和扩展性,可以考虑以下几点: 数据建模优化:设计合理的数据模式,避免数据倾斜和冗余,优化查询性能。...
    99+
    2024-03-15
    Cassandra
  • Java 中高效的 XML 处理:提高性能的技巧
    引言: 处理 XML 数据在各种 Java 应用程序中都是一项常见任务。为了确保流畅的性能和响应性,优化 XML 处理过程至关重要。本文将提供一系列技巧,帮助开发人员提高 Java 应用程序中 XML 处理的效率和性能。 使用 SAX 解...
    99+
    2024-03-07
    XML、Java、SAX、DOM4J、StAX、性能、优化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作