引言
本文由抖音背后存储流入手,从工程实践角度分析单机存储,分布式存储的利弊,比较分布式存储中文件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.WithRegion和tos.WithCredentials指定区域和凭证。
而后连接TOS客户端即可。
TOS
MUtiupload接口:解决大文件上传问题
InitUpload :
参数: Bucket , Key
返回: Uploadld
UploadPart :
参数: Uploadld , Partld , Part 内容
返回:成功/失败
CompleteUpload :
参数: Uploadld , Partld Array
返回:成功/失败
还有呢
那么,TOS带来了什么呢,带来了存储成本的降低,数据的持久稳定,归结起来就是高可用。
整个大数据时代企业做开发,选择存储方式首先考虑的是易用性,单价,稳定性。这点在之前的工程实践文章可以看出,,bechmark的基准测试形式说到底1也是相当于做一个对比图标,按照指标对同类产品进行横向对比。
性能性能性能,做算法也许只关注性能,有的做产品的只想效益,但要讲各个部分都考量到,做到尽量周到,就要像选存储方式一样,精分选出TOS。
参考
火山引擎https :。