仓颉原生S3客户端探索|相较Java性能提升38%

05e7da2069a7a34b43de809b70fef1ca.jpeg关于作者:王文斌,普元资深中间件架构师,主导参与多个中间件产品的架构设计,对云原生、微服务架构研究深入,熟练掌握微服务相关的众多开源组件。

01‍

关于仓颉原生S3客户端

Amazon Simple Storage Service(Amazon S3)是一项对象存储服务,在可扩展性、数据可用性、安全性和能效方面业界领先。并且现在国内的对象存储服务提供商基本都支持S3协议,所以对于那些需要使用S3存储协议的业务系统, 提供一个仓颉原生的S3客户端SDK,支持同步、异步调用模式的客户端成为当务之急。

1.1 特性

仓颉S3客户端 s3client4cj项目已经开源并发布到仓颉社区,特性为:

- 支持 AWS Signature Version 2

- 支持 AWS Signature Version 4

- 支持 S3 Service 的错误响应报文

- 支持 Bucket 相关操作接口

- 支持 Object 相关操作接口

- 支持同步/异步编程接口

- 支持分段上传

- 支持自动分页

- 支持预签名 URL (Presigned URL)

- 支持 MD5/SHA1/SHA256 的 Checksum

- 支持 SHA1/SHA256 的 Trailing Checksum

- 支持 Metric

- 支持重试

- 支持 Waiter

f6ea9e71b9c255d53c2f53633e8d76e6.png

项目开源地址:https://gitcode.com/Cangjie-TPC/s3-sdk/overview

1.2 总体设计

a78137296ca64632f16318e0904bd70b.png

1.2.1 接口层

提供创建到S3存储服务的连接,提供执行S3命令的同步、异步等方法。

1.2.2 核心层

S3Action:提供所有S3Action的抽象,定义Action执行的共用逻辑。

S3Retry: 提供重试能力,通过retryPolicy和backoffPolicy来控制要不要重试以及2次重试之间的间隔时间。

S3Future: 提供统一的同步/异步调用接口。

S3Signer: 提供V2/V4的签名能力。

1.2.3 编码/解码层

将S3Request转换为HttpRequest,并将S3对象转换为XML报文作为HttpRequest的Body,用于发送请求。

将HttpResponse转换为S3Response,并将HttpResponse Body的XML报文转换为S3对象。

1.2.4 通信层‍‍‍

通过仓颉自带的HttpClient和S3存储服务通信。支持TLS通信。

1.3 S3Action处理流程

6c3aae8f497694ce50b70c23a8e8dfa2.png

Action的处理流程如下:

1.客户端执行Action时,将Action名称和Action对应的参数封装为S3Request。

2.S3Marshalling将S3Request转为S3HttpRequest并将对象转XML。

3.S3Retry负责S3HttpRequest的重试,如出现特定的异常或错误响应码时进行重试。

4.S3Signer负责S3HttpRequest的签名,支持V2/V4的签名。

5.通过S3HttpClient发送请求并接受响应, 如果判断响应正常不需要重试,则由S3Unmarshalling将S3HttpResponse转换成S3Response,并负责将XML转换成对象。

02

S3Client的使用

2.1 创建 S3Client

f19c42eabfce188ae8ac4c55ec354b2c.png

默认连接到https://s3.cn-north-1.amazonaws.com.cn

S3Client 支持的可配置属性

d6ac9dc6584501042b7d8c7eb1b17c80.png

2.2 桶创建 (异步)

3a07ec8429c9e309b5b5b51de53867b0.png

75c33642f70a636ddff86ec4e8204273.png

03

性能测试

3.1 测试环境

性能测试时使用一台机器,同时运行MinIO服务和客户端,机器的配置如下:

·  操作系统:Ubuntu 22.04.4 LTS

·  CPU:Intel(R) Xeon(R) Gold 6430

·  内存:512GB

· MinIO版本:RELEASE.2024-06-29T01-20-47Z (go1.22.4 linux/amd64)

·  仓颉SDK版本:0.51.4

3.2 测试结果

服务端MinIO未作任何调优, 全部使用默认配置。

客户端100并发, 每个并发执行1000次迭代, 每次迭代会执行3个操作 putObject,getObject,deleteObject。

客户端

并发数

TPS

CPU

内存

Cangjie

100

13,636

17%

512M

Java

100

13,043

17%

3G

这种场景测试主要是IO的压力,测试结果,Cangjie的S3客户端性能和Java版本的基本持平,但是Cangjie的内存占用较小。

3.3 无后端服务测试‍‍‍‍‍

为了测试纯客户端性能,提供了MockHttpClient,单线程的循环测试, 不实际发送 HTTP 请求, 主要测试除 HTTP 请求之外的代码耗时。

3faeee4efe9057aae40176d3c39dd2ed.png

8e8554fa425a4cb55d3979a2521b09e4.png

测试结果,在无实际访问S3服务后端的情况下,Cangjie的S3客户端性能略优于Java版本的实现。

04‍

共建仓颉生态

基于仓颉语言完备的产品文档和先进的开发工具链,我们团队迅速完成了仓颉S3客户端的开发和测试工作,达到了Java语言S3客户端的同等能力。通过此次为社区贡献仓颉原生S3客户端的探索与实践,我们深刻体会到了仓颉编程语言的多重优势:

1.拥有现代编程语言的核心特性,如类型推断、自动内存管理以及元编程等,使得编程更加高效和灵活。

2.强大的运行时安全性,从根本上消除了空指针的隐患,保障了代码的稳健性。

3.易于扩展,仓颉的扩展功能(Extensions)允许为现有类添加新功能,无需继承或使用装饰模式,使代码简洁、易读,且维护性更好。

4.支持轻量级线程模型,多线程高IO场景具有较好的性能表现。

5.内置单元测试支持,易于开发高效稳定的代码。

6.内置诊断工具,极大地方便了性能优化和问题排查。

仓颉生态的持续发展仍需我们共同努力,我们诚挚地呼吁更多的开发者加入仓颉社区,共同为仓颉生态的建设贡献自己的力量。

05‍

关于团队

我们是普元信息技术股份有限公司中间件系列产品的开发团队。普元信息技术股份有限公司(科创板股票代码:688118)是全栈式中间件领导者,领先的数据治理和低代码技术提供商。

普元始终致力于变革企业软件的生产方式,结合中间件、数据资产管理、低代码核心产品与技术能力,针对用户在数字化转型背景下,对于数据管理运营、应用开发集成、业务融合创新等技术基座的建设要求,服务金融、政务、军工、能源、运营商、先进制造业等诸多关键行业,助力客户加快数字化建设进程。计世资讯发布的《中国中间件市场发展研究报告》显示,普元信息在新兴中间件领域产品技术、市场及战略“双能力”第一。

普元信息积极拥抱仓颉语言。普元信息中间件系列产品,包括分布式配置中心,S3,OBS等组件均全面融入仓颉语言生态,提供了仓颉语言客户端支持。简化了企业级应用向仓颉开发环境的迁移流程,不仅让企业能够充分利用仓颉语言的高效、安全及灵活性,还促进了现有中间件架构与仓颉语言环境的无缝融合与效能提升,为企业数字化转型注入了新的活力。

3919cc92f9a931be9c0b160cdee73e10.png

ce92d03b4ba338b28405f8e16171fb74.png

结语

仓颉编程语言是一个支持高效、安全、全场景应用开发的现代编程语言,具有强安全、高性能、高效率、全场景等特点。Cangjie-TPC(Third Party Components)用于汇集基于仓颉编程语言开发的开源三方库,帮助开发者方便、快捷、高质量构建仓颉程序。

仓颉生态的持续发展仍需我们共同努力,我们诚挚地呼吁更多的开发者加入仓颉社区,共同为仓颉生态的建设贡献自己的力量。普元将携手华为持续为仓颉社区贡献力量。

a8cb50ed455e1300106a63195cd4d57b.png

扫一扫,使用和参与仓颉社区生态共建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值