基于华为云OBS实现PicGo和Typora的完美结合【玩转华为云】
一.概念介绍
1.什么是对象存储
对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。
OBS 系统和单个桶都没有总数据容量和对象/文件数量的限制,为用户提供了超大存储容量的能力,适合存放任意类型的文件,适合普通用户、网站、企业和开发者使用。OBS 是一项面向 Internet 访问的服务,提供了基于 HTTP/HTTPS 协议的 Web 服务接口,用户可以随时随地连接到 Internet,通过 OBS 管理控制台或各种 OBS 工具访问和管理存储在 OBS 中的数据。此外,OBS 支持 SDK 和 OBS API 接口,可使用户方便管理自己存储在 OBS 上的数据,以及开发多种类型的上层业务应用。
在全球多区域部署了 OBS 基础设施,具备高度的可扩展性和可靠性,用户可根据自身需要指定区域使用 OBS,由此获得更快的访问速度和实惠的服务价格。
2.产品优势
在信息时代,企业数据直线增长,自建存储服务器存在诸多劣势,已无法满足企业日益强烈的存储需求。表 1向您详细展示了 OBS 与自建存储服务器的优劣势对比。
对比项 | OBS | 自建存储服务器 |
---|---|---|
数据存储量 | 提供海量的存储服务,在全球部署着 N 个数据中心,所有业务、存储节点采用分布式集群方式部署,各节点、集群都可以独立扩容,用户永远不必担心存储容量不够。 | 数据存储量受限于搭建存储服务器时使用的硬件设备,存储量不够时需要重新购买存储硬盘,进行人工扩容。 |
安全性 | 支持 HTTPS/SSL 安全协议,支持数据加密上传。同时 OBS 通过访问密钥(AK/SK)对访问用户的身份进行鉴权,结合 IAM 权限、桶策略、ACL、防盗链等多种方式和技术确保数据传输与访问的安全。支持敏感操作保护,针对删除桶等敏感操作,可开启身份验证。 | 需自行承担网络信息安全、技术漏洞、误操作等各方面的数据安全风险。 |
可靠性 | 通过五级可靠性架构,保障数据持久性高达 99.9999999999%,业务连续性高达 99.995%,远高于传统架构。 | 一般的企业自建存储服务器不会投入巨额的成本来同时保证介质、服务器、机柜、数据中心、区域级别的可靠性,一旦出现故障或灾难,很容易导致数据出现不可逆的丢失,给企业造成严重损失。 |
成本 | 即开即用,免去了自建存储服务器前期的资金、时间以及人力成本的投入,后期设备的维护交由 OBS 处理。按使用量付费,用多少算多少。阶梯价格,用的越多越实惠。 | 前期安装难、设备成本高、初始投资大、自建周期长、后期运维成本高,无法匹配快速变更的企业业务,安全保障的费用还需额外考虑。 |
3.应用场景
OBS 提供的大数据解决方案主要面向海量数据存储分析、历史数据明细查询、海量行为日志分析和公共事务分析统计等场景,向用户提供低成本、高性能、不断业务、无须扩容的解决方案。
- 海量数据存储分析的典型场景:PB 级的数据存储,批量数据分析,毫秒级的数据详单查询等
- 历史数据明细查询的典型场景:流水审计,设备历史能耗分析,轨迹回放,车辆驾驶行为分析,精细化监控等
- 海量行为日志分析的典型场景:学习习惯分析,运营日志分析,系统操作日志分析查询等
- 公共事务分析统计的典型场景:犯罪追踪,关联案件查询,交通拥堵分析,景点热度统计等
用户通过 DES 等迁移服务将海量数据迁移至 OBS,再基于提供的 MapReduce 等大数据服务或开源的 Hadoop、Spark 等运算框架,对存储在 OBS 上的海量数据进行大数据分析,最终将分析的结果呈现在 ECS 中的各类程序或应用上。
二.基础信息
1.obs 概览
2.obs 主页
对象存储服务 OBS
提供安全稳定、性能领先、无限弹性扩展的存储能力,降低使用成本,驱动千行百业数据价值变现
3.存储包和流量包的区别
存储包和流量包是两种不同的服务产品,通常用于云计算服务中。它们的主要区别在于服务的内容和用途。
存储包主要是指用于抵扣云存储服务中数据存储费用的产品。例如,在华为云对象存储 OBS 服务中,存储包可以用来抵扣 OSS 文件或 ECS 快照的存储费用 。用户购买存储包后,在有效期内,存储包会按照一定的规格(如每小时固定额度)抵扣相应的存储费用。如果存储使用量超出了存储包的抵扣额度,超出部分将按照按量付费的方式计算费用。
流量包则是指用于抵扣数据传输过程中产生的流量费用的产品。流量包可以进一步细分为多种类型,例如下行流量包、回源流量包等。下行流量包用于抵扣从云存储服务向外网传输数据产生的流量费用,而回源流量包则用于抵扣数据从云存储服务传输到内容分发网络(CDN)边缘节点产生的流量费用 。流量包通常有预设的有效期和额度,用户在使用过程中,相应的流量费用会被流量包抵扣,超出额度则按实际用量计费。
4.购买服务
存储包和流量包的区别
存储包:
华为云 obs 存储包还是比较便宜的,40G 一年只要 9 元
流量包:
华为云流量包一年 50G 流量,一年价格为 108 元
5.PicGo 配置 OBS
根据下图在 picgo 中配置 obs,我们就可以管理自己的图床了,再结合 typora,使博客对于图片的管理更加方便
三.Python-SKD
1.安装依赖
pip install pycryptodome==3.20.0
pip install esdk-obs-python --trusted-host pypi.org
2…列举桶对象
100 个以内对象:
from obs import ObsClient
import os
import traceback
# 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
# 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。
ak = 'ak'
sk = 'sk'
server = "https://obs.cn-east-3.myhuaweicloud.com"
# 创建obsClient实例
# 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
try:
bucketName = "kwan1"
# 指定列举对象的前缀
# prefix = 'test/'
prefix = None
# 指定单次列举对象个数为100
max_keys = 100
# 列举桶内对象
resp = obsClient.listObjects(bucketName, prefix, max_keys=max_keys, encoding_type='url')
# 返回码为2xx时,接口调用成功,否则接口调用失败
if resp.status < 300:
# print('List Objects Succeeded')
# print('requestId:', resp.requestId)
# print('name:', resp.body.name)
# print('prefix:', resp.body.prefix)
# print('max_keys:', resp.body.max_keys)
# print('is_truncated:', resp.body.is_truncated)
index = 1
for content in resp.body.contents:
# print('object [' + str(index) + ']')
print('key:', content.key)
# print('lastModified:', content.lastModified)
# print('etag:', content.etag)
# print('size:', content.size)
# print('storageClass:', content.storageClass)
# print('owner_id:', content.owner.owner_id)
# print('owner_name:', content.owner.owner_name)
index += 1
else:
# print('List Objects Failed')
print('requestId:', resp.requestId)
print('errorCode:', resp.errorCode)
print('errorMessage:', resp.errorMessage)
except:
print('List Objects Failed')
print(traceback.format_exc())
100个以上:
from obs import ObsClient
import os
import traceback
ak = 'ak'
sk = 'sk'
server = "https://obs.cn-east-3.myhuaweicloud.com"
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
try:
max_num = 1000
mark = None
index = 1
while True:
resp = obsClient.listObjects('kwan1', marker=mark, max_keys=max_num, encoding_type='url')
if resp.status < 300:
# print('requestId:', resp.requestId)
# print('name:', resp.body.name)
# print('prefix:', resp.body.prefix)
# print('max_keys:', resp.body.max_keys)
# print('is_truncated:', resp.body.is_truncated)
for content in resp.body.contents:
# print('object [' + str(index) + ']')
print('key:', content.key)
# print('lastModified:', content.lastModified)
# print('etag:', content.etag)
# print('size:', content.size)
# print('storageClass:', content.storageClass)
# print('owner_id:', content.owner.owner_id)
# print('owner_name:', content.owner.owner_name)
print(f'index:{index}')
index += 1
if resp.body.is_truncated is True:
mark = resp.body.next_marker
else:
break
else:
print('errorCode:', resp.errorCode)
print('errorMessage:', resp.errorMessage)
except:
import traceback
print(traceback.format_exc())
3.下载图片
import requests
# 图片的URL
image_url = 'https://kwan1.obs.cn-east-3.myhuaweicloud.com/zsb4UftyA5gKCQ8.png'
# 使用rfind找到最后一个'/'的位置
last_slash_index = image_url.rfind('/')
# 从'/'后面截取字符串作为图片名称
if last_slash_index != -1:
image_name = image_url[last_slash_index + 1:]
else:
image_name = image_url # 如果没有找到'/',则整个URL就是图片名称
print(image_name)
# 打开URL
response = requests.get(image_url, stream=True)
# 确保请求成功
if response.status_code == 200:
# 打开一个文件用于写入
with open(image_name, 'wb') as out_file:
# 写入内容
out_file.write(response.content)
else:
print('图片下载失败,状态码:', response.status_code)
- 点赞
- 收藏
- 关注作者
评论(0)