01
关于仓颉原生S3客户端
Amazon Simple Storage Service(Amazon S3)是一项对象存储服务,在可扩展性、数据可用性、安全性和能效方面业界领先。并且现在国内的对象存储服务提供商基本都支持S3协议,所以对于那些需要使用S3存储协议的业务系统, 提供一个仓颉原生的S3客户端SDK,支持同步、异步调用模式的客户端成为当务之急。仓颉S3客户端 s3client4cj项目已经开源并发布到仓颉社区,特性为:
- 支持 AWS Signature Version 2- 支持 AWS Signature Version 4- 支持预签名 URL (Presigned URL)- 支持 MD5/SHA1/SHA256 的 Checksum- 支持 SHA1/SHA256 的 Trailing Checksum项目开源地址:https://gitcode.com/Cangjie-TPC/s3-sdk/overview
提供创建到S3存储服务的连接,提供执行S3命令的同步、异步等方法。S3Action:提供所有S3Action的抽象,定义Action执行的共用逻辑。S3Retry: 提供重试能力,通过retryPolicy和backoffPolicy来控制要不要重试以及2次重试之间的间隔时间。S3Future: 提供统一的同步/异步调用接口。将S3Request转换为HttpRequest,并将S3对象转换为XML报文作为HttpRequest的Body,用于发送请求。
将HttpResponse转换为S3Response,并将HttpResponse Body的XML报文转换为S3对象。通过仓颉自带的HttpClient和S3存储服务通信。支持TLS通信。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
默认连接到https://s3.cn-north-1.amazonaws.com.cn2.2 桶创建 (异步)
性能测试
性能测试时使用一台机器,同时运行MinIO服务和客户端,机器的配置如下:· 操作系统:Ubuntu 22.04.4 LTS· CPU:Intel(R) Xeon(R) Gold 6430· MinIO版本:RELEASE.2024-06-29T01-20-47Z (go1.22.4 linux/amd64)服务端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的内存占用较小。
为了测试纯客户端性能,提供了MockHttpClient,单线程的循环测试, 不实际发送 HTTP 请求, 主要测试除 HTTP 请求之外的代码耗时。
测试结果,在无实际访问S3服务后端的情况下,Cangjie的S3客户端性能略优于Java版本的实现。
共建仓颉生态
基于仓颉语言完备的产品文档和先进的开发工具链,团队迅速完成了仓颉S3客户端的开发和测试工作,达到了Java语言S3客户端的同等能力。通过此次为社区贡献仓颉原生S3客户端的探索与实践,我们深刻体会到了仓颉编程语言的多重优势:
1.拥有现代编程语言的核心特性,如类型推断、自动内存管理以及元编程等,使得编程更加高效和灵活。2.强大的运行时安全性,从根本上消除了空指针的隐患,保障了代码的稳健性。3.易于扩展,仓颉的扩展功能(Extensions)允许为现有类添加新功能,无需继承或使用装饰模式,使代码简洁、易读,且维护性更好。4.支持轻量级线程模型,多线程高IO场景具有较好的性能表现。6.内置诊断工具,极大地方便了性能优化和问题排查。仓颉生态的持续发展仍需我们共同努力,我们诚挚地呼吁更多的开发者加入仓颉社区,共同为仓颉生态的建设贡献自己的力量。
关于团队
该团队为普元信息技术股份有限公司中间件系列产品的开发团队。普元信息技术股份有限公司(科创板股票代码:688118)是全栈式中间件领导者,领先的数据治理和低代码技术提供商。普元信息积极拥抱仓颉语言。普元信息中间件系列产品,包括分布式配置中心,S3,OBS等组件均全面融入仓颉语言生态,提供了仓颉语言客户端支持。简化了企业级应用向仓颉开发环境的迁移流程,不仅让企业能够充分利用仓颉语言的高效、安全及灵活性,还促进了现有中间件架构与仓颉语言环境的无缝融合与效能提升,为企业数字化转型注入了新的活力。
仓颉编程语言是一个支持高效、安全、全场景应用开发的现代编程语言,具有强安全、高性能、高效率、全场景等特点。Cangjie-TPC(Third Party Components)用于汇集基于仓颉编程语言开发的开源三方库,帮助开发者方便、快捷、高质量构建仓颉程序。
仓颉生态的持续发展仍需我们共同努力,我们诚挚地呼吁更多的开发者加入仓颉社区,共同为仓颉生态的建设贡献自己的力量。普元将携手华为持续为仓颉社区贡献力量。
社区地址:
Cangjie主仓:
https://gitcode.com/Cangjie
Cangjie-TPC:
https://gitcode.com/Cangjie-TPC
本文作者:王文斌,普元资深中间件架构师,主导参与多个中间件产品的架构设计,对云原生、微服务架构研究深入,熟练掌握微服务相关的众多开源组件。
点击阅读原文,了解仓颉社区👇