华为云OBS
华为云对象存储服务(Object Storage Service,简称OBS)是华为云提供的一个高可靠、高安全、高可扩展的云存储服务。它允许用户在云上存储和管理海量数据,如图片、视频、文档、备份文件等。OBS 可以用作数据备份、文件共享、大数据存储、以及静态网站托管等多种用途。
OBS 的主要特点包括:
- 高可靠性:OBS 提供了 99.9999999999%(12 个 9)的数据持久性,通过多副本存储保障数据安全。
- 高安全性:提供多种访问控制策略和权限管理机制,支持加密传输和加密存储,保障数据的隐私性和安全性。
- 高性能:OBS 支持大数据量的高效传输和处理,具备低延迟和高吞吐量的特点。
- 自动扩展:存储空间可以根据需求动态扩展,满足不同业务场景下的存储需求。
- 多协议支持:支持 HTTP/HTTPS 协议,通过 RESTful API 进行数据操作,并兼容 S3 API。
常见的使用场景:
- 数据备份与恢复:企业可以将重要数据备份到 OBS,并在需要时进行恢复。
- 静态网站托管:OBS 可以直接托管静态网站,提供高可用的访问。
- 大数据分析:OBS 支持大规模数据的存储,便于大数据分析和处理。
- 视频点播和直播:可以将大量视频文件存储在 OBS 中,并通过内容分发网络(CDN)加速用户访问。
阿里云OSS
阿里云对象存储服务(Object Storage Service,简称OSS)是阿里云提供的一种海量、安全、低成本、高可靠的云存储服务。与华为云的OBS类似,OSS 用于存储和管理各种类型的非结构化数据,例如图片、视频、音频、日志文件、备份数据等。
OSS 的主要特点包括:
- 高可靠性:OSS 提供 99.9999999999%(12 个 9)的数据持久性,通过多副本机制和数据校验来保证数据的高可靠性。
- 高安全性:支持多种数据加密方式,包括服务端加密和客户端加密,提供访问控制策略(ACL)和权限管理来保护数据安全。
- 弹性扩展:无需预估存储容量,可以根据需要自动扩展存储空间,适应业务增长。
- 多种存储类型:提供标准存储、低频访问存储、归档存储和冷归档存储,用户可以根据数据的访问频率和生命周期选择合适的存储类型,以降低成本。
- 全球加速:通过阿里云全球加速服务,可以让 OSS 中的数据在全球范围内实现快速访问。
- 多协议支持:OSS 提供丰富的 API,支持通过 RESTful API 和 SDK 进行数据操作,并且兼容 Amazon S3 API。
常见的使用场景:
- 静态资源托管:OSS 常用于存储和分发网站的静态资源,如图片、CSS、JS 文件等,配合 CDN 可以加速全球访问。
- 备份和恢复:可以将企业的核心数据备份到 OSS,并且支持多种备份和恢复方案。
- 大数据分析:OSS 作为大数据存储的核心,支持与阿里云大数据分析工具的无缝集成,便于数据分析处理。
- 视频点播和直播:OSS 可以存储和分发大规模的视频文件,支持点播和直播场景。
华为云OMS
华为云OMS(Object Management Service,对象管理服务)是华为云提供的一项与对象存储(OBS)紧密集成的服务。OMS 主要用于实现跨云、跨区域的数据迁移和同步,帮助用户将数据从本地存储、其他云平台或华为云的一个区域迁移到另一个区域的对象存储中。
OMS 的主要功能和特点包括:
- 跨云迁移:OMS 支持将数据从其他云服务提供商(如 Amazon S3、Azure Blob Storage 等)迁移到华为云的 OBS,也可以从华为云的 OBS 迁移到其他云平台。
- 跨区域同步:OMS 可以在华为云不同区域之间实现数据的实时或定时同步,帮助用户在全球范围内管理和分发数据。
- 数据增量同步:OMS 支持增量同步功能,只同步变化的数据,节省带宽和时间成本。
- 多种迁移方式:OMS 支持一次性迁移和定期同步两种方式,用户可以根据需求选择合适的方式来管理数据迁移。
- 高安全性:OMS 在数据迁移和同步过程中提供加密传输,确保数据在网络传输中的安全性。
- 简单易用:通过华为云管理控制台,用户可以直观地配置迁移任务,并监控迁移进度。
常见的使用场景:
- 云间迁移:企业需要将存储在其他云服务提供商的数据迁移到华为云的场景,可以通过 OMS 实现快速、可靠的迁移。
- 跨区域灾备:为确保业务连续性,企业可以使用 OMS 将数据同步到不同的区域,作为灾难恢复的备份。
- 全球数据分发:在全球各地有业务需求的企业,可以通过 OMS 实现数据在全球多个区域的同步,提升数据访问速度和用户体验。
引入依赖
//华为云OBS implementation 'com.huaweicloud.sdk:huaweicloud-sdk-obs:3.1.109' //华为云OMS implementation 'com.huaweicloud.sdk:huaweicloud-sdk-oms:3.1.109'
实现代码:
package com.fdw.algorithm.HWCloud;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.oms.v2.region.OmsRegion;
import com.huaweicloud.sdk.oms.v2.*;
import com.huaweicloud.sdk.oms.v2.model.*;
import java.util.List;
import java.util.ArrayList;
public class CreateTaskSolution {
public static void main(String[] args) {
//迁移方式,object
String taskType = "object";
//源对象存储,阿里云OSS
String srcCloudType = "Aliyun";
String srcAK = "LTAI5tH144yw7Ybpn4g7i3hi";
String srcSK = "Nu3k6qMXgbHBkoLj2QBALmNqT3pzmI";
String srcBucket = "qcy-test-1";
String srcRegion = "cn-beijing";
//目标对象存储,华为云OBS
String tarAK = "VI8ANMNGWZUWXJV8WMKW";
String tarSK = "hIAb2jwgPEHTYknEMLml5DRqGSMLxRY66cHzd8D2";
String tarBucket = "qcytest1";
String tarRegion = "cn-north-4";
String tarPerfix = "fdw/";
//生成client
ICredential auth = new BasicCredentials()
.withAk(tarAK)
.withSk(tarSK);
OmsClient client = OmsClient.newBuilder()
.withCredential(auth)
.withRegion(OmsRegion.valueOf(tarRegion))
.build();
//迁移对象路径集合
List<String> listSrcNodeObjectKey = new ArrayList<>();
listSrcNodeObjectKey.add("22905c52-a956-4679-9b74-9ac247c80317/ddd.jpg");
//构造迁移任务请求体
SrcNodeReq srcNodebody = new SrcNodeReq();
srcNodebody.withCloudType(srcCloudType)
.withRegion(srcRegion)
.withAk(srcAK)
.withSk(srcSK)
.withBucket(srcBucket)
.withObjectKey(listSrcNodeObjectKey);
DstNodeReq dstNodebody = new DstNodeReq();
dstNodebody.withAk(tarAK)
.withSk(tarSK)
.withBucket(tarBucket)
.withRegion(tarRegion)
.setSavePrefix(tarPerfix);
CreateTaskReq body = new CreateTaskReq();
body.withEnableFailedObjectRecording(true);
body.withDescription("SDK测试");
body.withEnableKms(false);
body.withDstNode(dstNodebody);
body.withSrcNode(srcNodebody);
body.withTaskType(CreateTaskReq.TaskTypeEnum.fromValue(taskType));
CreateTaskRequest request = new CreateTaskRequest();
request.withBody(body);
try {
//创建迁移任务
CreateTaskResponse response = client.createTask(request);
System.out.println(response.toString());
} catch (ConnectionException | RequestTimeoutException e) {
e.printStackTrace();
} catch (ServiceResponseException e) {
e.printStackTrace();
System.out.println(e.getHttpStatusCode());
System.out.println(e.getRequestId());
System.out.println(e.getErrorCode());
System.out.println(e.getErrorMsg());
}
}
}