TOS对象存储实践 | 青训营

306 阅读2分钟

引言

本文由抖音背后存储流入手,从工程实践角度分析单机存储,分布式存储的利弊,比较分布式存储中文件HDFS和将数据分散存储到多个存储服务器上的对象存储TOS,并将这些分散的存储资源构成一个虚拟的存储设备,实际上数据分散的存储在企业的各个角落。

使用TOS

介绍

TOS使用restful风格的借口,原生http,不需要引入其他包,十分轻便。Restful API不再赘述。可扩展性,持久度,成本,可用性较优。

其中针对持久度问题提出解法Repllication,即多地存储,冷热备份,异地容灾,镜像冗余。 但仍会出现一致性,单机副本多昂贵的问题,于是提出EC存储编码算法,结合merge控制,能解决大部分问题。

实例


package main

import (
   "context"
   "fmt"
   "os"

   "github.com/volcengine/ve-tos-golang-sdk/v2/tos"
   "github.com/volcengine/ve-tos-golang-sdk/v2/tos/enum"
)


func main() {
   var (
      accessKey = "*** Provide your access key ***"
      secretKey = "*** Provide your secret key ***"
      
      endpoint = "https://tos-cn-beijing.volces.com"
      region   = "cn-beijing"
     
      bucketName = "*** Provide your bucket name ***"
   )

   client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))
   checkErr(err)
   
   storageClass := enum.StorageClassIa
 
   resp, err := client.CreateBucketV2(context.Background(), &tos.CreateBucketV2Input{
      Bucket:       bucketName,
      StorageClass: storageClass,
   })
   checkErr(err)
   fmt.Println("create bucket request id: ", resp.RequestID)
   fmt.Println("create bucket response status code: ", resp.StatusCode)
}

首先步骤是创建一个bucket桶,这里代码展示创建过程并且指定存储类型。访问密钥(accessKey)和密钥(secretKey),以及TOS的终端(endpoint)和区域(region),还有要创建的存储桶的名称(bucketName)构成主要变量。

tos.NewClientV2函数来创建客户端,并通过tos.WithRegiontos.WithCredentials指定区域和凭证。

而后连接TOS客户端即可。

TOS

MUtiupload接口:解决大文件上传问题 InitUpload : 参数: Bucket , Key 返回: Uploadld
UploadPart : 参数: Uploadld , Partld , Part 内容 返回:成功/失败 CompleteUpload :
参数: Uploadld , Partld Array 返回:成功/失败


还有呢

那么,TOS带来了什么呢,带来了存储成本的降低,数据的持久稳定,归结起来就是高可用。

整个大数据时代企业做开发,选择存储方式首先考虑的是易用性,单价,稳定性。这点在之前的工程实践文章可以看出,,bechmark的基准测试形式说到底1也是相当于做一个对比图标,按照指标对同类产品进行横向对比。

图片.png

性能性能性能,做算法也许只关注性能,有的做产品的只想效益,但要讲各个部分都考量到,做到尽量周到,就要像选存储方式一样,精分选出TOS。

参考

火山引擎https :。

CKV+异地容灾探索和实践