本次 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,
具体流程如图所示:
consumer负责根据provider提供的秘钥对secret数据进行加密,然后传输给provider; provider侧负责生成公钥与私钥(SM2),或者秘钥(SM4), 获取consumer提供的加密数据之后进行解密。
国密 TencentSMProvider 的使用与说明
下面我们看一下以上逻辑的主要代码,请注意, 为了使代码简洁易懂,这里删除了一些日志打印以及异常处理的代码。另外代码中涉及的SM4秘钥传输并不安全,仅做说明使用。
**首先看 Consumer 这一侧: **
- 初始化TencentSMProvider
- 获取秘钥
从发送GET请求到/echo-rest/ 和 /echo-rest/ 来请求相应秘钥,并存储在相应变量中
- 使用SM2/SM4加密并传递密文
使用上一步存储的 Key 对数据进行加密。并使用 POST 发送给 Provider:/echo-rest/encrypt/{algorithm}/{str} 其中 algorithm 对应 SM2 与 SM4, str 对应待加密数据。http 消息中 header 包含解密所需要的参数,如 SM4 GCM 模式需要的 IV 和 tag , header 中还包含密文。
Provider 接收后会将数据解密并返回给 Consumer, 这里就是存储在 result 中。
再看 Provider 这一侧:
-
初始化 TencentSMProvider
首先是 SM2/SM4 所需 Key 与配置:
-
生成秘钥
在获得 Consumer 秘钥请求后,针对 SM2 生成 KeyPair,包含公钥与私钥,并返回公钥给 Consumer ; 针对 SM4 生成秘钥并返回给 Consumer :
- 获取SM2/SM4加密的密文并解密
-
使用 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。欢迎使用与反馈。
参考链接
今天的文章KonaJDK 新特性发布,提升 GC 扫描 94% 性能分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/14139.html