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

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

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

40ab37f41708e32644a9dd4a57c0cfa8.png

1.2 关键特性

  • 生命周期管理

  • 图片处理特性

  • 并行文件系统的权限配置

  • 在线解压

  • 桶策略列表呈现方式优化

  • CDN自动刷新

  • 支持镜像回源

  • 持为对象设置WORM策略

  • 服务端加密,支持SSE-OBS,SM4服务端加密方式

02

总体设计

6954ea0ad12d9b29845794c836d3c1e1.png

2.1 接口层

提供了一个统一的访问入口,所有的请求都通过这一层进入OBS客户端

2.2 服务层

  • 客户端加密模块:在本地进行数据加密,将加密后结果发送至OBS服务器,同时将加密方法与解密所需的必要辅助信息存储到对象元数据中。在下载时OBS SDK会依据存储在对象元数据中的解密辅助信息进行数据解密,直接返回解密后结果。  

  • 大文件分段模块:对于较大文件上传,可以切分成段上传,从而提高吞吐量

  • 传输进度模块:设置数据传输接口来获取上传下载的进度

2.3 解析层

  • 请求数据处理:根据接口入参组装成服务端所需数据结构

  • 报文解析模块:解析服务端返回的报文,整理映射数据返回给应用

2.4 通信层

创建HTTP连接服务端,发送请求报文和收取响应报文

2.5 OBS客户端处理流程

1983f1b55689e53cae98cb6b2b7d9644.png

1. 应用通过调用obs sdk接口访问client模块

2. 将接口入参通过requestHandler进行数据组装,请求体报文拼接完成后通过action模块发送给服务端

3. 服务端处理完成,返回报文经由responseHandler解析映射成数据结构通过client传递给应用

03

OBS仓颉版客户端使用

3.1 桶创建

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

807f49970e53f9dfd8d725089bb342c9.png

3.2 对象上传

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

778eac868b3625b016ba674fe8cb3a0f.png

3.3 范围下载

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

a405802039f2977465cdf136da6fec20.png

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性能测试

测试用例

588f91dc65a19e817601c1b078b79571.png

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

3139

487ms

16.62ms

30

3分钟

162ms

8169ms

详情结果图

59bf6d42d511a88569f2268d81705de6.png

仓颉性能测试

测试用例

78320847a63d9aab61abe2160cdf4208.png

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

3810

260ms

20.51ms

30

3分钟

121ms

3381ms

详细结果图

c6d26a06c1b89f54f4d6f89a4aa8aefe.png

测试结果分析

总请求数

Java接口:3139次

仓颉接口:3810次

分析:Java接口与仓颉接口的总请求数相差接近七百,测试期间两种接口的请求量仓颉处理更多。

平均响应时间

Java接口:487ms

仓颉接口:260ms

分析:仓颉接口的平均响应时间略低于java接口,仓颉接口的整体响应速度更快。

每秒接口请求数

Java接口:16.62次/秒

仓颉接口:20.51次/秒

分析:两种接口在每秒接口请求数上相差不大,处理并发请求时的能力相近。

最小响应时间

Java接口:162ms

仓颉接口:121ms

分析:仓颉接口的最小响应时间明显低于Java接口,仓颉接口的响应速度更快。

最大响应时间

Java接口:8169ms

仓颉接口:3381ms

分析:仓颉接口的最大响应时间远低于java接口,仓颉接口在处理复杂或异常情况时的性能更稳定。

测试总结

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

在每秒接口请求数方面,Java接口与仓颉接口表现相近,说明它们在处理并发请求时具  有相近的能力。

在平均响应时间方面,仓颉接口略优于java接口,整体响应速度更快。

在最小响应时间方面,仓颉接口表现出色。‍

下载桶中文件

从桶中正确下载文件。测试下载文件的速度,评估下载性能。测试并发下载文件时的性  能表现。

JAVA性能测试65059a63c1f3cc5c0c0b0cab6ebbb5b9.png

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

3591

179ms

18.93

30

3分钟

63

10526

详细结果图

6e02268ee480b023e822dd51f26cc334.png

仓颉性能测试fcf8691c4f547835708cf81ba8367275.png

性能列表

总请求数

平均响应时间

每秒接口请求数

并发数

持续时间

最小响应时间

最大响应时间

4190

121ms

22.47

20

3分钟

61

1585

详细结果图

45cc731f803fa2979b1f675b57598103.png

测试结果分析

总请求数

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等组件均全面融入仓颉语言生态,提供了仓颉语言客户端支持。简化了企业级应用向仓颉开发环境的迁移流程,不仅让企业能够充分利用仓颉语言的高效、安全及灵活性,还促进了现有中间件架构与仓颉语言环境的无缝融合与效能提升,为企业数字化转型注入了新的活力。

68e969e83b131cc92fab06b6f8f423af.png

c9a754b6f9b8365bc858b459b50c3a14.png

结语

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

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

62a70f2a8eec022ce2b81e20d7ab3073.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3268667.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Canvas生成动画---显示一组彩色气泡

一、JS版本 <!--* Author: LYM* Date: 2024-07-26 13:51:47* LastEditors: LYM* LastEditTime: 2024-07-26 16:14:40* Description: Please set Description --> <!DOCTYPE html> <html> <head><title>canvas动态气泡</title><style&g…

Spring Boot的Web开发

目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…

Spark+实例解读

第一部分 Spark入门 学习教程&#xff1a;Spark 教程 | Spark 教程 Spark 集成了许多大数据工具&#xff0c;例如 Spark 可以处理任何 Hadoop 数据源&#xff0c;也能在 Hadoop 集群上执行。大数据业内有个共识认为&#xff0c;Spark 只是Hadoop MapReduce 的扩展&#xff08…

22 Python常用内置函数——枚举

enumerate() 函数用来枚举可迭代对象中的元素&#xff0c;返回可迭代的 enumerate 对象&#xff0c;其中每个元素都是包含索引和值的元组。 print(enumerate(abcd)) print(list(enumerate(abcd))) # 枚举字符串中的元素 print(list(enumerate([hello, world]))) # 枚举列表中…

【数据结构】:大厂面试经典链表OJ题目详解

反转链表 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路解透 本题就是通过不停地将最先的 head 节点位置的后一位插到最前面&#xff0c;完成链表的反转 本题需要两个节点变量 cur&#xff1a;其任务就是定位到原 head 节点位置的前一位&#xff0c;然后将自己…

百日筑基第二十八天-23种设计模式-行为型总汇

百日筑基第二十八天-23种设计模式-行为型总汇 文章目录 百日筑基第二十八天-23种设计模式-行为型总汇前言模板方法模式简介模板方式的特点模板方法模式结构类图模板方式模式案例分析模板方法模式应用源码分析模板方法模式的注意事项和细节 迭代器模式迭代器模式结构类图迭代器模…

git配置环境变量

一.找到git安装目录 打开此git安装目录下的bin文件&#xff0c;复制此文件路径 二.配置环境变量 2.1 右键点击此电脑的属性栏 2.2 点击高级系统配置 2.3 点击环境变量 2.4 按图中步骤进行配置 三.配置完成 win r 输入cmd打开终端 终端页面中输入 git --version 如图所示…

给定日期计算时间(2025新年倒计时)

目录 1.安装所需安装包 2.查看安装包是否安装成功 ​ 3.使用 Pandas 读取数据文件 4.定义图像背景 5.matplotlib输出 6.当前指定格式时间 7.2025新年倒计时 1.安装所需安装包 pip install 包名 2.查看安装包是否安装成功 python -m pip list ​ 3.使用 Pandas 读取数…

深度解析Linux-C——结构体(初始化,结构体数组,结构体大小,位段操作,联合体,内存对齐,C的预处理,宏和带参宏,条件编译)

目录 结构体的三种初始化 结构体的两种引用 结构体数组 结构体大小 结构体实现位段操作 联合体 内存对齐 C的预处理 带参宏 条件编译 结构体的三种初始化 定义如下结构体 struct student {char name[100]; int age; float height; } ; 1、定义变量时初始化 s…

Redis从入门到超神-(十二)Redis监听Key的过期事件

前言 试想一个业务场景&#xff0c;订单超过30分钟未支付需要做自动关单处理,修改订单状态&#xff0c;库存回退等&#xff0c;你怎么实现&#xff1f;方案一&#xff1a;可以使用定时任务扫表&#xff0c;通过支付状态和下单时间来判断是否支付过期。但是这样的方案是非常消耗…

推荐一款.NET开源、简洁易用的Windows桌面小说阅读应用

前言 今天大姚给大家分享一款.NET开源、免费、简洁易用的Windows桌面小说阅读应用(是原生的 Windows 应用&#xff0c;为 Windows 11 系统设计)&#xff1a;CleanReader.Desktop。 该应用适合喜欢阅读网文或者是本地轻量阅读的用户。 系统要求 操作系统&#xff1a;Windows 11…

Llama + Dify,在你的电脑搭建一套AI工作流

theme: smartblue 点赞 关注 收藏 学会了 本文简介 最近字节在推Coze&#xff0c;你可以在这个平台制作知识库、制作工作流&#xff0c;生成一个具有特定领域知识的智能体。 那么&#xff0c;有没有可能在本地也部署一套这个东西呢&#xff1f;这样敏感数据就不会泄露了&…

Linux之基础IO(下)

目录 缓冲区的概念 深入理解文件系统 创建文件的整个过程 软链接 硬链接 上一节课我们学习了基础IO中的文件的读写操作&#xff0c;以及文件描述符的概念和重定向的基本原理&#xff0c;本期我们继续进行基础IO的学习。 缓冲区的概念 在讲缓冲区之前&#xff0c;大家先看…

Redis实战篇(黑马点评)笔记总结

一、配置前后端项目的初始环境 前端&#xff1a; 对前端项目在cmd中进行start nginx.exe&#xff0c;端口号为8080 后端&#xff1a; 配置mysql数据库的url 和 redis 的url 和 导入数据库数据 二、登录校验 基于Session的实现登录&#xff08;不推荐&#xff09; &#xf…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

使用 Windows 应用程序 SDK 构建下一代应用程序

微软面临的最大问题之一是如何让 Windows 再次成为吸引开发者的平台。无论用户使用什么设备和操作系统&#xff0c;都可以很容易地将 Web 前端放在支持桌面和移动用户的云原生应用程序上。 我们处在一个奇怪的境地&#xff0c;唯一能利用最新 PC 硬件的应用程序是 Office、Phot…

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑤ | 11.13 - 11.14

前言 第11章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于10大管理的内容&#xff0c;学习要以教材为准。本章上午题分值预计在15分。 目录 11.13 制定预算 11.13.1 主要输入 11.13.2 主要输出 11.14 规划质量管理 11.14.1 主要输入 11.14.2 主要工…

HTML前端面试题之<iframe>标签

面试题&#xff1a;iframe 标签的作用是什么?有哪些优缺点 ? 讲真&#xff0c;刷这道面试题之前我根本没有接触过iframe&#xff0c;网课没讲过&#xff0c;项目实战没用过&#xff0c;但却在面试题里出现了&#xff01;好吧&#xff0c;我只能说&#xff1a;前端路漫漫&…

数据挖掘-数据预处理

来自&#x1f96c;&#x1f436;程序员 Truraly | 田园 的博客&#xff0c;最新文章首发于&#xff1a;田园幻想乡 | 原文链接 | github &#xff08;欢迎关注&#xff09; 文章目录 3.3.1 数据的中心趋势平均数和加权平均数众数&#xff0c;中位数和均值描述数据的离散程度 &a…

快速搞定分布式RabbitMQ---RabbitMQ进阶与实战

本篇内容是本人精心整理&#xff1b;主要讲述RabbitMQ的核心特性&#xff1b;RabbitMQ的环境搭建与控制台的详解&#xff1b;RabbitMQ的核心API&#xff1b;RabbitMQ的高级特性;RabbitMQ集群的搭建&#xff1b;还会做RabbitMQ和Springboot的整合&#xff1b;内容会比较多&#…