KonaJDK 新特性发布,提升 GC 扫描 94% 性能

KonaJDK 新特性发布,提升 GC 扫描 94% 性能随着国密算法等商密算法国家标准的推出,云上客户对于 Java 版本的国密算法需求越来越多。KonaJDK8 内置了国密算法的 JCE Provider, Java 用户只需要使用 JCE API 即可使用国密 SM2/SM3/SM4 算法。 下面利用微服务加密信息传输为例, 具…

本次 TencentKona 8 版本更新到 8.0.4, 在同步到社区版本 8u272 的基础上,还有哪些新的特性呢?本文为您一一介绍:

  • Update to jdk8u272
  • TencentSMProvider for SM2/SM3/SM4 support
  • Parallel Full GC for G1
  • Parallel Heap Inspection for G1 and ParallelScavenge Heap
  • Other performance enhancement
  • Bug fixes

作者介绍臧琳 — 腾讯云中间件 JVM 工程师,主要负责腾讯云中间件JDK定制化开发及优化工作,专注于JVM中内存管理、Runtime运行时以及执行引擎在云业务中的性能分析及优化

文章来源:腾讯云中间件

国密 SM2/SM3/SM4 算法支持 JCE Provider

随着国密算法等商密算法国家标准的推出,云上客户对于 Java 版本的国密算法需求越来越多。KonaJDK8 内置了国密算法的 JCE Provider, Java 用户只需要使用 JCE API 即可使用国密 SM2/SM3/SM4 算法。

下面利用微服务加密信息传输为例, 具体说明 TencentSMProvider 的使用方法。

微服务示例简介

我们定义两个微服务,Consumer 与 Provider,

具体流程如图所示:

KonaJDK 新特性发布,提升 GC 扫描 94% 性能

consumer负责根据provider提供的秘钥对secret数据进行加密,然后传输给provider; provider侧负责生成公钥与私钥(SM2),或者秘钥(SM4), 获取consumer提供的加密数据之后进行解密。

国密 TencentSMProvider 的使用与说明

下面我们看一下以上逻辑的主要代码,请注意, 为了使代码简洁易懂,这里删除了一些日志打印以及异常处理的代码。另外代码中涉及的SM4秘钥传输并不安全,仅做说明使用。

**首先看 Consumer 这一侧: **

  1. 初始化TencentSMProvider

KonaJDK 新特性发布,提升 GC 扫描 94% 性能

  1. 获取秘钥

从发送GET请求到/echo-rest/ 和 /echo-rest/ 来请求相应秘钥,并存储在相应变量中

KonaJDK 新特性发布,提升 GC 扫描 94% 性能

  1. 使用SM2/SM4加密并传递密文

使用上一步存储的 Key 对数据进行加密。并使用 POST 发送给 Provider:/echo-rest/encrypt/{algorithm}/{str} 其中 algorithm 对应 SM2 与 SM4, str 对应待加密数据。http 消息中 header 包含解密所需要的参数,如 SM4 GCM 模式需要的 IV 和 tag , header 中还包含密文。

KonaJDK 新特性发布,提升 GC 扫描 94% 性能

Provider 接收后会将数据解密并返回给 Consumer, 这里就是存储在 result 中。

再看 Provider 这一侧:

  1. 初始化 TencentSMProvider

    首先是 SM2/SM4 所需 Key 与配置:

KonaJDK 新特性发布,提升 GC 扫描 94% 性能

  1. 生成秘钥

    在获得 Consumer 秘钥请求后,针对 SM2 生成 KeyPair,包含公钥与私钥,并返回公钥给 Consumer ; 针对 SM4 生成秘钥并返回给 Consumer :

KonaJDK 新特性发布,提升 GC 扫描 94% 性能

  1. 获取SM2/SM4加密的密文并解密

KonaJDK 新特性发布,提升 GC 扫描 94% 性能

  1. 使用 SM3 计算 hash digest

    注意上图的代码中已经包含了使用 SM3 计算 digest 的实现。实际上 Consumer 可以通过 /echo-rest/encrypt/SM3/{str} 请求来通过 Provider 使用 SM3 计算 str 的 hash digest.

如何运行

使用以上代码,用户需要使用 KonaJDK 启动 Consumer 与 Provider 微服务,之后只需要给 Consumer 发送 GET Key 请求以及 POST 待加密数据, 即可看到返回值中会打印解密之后的数据。

例如:

SM2 数据加密与解密

~$ curl http://localhost:18083/echo-rest/getkeysm2     
--(获取 SM2 公钥)

MDQyMWJkNGY0ZDU0Y2U5MGIyMTY5NWVhNmRkNDRjN2M3NWY5MzE5OTc4OGQwOGZiNzA4NjJlNjE4NjYzYjJkMGQ0ZWFiODY3MzNiMDFlNTczN2E3MjkxNTE5NjgzODYxM2NlMjQyMTZkYjExNjE2NmFiYTVmYTFjNDZhM2RiYzcwNw==

-- (公钥)
 ~$ curl -X POST http://localhost:18083/echorest/encrypt/SM2/IamSecretData

-- (加密数据 “IamSecretData”)

provider get secret: IamSecretData

--( Provider 解密后的数据打印)

SM4 数据加密与解密

~$ curl http://localhost:18083/echo-rest/getkeysm4
--(获取SM4秘钥)
XaiwPX+FWQnVsqPpYgszpA==							
-- (秘钥)
~$ curl -X POST http://localhost:18083/echo-rest/encrypt/SM4/IamSecretData
-- (加密数据“IamSecretData”)
provider get secret: IamSecretData
--(provider解密后的数据打印)

SM3 获取 “IamSecretData” 的 hash digest

$ curl -X POST http://localhost:18083/echo-rest/encrypt/SM3/IamSecretData

provider get secret: ��%�h���Y�F�{��7��ע����<

目前, KonaJDK8 中的 TencentSMProvider 主要支持的 SM2/SM4 算法配置如下:

ALGO MODE PADDING 备注
SM2 n/a n/a 目前cipher中SM2 不支持mode和padding。 后续会添加相应支持
SM4 CBC NoPadding, Pkcs7Padding Nopadding模式,待加密数据需满足128bit
SM4 ECB NoPadding, Pkcs7Padding Nopadding模式,待加密数据需满足128bit
SM4 GCM NoPadding, Pkcs7Padding Nopadding模式,待加密数据需满足128bit

我们即将推出TencentSMProvider的独立jar包版本,帮助用户在使用openJDK是同样可以使用TencentSMProvider提供的加密算法。

另外, TencentSMProvider也可以拓展支持商业版本的国密算法, 由腾讯安全团队的密码专家提供优化与性能提升,欢迎垂询。

G1 并行FullGC优化

G1算法由于具有更低的暂停和更高的吞吐,已经逐步开始取代CMS算法被广泛应用在各种在离线数据处理系统中,特别是在大堆情况下,在JDK14里面,CMS算法正式被移除,G1也在jdk9开始成为JDK默认的gc算法。G1算法通过concurrent cycle,mixed gc等算法来回收Old区对应的Heap Region,有效降低Old区Region的回收成本,但是在最坏的情况下,G1 仍然需要靠Full GC算法来暂停业务,回收内存。

由于JDK8的G1 Full GC是单线程,全停机的实现,所以一旦由于内存碎片,业务流量变化等触发了Full GC,一般会造成几十秒到上百秒的暂停,进而导致业务SLA可用性指标大幅降低,KonaJDK 8.0.4版本里面对G1 Full GC算法进行了系统的优化,提供了一个G1 并行Full GC实现,充分利用机器多核优势,大幅降低Full GC的停机时间,在内部大数据业务场景的测试中, 优化后的G1 Full GC停机时间平均降低约80%。

性能评测数据如下:

KonaJDK8选项 -XX:-G1ParallelFullGC -XX:+UseG1 -XX:+G1ParallelFullGC -XX:+UseG1
Full GC平均停机时间 3.3s 16.4s

并行堆扫描优化

另外,我们将TencentKona对于openJDK社区的贡献parallel heap inspection也回合到KonaJDK8中, 用户在使用G1和ParallelScavenge GC时,可以通过使用 “jmap -histo:parallel=“”选项提升 jmap扫描堆得时间。

从我们在280g大堆,多核CPU平台上的经验,针对G1 GC, “jmap -histo:parallel=30” 可将对扫描时间从15s降至0.8s。

另外针对高版本不在支持的CMS GC,KonaJDK团队也进行了parallel heap inspection的开发,内部正在针对该功能进行测试, 待测试完毕也会在后续版本中引入,敬请期待。

欢迎使用与反馈

除了以上新特性以外, KonaJDK本次升级还包含其他性能优化与问题修复。 KonaJDK团队也在持续开发和维护,不断努力,提供稳定可靠的JDK。欢迎使用与反馈。

参考链接

github.com/Tencent/Ten…

今天的文章KonaJDK 新特性发布,提升 GC 扫描 94% 性能分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/14139.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注