調(diào)研各個(gè)云廠商的對象存儲(chǔ)服務(wù)

0. What is & Why Object storage?

之前寫過一篇博客 why Object Storage

1. 對象存儲(chǔ)的 schema

雖然各家廠商的對象存儲(chǔ)服務(wù)都有差異,但 schema 基本一樣。
具體見 這篇文章 。摘錄如下:

image.png

Bucket

對象存儲(chǔ)呈現(xiàn)出來的是一個(gè)“桶”(bucket),你可以往“桶”里面放“對象(Object)”。這個(gè)對象包括三個(gè)部分:Key、Data、Metadata。

Key

可以理解文件名,是該對象的全局唯一標(biāo)識(shí)符(UID)。

Key是用于檢索對象,服務(wù)器和用戶不需要知道數(shù)據(jù)的物理地址,也能通過它找到對象。這種方法極大地簡化了數(shù)據(jù)存儲(chǔ)。

下面這行,就是一個(gè)對象的地址范例:


image.png

看上去就是一個(gè)URL網(wǎng)址。如果該對象被設(shè)置為“公開”,所有互聯(lián)網(wǎng)用戶都可以通過這個(gè)地址訪問它。

Data

也就是用戶數(shù)據(jù)本體。這個(gè)不用解釋了。

Metadata

Metadata叫做元數(shù)據(jù),它是對象存儲(chǔ)一個(gè)非常獨(dú)特的概念。

元數(shù)據(jù)有點(diǎn)類似數(shù)據(jù)的標(biāo)簽,標(biāo)簽的條目類型和數(shù)量是沒有限制的,可以是對象的各種描述信息。

舉個(gè)例子,如果對象是一張人物照片,那么元數(shù)據(jù)可以是姓名、性別、國籍、年齡、拍攝地點(diǎn)、拍攝時(shí)間等。

  • 元數(shù)據(jù)可以有很多

在傳統(tǒng)的文件存儲(chǔ)里,這類信息屬于文件本身,和文件一起封裝存儲(chǔ)。而對象存儲(chǔ)中,元數(shù)據(jù)是獨(dú)立出來的,并不在數(shù)據(jù)內(nèi)部封裝。

元數(shù)據(jù)的好處非常明顯,可以大大加快對象的排序,還有分類和查找。

其他常見的 Schema

Region 和 Endpoint

Region表示數(shù)據(jù)中心所在的地域,Endpoint表示對外服務(wù)的訪問域名。
例如:


image.png

詳細(xì)介紹可以看下阿里云 OSS 的文檔: 訪問域名和數(shù)據(jù)中心 (aliyun.com)

順便說下,這兩個(gè)字段沒做到“對開發(fā)者透明”,開發(fā)者用 oss sdk的時(shí)候要傳這兩個(gè)字段。

2. 對象存儲(chǔ)的一般架構(gòu)

image.png

圖片來自文章 https://www.modb.pro/db/104970
分布式系統(tǒng)的常見設(shè)計(jì),不展開了.

3. 常見功能

3.1. CRUD

值得一提的是,沒有 Update 操作

對象存儲(chǔ)雖然看上去很好很強(qiáng)大,但也不是沒有缺點(diǎn)。它最大的缺點(diǎn),和它的工作模式有關(guān)。
它是那種把整個(gè)數(shù)據(jù)取出來,修改,再放回去的模式,不支持直接在存儲(chǔ)上修改,哪怕只是加一行數(shù)據(jù),都不行。所以,它不適合存儲(chǔ)需要頻繁擦寫的數(shù)據(jù)(例如關(guān)系型數(shù)據(jù)庫的數(shù)據(jù))。

3.2. 分段上傳/分段下載

3.3. 分級(jí)存儲(chǔ),區(qū)分冷熱數(shù)據(jù)

他們通常會(huì)把存儲(chǔ)業(yè)務(wù)分為3個(gè)等級(jí),即標(biāo)準(zhǔn)型、低頻型、歸檔型。對應(yīng)的應(yīng)用場景如下:

  • 標(biāo)準(zhǔn)類型:移動(dòng)應(yīng)用 | 大型網(wǎng)站 | 圖片分享 | 熱點(diǎn)音視頻
  • 低頻訪問類型:移動(dòng)設(shè)備 | 應(yīng)用與企業(yè)數(shù)據(jù)備份 | 監(jiān)控?cái)?shù)據(jù) | 網(wǎng)盤應(yīng)用
  • 歸檔類型:各種長期保存的檔案數(shù)據(jù) | 醫(yī)療影像 | 影視素材

3.4. Security

3.4.1. 認(rèn)證

3.4.2. 鑒權(quán) (ACL、policy)

非常復(fù)雜,如果你去看云廠商文檔,那大概率是看不懂的。
推薦看 淺談云上攻防——對象存儲(chǔ)服務(wù)訪問策略評(píng)估機(jī)制研究

題外話: 怪不得云服務(wù)經(jīng)常會(huì)有“因?yàn)榕渲贸鲥e(cuò),導(dǎo)致出現(xiàn)安全問題、被黑客竊取數(shù)據(jù)”的情況,這些產(chǎn)品做的真讓人看不懂,配置出錯(cuò)是大概率事件。

另一個(gè)題外話: 怪不得最近安全廠商創(chuàng)業(yè)開始火起來了,一方面是出事多了、甲方怕了,另一方面,甲方靠自己搞不定這些復(fù)雜的細(xì)節(jié),需要由專家來給出整體性的解決方案

這里概括下重點(diǎn),詳細(xì)說明見上面的文章。

ACL

可以給存儲(chǔ)桶/Object 添加訪問控制規(guī)則。比如:


image.png
Policy

相比于 ACL, policy 可以做到更細(xì)粒度的訪問控制

與 ACL 僅可以配置的用戶與權(quán)限選項(xiàng)相比,控制的顆粒更細(xì)。

比如,我們可以添加一個(gè) Policy “允許賬號(hào) ID 為 123456 的賬號(hào)對 cos-aclxxx/policy_test 路徑的讀操作”。
然后通過訪問 API 接口,獲取權(quán)限策略:


image.png

在這個(gè) Policy 中,我們可以看到更細(xì)膩的 Action 與 Resource 配置。

訪問策略評(píng)估機(jī)制: 基于 ACL 與 Policy,控制存儲(chǔ)桶權(quán)限

太復(fù)雜了,概括不了。


image.png

這其中還有一些邏輯漏洞,比如“雖然我沒權(quán)限讀取A 文件,但是我有權(quán)限把 A 文件的 ACL 修改為所有人可見,然后我就有權(quán)限讀了”。詳見文章。

4. 各云廠商 OSS 功能

4.1. 七牛云 Kodo

七牛云存儲(chǔ)并不僅僅是簡單的分布式存儲(chǔ),它需要額外考慮以下這些問題。

第一,網(wǎng)絡(luò)問題,也就是文件的上傳下載問題。
.......
第二,多媒體處理。
.......
從用戶使用的角度來看,七牛云存儲(chǔ)是這樣的:
七牛云存儲(chǔ) = 對象存儲(chǔ) + 上傳下載加速 + 多媒體處理

多媒體處理是亮點(diǎn)
https://www.qiniu.com/products/kodo

4.2. AWS S3

doc:
Amazon Simple Storage Service Documentation

sdk:
aws/aws-sdk-go-v2: AWS SDK for the Go programming language. (github.com)
Developer Guide | AWS SDK for Go V2

4.2.1. Features for developers

image.png

To my understanding, you can attach kv pairs to objects and then use those tags in some rule processing things.
But, there aren't any API to "filter objects with tag xx"

The HEAD action retrieves metadata from an object without returning the object itself. This action is useful if you're only interested in an object's metadata. To use HEAD, you must have READ access to the object.

I think the name is a little bit odd. Better to call it getMetadata.
The metadata here includes more than just tags.

Security
authentification

Every interaction with Amazon S3 is either authenticated or anonymous

Authenticated requests must include a signature value that authenticates the request sender. The signature value is, in part, generated from the requester's AWS access keys (access key ID and secret access key).

https://docs.aws.amazon.com/AmazonS3/latest/userguide/MakingRequests.html
https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html

Authorization

https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html

policy + ACL

  • Canned ACL

Amazon S3 supports a set of predefined grants, known as canned ACLs. Each canned ACL has a predefined set of grantees and permissions
https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl

All objects and buckets are private by default. However, you can use a presigned URL to optionally share objects or allow your customers/users to upload objects to buckets without AWS security credentials or permissions.

To my understanding, it's like "creating a share link for this file"

4.2.2. Features for Operators

  • lifecycle


    image.png

4.3. 阿里云

教程: https://help.aliyun.com/learn/learningpath/oss.html?spm=5176.7933691.J_9588141710.2.2e394c598zS2Dk

4.3.1. schema

https://help.aliyun.com/document_detail/31947.html

4.3.2. Features for developers

  • bucket 和 Object
    創(chuàng)建 bucket 后,kv存儲(chǔ)。其中 key 可以是類似于目錄結(jié)構(gòu)的 /a/b/c

  • AccessKey

AccessKey,簡稱 AK,指的是訪問身份驗(yàn)證中用到的AccessKeyId 和AccessKeySecret。OSS通過使用AccessKeyId 和AccessKeySecret對稱加密的方法來驗(yàn)證某個(gè)請求的發(fā)送者身份。AccessKeyId用于標(biāo)識(shí)用戶,AccessKeySecret是用戶用于加密簽名字符串和OSS用來驗(yàn)證簽名字符串的密鑰,其中AccessKeySecret 必須保密。

security
  • 認(rèn)證鑒權(quán)

  • acl

4.3.3. Features for Operators

OSS支持標(biāo)準(zhǔn)(Standard)、低頻訪問(IA)和歸檔存儲(chǔ)(Archive)三種存儲(chǔ)類型,分別對應(yīng)AWS S3中的STANDARD、STANDARD_IA和GLACIER。您可以根據(jù)需要轉(zhuǎn)換OSS Object的存儲(chǔ)類型。

歸檔存儲(chǔ)類型的Object在讀取之前,要先使用Restore請求進(jìn)行解凍操作。

與S3不同,OSS會(huì)忽略S3 API中的解凍天數(shù)設(shè)置,解凍狀態(tài)默認(rèn)持續(xù)1天,用戶可以延長到最多7天,之后,Object又回到初始時(shí)的冷凍狀態(tài)。

4.3.4. AWS S3 compatibility

https://help.aliyun.com/document_detail/389025.html

4.4. Google

https://cloud.google.com/learn/what-is-object-storage?hl=zh-cn
https://cloud.google.com/storage?hl=zh-cn
https://cloud.google.com/filestore/?hl=zh-cn

4.5. 騰訊云

https://cloud.tencent.com/document/product/436/31315

5. 跨平臺(tái) API

業(yè)界有沒有標(biāo)準(zhǔn)化的 API,讓用戶面向該 API 編程、避免廠商綁定?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容