当前位置: 首页 > news >正文

对象存储 COS 端到端质量系列——终端 COS SDK 网络优化

导语

COS SDK 提供了一系列网络优化功能,包括 DNS 解析优化、网络线路加速、弱网优化以及自定义网络层功能。 如果您对上传、下载等 COS 操作的成功率、延迟较为敏感,则可以使用本文档提供的方案进行 COS 访问的网络优化。

背景说明

在移动开发应用中,网络优化对于用户体验至关重要,因为移动网络固有的弱网问题、DNS问题、连接性能等等都相较于固定网络更为严重,因此,优化移动端网络,显的尤其重要。

方案概述

优化方案

方案一:DNS 解析优化

问题说明:

COS SDK 默认使用的是 LocalDNS,DNS 解析过程中可能会遇到解析异常、域名劫持、跨网访问等问题,导致上传下载等 COS 操作缓慢甚至失败。

解析异常:导致无法连接服务器,请求失败。

域名劫持:访问到非 COS 服务器,导致请求和响应失败。

跨网访问:导致网络请求缓慢、甚至请求超时失败。

优化方案:

1. 前往移动解析 HTTPDNS 控制台 开通,具体操作请参见 开通移动解析 HTTPDNS。

2. 在移动解析 HTTPDNS 控制台添加对应的 COS 域名 (<BucketName-APPID>.cos.<region>.myqcloud.com),具体操作请参见 添加域名。

3. 获取 HTTPDNS 配置信息,具体说明请参见 配置信息说明。

4. 请您参考 HTTPDNS SDK 配置 进行 HTTPDNS SDK 的集成和配置。COS SDK 默认自动配置了 SDK 接入业务方式,您在配置 HTTPDNS SDK 过程中无需关注 SDK 接入业务方式。

5. 通过 初始化 COS 服务 获取 CosXmlService,通过 addCustomerDNSFetch 方法接入 HTTPDNS。

cosXmlService.addCustomerDNSFetch(hostname ->{
String ips =MSDKDnsResolver.getInstance().getAddrByName(hostname);
String[] ipArr = ips.split(";");
if(0== ipArr.length){
returnCollections.emptyList();
}
List<InetAddress> inetAddressList =newArrayList<>(ipArr.length);
for(String ip : ipArr){
if("0".equals(ip)){
continue;
}
try{
InetAddress inetAddress =InetAddress.getByName(ip);inetAddressList.add(inetAddress);
}catch(UnknownHostException ignored){
}
}
return inetAddressList;
});

方案二:网络线路加速

问题说明:

腾讯云在全球很多地区部署了存储中心,客户可以选择性地启用这些存储中心。但即便如此,还是无法避免一些终端用户与存储中心距离间隔太远,以及部分客户存在跨地区甚至跨海访问的业务场景。长距离的数据访问通常就意味着更长的网络链路和更大的传输时延,而且一旦中间某一个环节出现网络抖动、丢包等问题,就会拉低整条链路的访问速度和成功率。

优化方案:

COS 全球加速

COS 全球加速功能的请求信息会通过腾讯云内网专线加速传输,不仅能实现请求的就近接入,还可以实现数据上传加速和下载加速。

1. 前往 COS 控制台 开启 COS 全球加速,具体操作请参见 开启 COS 全球加速。

2. 通过 COS SDK 中 CosXmlServiceConfig 进行开启 COS 全球加速。

String region ="ap-beijing";// 您的存储桶地域CosXmlServiceConfig cosXmlServiceConfig =newCosXmlServiceConfig.Builder()
.setRegion(region)
.setAccelerate(true)// 使用 COS 全球加速域名
.builder();CosXmlService cosXmlService =newCosXmlService(context, cosXmlServiceConfig,credentialProvider);

EdgeOne + COS 全球加速

该方式结合了 EdgeOne 和 COS 全球加速的优点:EdgeOne 边缘节点覆盖广,COS 全球加速内网加速回源。

1. 前往 EdgeOne 控制台 开通,具体操作请参见 开通 EdgeOne。

2. 在 EdgeOne 控制台单击添加站点,输入 COS 域名 (<BucketName-APPID>.cos.<region>.myqcloud.com),进入站点后进行域名管理添加域名时请选择对象存储源站S3兼容,在源站地址处填入 COS 全球加速域名(<BucketName-APPID>.cos.accelerate.myqcloud.com)。

​​

3. 开启 EdgeOne 的智能加速功能 。

4. 获取步骤2中的加速域名,该域名后续需要配置到 COS SDK 中。

5. 通过 COS SDK 中 CosXmlServiceConfig 进行加速域名的配置。

String region ="ap-beijing";// 您的存储桶地域
String eoDomain ="exampledomain.com";// eo 加速域名CosXmlServiceConfig cosXmlServiceConfig =newCosXmlServiceConfig.Builder()
.setRegion(region)
.setHost(eoDomain)// 配置加速域名
.addNoSignHeaders("Host")// EO 转发请求时 host 会变化,此处需要避免 host 签名
.builder();CosXmlService cosXmlService =newCosXmlService(context, cosXmlServiceConfig,credentialProvider);

方案三:弱网优化

问题说明:

尽管4G 和5G 网络的覆盖范围在不断扩大,但在许多地方,特别是偏远地区和室内环境,用户仍然可能会遇到网络信号弱或不稳定的情况。此外,即使在网络覆盖良好的地方,用户也可能会因为网络拥堵等原因遇到网络性能下降的问题。

在弱网环境下,可能会遇到以下问题:连接慢、数据传输慢、丢包率高、网络波动大,这些问题都会影响上传下载等 COS 操作的成功率和速度。

优化方案:

1. 前往 EdgeOne 控制台 开通,具体操作请参见 开通 EdgeOne。

2. 在 EdgeOne 控制台单击添加站点,添加对应的 COS 域名 (<BucketName-APPID>.cos.<region>.myqcloud.com)。进入站点后进行域名管理 添加域名时请选择对象存储源站

​​

3. 开启 EdgeOne 的 QUIC 功能,请参见 开启 QUIC。

4. 记录步骤2中的加速域名,该域名后续需要配置到 COS SDK 中。

5. 在 Gradle 文件中添加 QUIC 库依赖。

implementation 'com.qcloud.cos:quic:1.5.45'

6. 通过 COS SDK 中 CosXmlServiceConfig 进行自定义域名开启 QUIC

String region ="ap-beijing";// 您的存储桶地域
String eoDomain ="exampledomain.com";// eo加速域名CosXmlServiceConfig cosXmlServiceConfig =newCosXmlServiceConfig.Builder()
.setRegion(region)
.setHost(eoDomain)// 配置加速域名
.addNoSignHeaders("Host")// EO转发请求时host会变化,此处需要避免host签名
.enableQuic(true)// 开启 QUIC
.builder();CosXmlService cosXmlService =newCosXmlService(context, cosXmlServiceConfig,credentialProvider);

方案四:自定义网络层

问题说明:

如果 COS SDK 默认的网络实现不符合您的要求或者您的 APP 本身已经开发了完善的自定义网络库并做了相关的网络优化,则可以使用在 COS SDK 中自定义网络层的方式。

这是比较灵活的方式,采用这种方式优化的网络问题、优化效果、成本等均由开发者的自定义网络层决定。

优化方案:

1. 继承 NetworkClient 实现自定义网络 Client,实现网络请求的管理、配置等。

2. 继承 NetworkProxy 实现网络请求代理,实现具体的网络请求。

3. 通过 CosXmlServiceConfig 的 setCustomizeNetworkClient 方法配置 COS SDK。

方案五:SDK 内配置线路和协议的切换

问题说明:

为了提高 SDK 请求的成功率以及节省成本,SDK 提供了线路和协议切换策略的配置方法:

保守策略:先使用 COS 默认线路和默认的 https 协议进行请求,网络失败后自动使用加速线路和 quic 协议进行重试。

激进策略:先使用加速线路和 quic 协议进行请求,网络失败后自动使用 COS 默认线路和默认的 https 协议进行重试。

自定义策略:SDK 提供了配置请求网络线路和协议的方法,可以灵活的在业务层控制请求和切换的逻辑(例如根据网络质量自动切换)。

不配置切换策略,则直接使用方案二和方案三中配置的加速线路和弱网协议进行请求。

优化方案:

通过 COS SDK 中 CosXmlServiceConfig 的 setNetworkSwitchStrategy 方法进行保守和激进策略的配置。

String region ="ap-beijing";// 您的存储桶地域
String eoDomain ="exampledomain.com";// eo 加速域名
// 激进策略
CosXmlServiceConfig.RequestNetworkStrategy aggressiveStrategy =CosXmlServiceConfig.RequestNetworkStrategy.Aggressive;
// 保守策略
CosXmlServiceConfig.RequestNetworkStrategy conservativeStrategy =CosXmlServiceConfig.RequestNetworkStrategy.Conservative;CosXmlServiceConfig cosXmlServiceConfig =newCosXmlServiceConfig.Builder()
.setRegion(region)
.setHost(eoDomain)// 配置加速域名
.addNoSignHeaders("Host")// EO 转发请求时 host 会变化,此处需要避免 host 签名
.enableQuic(true)// 开启 QUIC
.setNetworkSwitchStrategy(aggressiveStrategy)// 配置切换策略为激进策略
//.setNetworkSwitchStrategy(conservativeStrategy) // 配置切换策略为保守策略
.builder();CosXmlService cosXmlService =newCosXmlService(context, cosXmlServiceConfig,credentialProvider);

通过请求基类 CosXmlRequest 的 setHost 和 setNetworkType 进行自定义策略的配置。

// 任何CosXmlRequest都支持这种方式,例如上传PutObjectRequest、下载GetObjectRequest、删除DeleteObjectRequest等
// 以下用上传进行示例
PutObjectRequest putRequest =newPutObjectRequest("examplebucket-1250000000","exampleobject.txt","本地文件路径");
String eoDomain ="exampledomain.com";// eo 加速域名
// 自定义配置具体的请求网络线路,设置null则走默认的COS域名线路
putRequest.setHost(eoDomain);
// 自定义配置QUIC协议
putRequest.setNetworkType(CosXmlRequest.RequestNetworkType.QUIC);
// 自定义配置默认的HTTPS协议
// putRequest.setNetworkType(CosXmlRequest.RequestNetworkType.OKHTTP);
// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档
TransferConfig transferConfig =newTransferConfig.Builder().build();
// 初始化 TransferManager
TransferManager transferManager =newTransferManager(cosXmlService, transferConfig);
COSXMLUploadTask uploadTask = transferManager.upload(putRequest,null);

实践建议

由于开发者业务方向和用户群各不相同,上述各优化方式均有一定的成本,下面对一些常见场景给出实践建议。

以下建议仅供参考,具体实践还需结合自身业务需求和成本预算进行决定。

国内用户:DNS 解析优化

海外用户:DNS 解析优化 + 网络线路加速

弱网环境:弱网优化

结语

通过上述网络优化的各种方式,可以帮助开发者提升移动应用中 COS 上传下载的网络性能和成功率,提高用户体验。

http://www.dtcms.com/a/341238.html

相关文章:

  • 开发中使用——鸿蒙特有的图片保存到相册的方式
  • 气泡水位计在水库大坝安全监测中的应用
  • 大语言模型研究进展
  • 【MAR】OSCNet+学习笔记
  • 机器学习总复习
  • Redis知识总结
  • IDEA:控制台中文乱码
  • 【JavaEE】多线程 -- 定时器
  • 无人机感知系统详解
  • Excel表格复制到word中格式错乱
  • 【Java】深入浅出Spring中的@Autowired:自动注入的奥秘
  • 机器翻译 (Machine Translation) 经典面试笔试50题(包括详细答案)
  • imx6ull-驱动开发篇29——Linux阻塞IO 实验
  • Java并发容器详解
  • 【LLIE专题】BEM:一对多映射,贝叶斯增强模型
  • Deepseek+python自动生成禅道测试用例
  • 将集合拆分成若干个batch,并将batch存于新的集合
  • WMS仓储管理系统如何解决仓库的呆滞库存
  • 鸿蒙安卓前端中加载丢帧:ArkWeb分析
  • 第5.7节:awk赋值运算
  • IPSEC安全基础
  • Qt 中最经典、最常用的多线程通信场景
  • TDengine IDMP 运维指南(数据导入导出)
  • WIN10/WIN11:无法下载所有必需的文件 0x80072EE2 0x20000(未解决)
  • C++ std::sort的应用总结
  • Unity 大量子弹和小怪碰撞检测优化
  • GSPO:Towards scalable reinforcement learning for language models
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型和EasyOCR实现汽车牌照动态检测和识别(C#代码,UI界面版)
  • 使用UUP dump制作windows preview镜像
  • 手机、汽车如何实现卫星直连