普元开源OBS仓颉版客户端,相较于Java实现桶创建接口平均响应时长缩小46.8%

科技   科技   2024-07-26 15:01   上海  

关于作者:许飞锋,资深软件工程师,参与公司多个核心产品的设计与开发,对中间件相关技术及组件研究较多,对仓颉语言特性及神农框架理解较深入。


01

关于OBS仓颉版客户端

1.1 组件定位
对象存储服务软件开发工具包(OBS SDK,Object Storage Service Software Development Kit)是对OBS服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用OBS SDK提供的接口函数即可实现使用OBS服务业务能力的目的。
项目开源地址:https://gitcode.com/Cangjie-TPC/oss-sdk/overview

1.2 关键特性
  • 生命周期管理
  • 图片处理特性
  • 并行文件系统的权限配置
  • 在线解压
  • 桶策略列表呈现方式优化
  • CDN自动刷新
  • 支持镜像回源
  • 持为对象设置WORM策略
  • 服务端加密,支持SSE-OBS,SM4服务端加密方式

02

总体设计

2.1 接口层

提供了一个统一的访问入口,所有的请求都通过这一层进入OBS客户端
2.2 服务层
  • 客户端加密模块:在本地进行数据加密,将加密后结果发送至OBS服务器,同时将加密方法与解密所需的必要辅助信息存储到对象元数据中。在下载时OBS SDK会依据存储在对象元数据中的解密辅助信息进行数据解密,直接返回解密后结果。  
  • 大文件分段模块:对于较大文件上传,可以切分成段上传,从而提高吞吐量
  • 传输进度模块:设置数据传输接口来获取上传下载的进度
2.3 解析层
  • 请求数据处理:根据接口入参组装成服务端所需数据结构
  • 报文解析模块:解析服务端返回的报文,整理映射数据返回给应用
2.4 通信层
创建HTTP连接服务端,发送请求报文和收取响应报文
2.5 OBS客户端处理流程

1. 应用通过调用obs sdk接口访问client模块
2. 将接口入参通过requestHandler进行数据组装,请求体报文拼接完成后通过action模块发送给服务端
3. 服务端处理完成,返回报文经由responseHandler解析映射成数据结构通过client传递给应用


03

OBS仓颉版客户端使用

3.1 桶创建
OBS桶是对象的容器,上传的文件都将以对象的形式存放在桶中

3.2 对象上传
用户操作的基本数据单元是对象。OBS cangjie SDK提供对象上传接口

3.3 范围下载
下载对象的其中一部分数据,可以使用范围下载,下载指定范围的数据

04

性能测试

4.1 测试环境
操作系统:Debian GNU/Linux
版本:6.1.0-17-amd64
压测工具:apifox
压测条件:30个并发、持续3分钟
4.2 测试目的
本测试是验证在Java和仓颉,接口进行压力测试,以验证其在高并发请求下的稳定性、性能和响应时间。通过模拟大量用户同时访问接口的场景,测试其处理能力、资源消耗及异常处理能力。
4.3 测试指标
1. 并发请求数:模拟不同数量的并发请求,观察接口的响应情况。
2. 响应时间:记录接口在不同并发请求数下的平均响应时间、最大响应时间和最小响应时间。
3. 错误率:统计接口A在测试过程中的错误请求数,计算错误率。
4. 每秒接口请求数:每秒接口请求数是指在单位时间(秒)内,接口能够成功处理的请求数量。反映了接口的吞吐能力和处理速度。
5. 平均响应时间:平均响应时间是指所有请求从发送到接收响应所花费的平均时间。反映了接口处理请求的效率和用户等待时间。
4.4 测试用例
创建桶
验证创建桶接口的响应速度:测试接口响应时间,确保在可接受范围内,满足性能要求。
JAVA性能测试
测试用例

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

3139

487ms

16.62ms

30

3分钟

162ms

8169ms

详情结果图

仓颉性能测试
测试用例

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

3810

260ms

20.51ms

30

3分钟

121ms

3381ms

详细结果图

测试结果分析
总请求数
Java接口:3139次
仓颉接口:3810次
分析:Java接口与仓颉接口的总请求数相差接近七百,测试期间两种接口的请求量仓颉处理更多。
平均响应时间
Java接口:487ms
仓颉接口:260ms
分析:仓颉接口的平均响应时间略低于java接口,仓颉接口的整体响应速度更快。
每秒接口请求数
Java接口:16.62次/秒
仓颉接口:20.51次/秒
分析:两种接口在每秒接口请求数上相差不大,处理并发请求时的能力相近。
最小响应时间
Java接口:162ms
仓颉接口:121ms
分析:仓颉接口的最小响应时间明显低于Java接口,仓颉接口的响应速度更快。
最大响应时间
Java接口:8169ms
仓颉接口:3381ms
分析:仓颉接口的最大响应时间远低于java接口,仓颉接口在处理复杂或异常情况时的性能更稳定。
测试总结
通过本次测试对比,我们可以得出以下结论:
在每秒接口请求数方面,Java接口与仓颉接口表现相近,说明它们在处理并发请求时具  有相近的能力。
在平均响应时间方面,仓颉接口略优于java接口,整体响应速度更快。
在最小响应时间方面,仓颉接口表现出色。
下载桶中文件
从桶中正确下载文件。测试下载文件的速度,评估下载性能。测试并发下载文件时的性  能表现。

JAVA性能测试

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

3591

179ms

18.93

30

3分钟

63

10526

详细结果图

仓颉性能测试

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

4190

121ms

22.47

20

3分钟

61

1585

详细结果图

测试结果分析

总请求数

Java接口:3593次
仓颉接口:4190次
分析:Java接口与仓颉接口的总请求数相差接近六百,测试期间两种接口的请求量仓颉处理更多。
平均响应时间
Java接口:179ms
仓颉接口:121ms
分析:仓颉接口的平均响应时间略低于java接口,仓颉接口的整体响应速度更快。
每秒接口请求数
Java接口:18.93/秒
仓颉接口:22.47 次/秒
分析:两种接口在每秒接口请求数上相差不大,处理并发请求时的能力相近。
最小响应时间
Java接口:63ms
仓颉接口:61ms
分析:仓颉接口的最小响应时间略低于Java接口,仓颉接口的响应速度更快。
最大响应时间
Java接口:10526ms
仓颉接口:1585ms
分析:仓颉接口的最大响应时间远低于java接口,仓颉接口在处理复杂或异常情况时的性能更稳定。
测试总结

通过本次测试对比,我们可以得出以下结论:

在每秒接口请求数方面,Java接口与仓颉接口表现相近,说明它们在处理并发请求时具有相近的能力。
在平均响应时间方面,仓颉接口略优于java接口,整体响应速度更快。桶创建接口平均响应时间缩小46.8%,下载桶中文件接口平均响应时间缩小32.4%。
在最小响应时间方面,仓颉接口表现出色,
仓颉系统在性能测试中表现出较高的性能优势,尤其在处理请求的速度和高并发场景下表现更佳。


05

共建仓颉生态

基于仓颉语言完备的产品文档和先进的开发工具链,我们团队迅速完成了OBS仓颉版客户端的开发和测试工作,达到了Java语言OBS客户端的同等能力。通过此次为社区贡献OBS仓颉版客户端的探索与实践,我们深刻体会到了仓颉编程语言的多重优势:
1.拥有现代编程语言的核心特性,如类型推断、自动内存管理以及元编程等,使得编程更加高效和灵活。
2.强大的运行时安全性,从根本上消除了空指针的隐患,保障了代码的稳健性。
3.易于扩展,仓颉的扩展功能(Extensions)允许为现有类添加新功能,无需继承或使用装饰模式,使代码简洁、易读,且维护性更好。
4.支持轻量级线程模型,多线程高IO场景具有较好的性能表现。
5.内置单元测试支持,易于开发高效稳定的代码。
6.内置诊断工具,极大地方便了性能优化和问题排查。

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


06

关于团队

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

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

结语


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


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

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


EAWorld
加速企业数字化转型
 最新文章