利用COS全球加速的高效率传输实践

2021-01-31 20:03:49 浏览数 (1)

介绍

腾讯云对象存储 COS 的全球加速功能,借助腾讯全局流量调度的负载均衡系统,智能路由解析用户请求,选择最优网络访问链路,实现请求就近接入。利用全球分布的云机房,可帮助全球各地用户快速访问您的存储桶,提升您的业务访问成功率,进一步保障您的业务稳定和提升您的业务体验。此外 COS 的全球加速功能还可以实现数据上传加速和下载加速。

限制

Bucket类操作无法使用全球加速域名,如GetBucket。

如果使用加速域名有列出存储桶列表的需求,还是得使用源站域名。

架构

计费方式

国内流量费用只收取外网下行流量费,而全球加速域名会在国内流量费用上增加收取上行和下行加速流量费,国内加速费用和海外加速费用各不相同,具体如下

以北京bucket桶为例

公有云外网下行流量费

公有云国内加速流量费 (上下行相同)

公有云海外加速流量费 (上下行相同)

具体参考:https://buy.cloud.tencent.com/price/cos

配置方法

这里我们设想一种场景,我们的客户遍布全球各地,我们的存储桶创建在中国大陆北京集群,那么全球的客户都要向北京存储桶内访问和请求。我们希望海外用户使用全球加速域名访问,国内用户直接访问COS北京默认域名,这样既能保证很好的海外访问体验,也在国内节省一定的加速流量费用。

配置步骤介绍

步骤1:开启存储桶全球加速

存储桶>>域名与传输管理>>全球加速

步骤2:绑定自定义域名

存储桶>>域名与传输管理>>自定义源站域名

步骤3:设置DNSPOD

DNS解析>>我的域名

步骤4:设置线路解析

设置自定义域名分别cname到国内和国外两个COS域名,例如

国内 test.xxx.com cname wainsun-1XXX5742.cos.ap-beijing.myzijiebao.com

国外 test.xxx.com cname wainsun-1XXX5742.cos.accelerate.myzijiebao.com

这样我们就将国内请求和海外解析进行了分离。国内直接请求到北京集群域名,海外走全球加速域名。

全球各地域名解析测试验证

源站访问的是北京集群的bucket桶。在如下地点测试访问

步骤1:从重庆访问自定义域名

看到自定义域名cname到cos.ap-beijing.myzijiebao.com域名,且访问的IP为北京地域IP(120.53.196.26),说明是直接访问到北京bucket桶。

步骤2:从美国访问自定义域名

看到自定义域名cname到cos.accelerate.myzijiebao.com域名,且访问的IP为美国地域IP(49.51.43.170),说明是先访问到COS美国节点,然后从美国节点走专线到北京的bucket桶。

步骤3:从日本访问自定义域名

看到自定义域名cname到cos.accelerate.myzijiebao.com域名,且访问的IP为日本地域IP(150.109.201.88),说明是先访问到COS日本节点,然后从日本节点走专线到北京的bucket桶。

端调用方式

步骤1:JAVA

关键代码

//步骤1:实现 EndpointBuilder 接口中的两个函数 class SelfDefinedEndpointBuilder implements EndpointBuilder { public String buildGeneralApiEndpoint(String bucketName) { return String.format("%s.%s", "test", "colasun.com"); } }

SelfDefinedEndpointBuilder selfDefinedEndpointBuilder = new SelfDefinedEndpointBuilder(); ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing")); clientConfig.setEndpointBuilder(selfDefinedEndpointBuilder); COSClient cosclient = new COSClient(cred, clientConfig);

测试效果

步骤2:C#

关键代码

CosXmlConfig config = new CosXmlConfig.Builder() .SetConnectionTimeoutMs(60000) //设置连接超时时间,单位 毫秒 ,默认 45000ms .SetReadWriteTimeoutMs(40000) //设置读写超时时间,单位 毫秒 ,默认 45000ms .IsHttps(true) //设置默认 https 请求 .SetAppid(appid) //设置腾讯云账户的账户标识 APPID .SetRegion(region) //设置一个默认的存储桶地域 .SetHost("test.colasun.com") //输入自定义域名 .SetDebugLog(true) .Build(); //创建 CosXmlConfig 对象

测试效果

步骤3:NodeJS

关键代码

var cos = new COS({ SecretId: 'AKIDZxxxxxxxxxyFKLPUcdTZsNh', SecretKey: 'GPMxxxxxxxxxDhtx12rUvAIEyVtA', Domain: 'test.colasun.com', Protocol: 'http:', });

注意,nodejs默认使用https请求,如果使用自定义域名的话,目前COS控制台暂不支持证书托管,所以这里需要改为http协议

测试效果

步骤4:javascript

需要在实例化COS对象的时候加入自定义域名Domain test.colasun.com,示例如下

var cos = new COS({ getAuthorization: getAuthorization, Domain: 'test.colasun.com', Protocol: 'http:', });

测试效果,看到请求的域名已经是自定义域名的test.colasun.com

步骤5:python

在CosConfig中设置自定义域名的endpoint

secret_id = 'AKIDZ3LdvXXXXXXwEvWyFKLPUcdTZsNh' # 替换为用户的secret_id secret_key = 'GPM6ezIe1XXXXXXXhtx12rUvAIEyVtA' # 替换为用户的secret_key region = 'ap-beijing' # 替换为用户的region token = None # 使用临时密钥需要传入Token,默认为空,可不填 domain = 'test.colasun.com' scheme = 'http' config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Domain=domain,Scheme=scheme) # 获取配置对象 client = CosS3Client(config)

测试效果

步骤6:PHP

$secretId = "AKIDZ3LdvEihdxxxxxxxUcdTZsNh"; //"云 API 密钥 SecretId"; $secretKey = "GPM6ezIe1eDaxxxxxxxIEyVtA"; //"云 API 密钥 SecretKey"; $region = "ap-beijing"; //设置一个默认的存储桶地域 $domain = "test.colasun.com"; //设置自定义域名 $cosClient = new QcloudCosClient( array( 'region' => $region, 'schema' => 'http', //协议头部,默认为http 'domain' => $domain, 'credentials'=> array( 'secretId' => $secretId , 'secretKey' => $secretKey))); $local_path = "d:/test/3.mp4";

测试效果

步骤7:IOS

Objective-C

NSString *customDomain = @"test.colasun.com"; // 自定义加速域名 QCloudCOSXMLEndPoint *endpoint = [[QCloudCOSXMLEndPoint alloc] initWithLiteralURL:[NSURL URLWithString:customDomain]];

Swift

let endpoint = QCloudCOSXMLEndPoint.init(literalURL: NSURL.init(string: "test.colasun.com") as URL?);

参考文档:https://cloud.tencent.com/document/product/436/47636

步骤8:Android

String region = "ap-beijing"; // 您的存储桶地域 String customDomain = "test.colasun.com"; // 自定义域名 CosXmlServiceConfig cosXmlServiceConfig = new CosXmlServiceConfig.Builder() .isHttps(true) .setRegion(region) .setDebuggable(false) .setHostFormat(customDomain) // 修改请求的域名 .builder(); CosXmlService cosXmlService = new CosXmlService(context, cosXmlServiceConfig, credentialProvider);

步骤9:GO

核心代码

// 将 examplebucket-1250000000 和 COS_REGION修改为真实的信息 u, _ := url.Parse("http://test.colasun.com") //这里填写你的自定义域名 b := &cos.BaseURL{BucketURL: u} // 1.永久密钥 client := cos.NewClient(b, &http.Client{ Transport: &cos.AuthorizationTransport{ SecretID: "COS_SECRETID", SecretKey: "COS_SECRETKEY", }, })

工具调用方式

工具1:COSCMD

配置文件

[common] secret_id = AKIDA6wUmImTxxxxxtusZ2E8mG**** secret_key = TghWBCyf5LIxxxxxxdw1oRpytWk**** bucket = configure-bucket-1250000000 region = ap-chengdu max_thread = 5 part_size = 1 retry = 5 timeout = 60 schema = https verify = md5 anonymous = False ENDPOINT = cos.accelerate.myzijiebao.com #这里设置的是全球加速节点

注意:如果配置了ENDPOINT,那么region参数就会失效了

代码语言:javascript复制
注意:如果在命令行中强行指派-r参数,那么配置文件的ENDPOINT不会生效
coscmd -b examplebucket-1250000000 -r ap-beijing upload D:/picture.jpg /

-r参数优先级会高于配置文件参数优先级

工具2:COSBrowser

登录COSBrowser后在存储桶列表页,选中对应需要使用全球加速域名的存储桶,点击传输管理,可以对上传/下载操作选择不同的域名。

0 人点赞