layout: post
title: "對象存儲 Bucket"
date: 2020-7-26 1:44:09 +0800
categories: s3 對象存儲 Bucket
[toc]
Bucket
Bucket 是什么吆视?
對象存儲里面只有兩個跟資源相關(guān)的名詞:Bucket,Object醉冤。
Bucket 中文直譯為”桶“掖举,Object 顯而易見就是”對象“暮现。所有 Object 都必須屬于某個 Bucket嘴高,無一例外。Bucket 通常也是計費镰烧、權(quán)限控制盏触、生命周期等高級功能的管理實體渗蟹。
一般來講,公有云廠商會確保 Bucket 名稱在全球地域服務(wù)具有全局唯一性赞辩,且不能修改雌芽。比如說,你使用 AWS 的 S3 服務(wù)辨嗽,在北美地域有個叫做 Test 的 Bucket世落,在其他地域就不允許有同名的 Bucket 了。其實國內(nèi)的公有云廠商個別做差異化的時候糟需,在這個地方會有不一樣屉佳,比如允許不同地域可以有同名的 Bucket。這個帶來的好處就是用戶方便了洲押,因為不同地域可以設(shè)置相同 Bucket 了武花,不好的地方就是對象存儲系統(tǒng)本身的實現(xiàn)可能會相對復(fù)雜。
一般來講杈帐,Bucket 作為一個抽象的容器概念体箕,空間是無限的专钉,也就是說,用戶存放的 Object 的數(shù)量和大小總量沒有限制累铅,空間大小只依賴于實際的物理資源跃须,公有云廠商也是希望你存儲進(jìn)來的數(shù)據(jù)越多越好(機(jī)器不夠他們隨時可以擴(kuò)容,這個用戶是不感知的)娃兽。
Bucket 命名規(guī)范
公有云廠商一般都會有這個限制菇民,這個和 S3 限制的一致:
- 只能包括小寫字母,數(shù)字投储,短橫線(-)
- 必須以小寫字母或者數(shù)字開頭
- 長度必須在 3-63 字節(jié)之間
Bucket 權(quán)限類別
Bucket默認(rèn)提供三種訪問權(quán)限:私有讀寫第练、公有讀私有寫和公有讀寫。其訪問權(quán)限可通過對象存儲控制臺上Bucket的權(quán)限管理進(jìn)行修改玛荞。
私有讀寫
只有 Bucket 的創(chuàng)建者或者被授權(quán)的賬號才對該 Bucket 中的 Object 有讀寫權(quán)限复旬,其他人對該 Bucket 中的 Object 都沒有讀寫權(quán)限。Bucket 訪問權(quán)限默認(rèn)就是私有讀寫冲泥,也就是要 AK/Sk 來訪問。
公有讀私有寫
任何人(包括匿名訪問者)都對該 Bucket 中 Object 有讀權(quán)限壁涎,但只有 Bucket 創(chuàng)建者及被授權(quán)的賬號才對該 Bucket 中 Object 有寫權(quán)限凡恍。
公有讀寫
任何人(包括匿名訪問者)都對該 Bucket 中對象有讀權(quán)限和寫權(quán)限。這種方式用起來要慎重點怔球,方便是方便了嚼酝,但是安全系數(shù)最低。
Bucket 的創(chuàng)建
一般可以使用 3 種方式來創(chuàng)建一個 Bucket竟坛,這三種方式也是操作對象的三種方式(本質(zhì)上都是一種啦闽巩,發(fā)送正確的 S3 協(xié)議包給到對象存儲服務(wù)系統(tǒng)):
方式一:使用公有云的用戶 Portal 系統(tǒng)
這個是新手最早接觸到,也是容易接受的一種方式担汤。一般用來體驗對象存儲簡單的上傳下載涎跨。
方式二:使用 SDK
按照自己的技術(shù)棧,選定特定語言的 SDK 版本崭歧。比如你可以選擇 S3 的 golang 版本的 SDK隅很。
方式三:使用第三方工具
- 可以用公有云廠商自己提供的工具。比如率碾,阿里 OSS 提供了 ossutil 命令行工具和 ossbrowser 圖形化工具叔营。騰訊 COSCMD 命令行工具,七牛提供了 qshell 工具所宰;
- 也可以用開源免費的第三方工具绒尊,比如 S3Browser、S3Cmd 等第三方工具仔粥;
Bucket 的刪除
S3 的實現(xiàn)中婴谱,必須要是空 Bucket 才能被刪除。
思考問題
問題一:Bucket 到底是什么,有沒有一個實體勘究?
我們知道 Object 的概念很容易理解矮湘,因為 Object 就是用戶實實在在上傳的數(shù)據(jù)。Bucket 呢口糕?有沒有一個實體缅阳?
其實 Bucket 就是一個命名空間而已。對象存儲系統(tǒng)內(nèi)部實現(xiàn)的方式也是各式各樣景描。比如開源的 Minio 舉例十办,Bucket 就是實現(xiàn)成了目錄,對象就是目錄下的文件超棺。
或者向族,你自己實現(xiàn)的對象存儲可以實現(xiàn)成字符串,這個 Bucket 里的對象只需要前綴加上這個 Bucket 前綴棠绘,等等件相。
問題二:對象存儲有沒有目錄的概念?
首先明確一點氧苍,對象存儲中只有 Bucket夜矗,Object 的兩層關(guān)系。沒有目錄概念H门啊N伤骸!
那有些小伙伴可能質(zhì)疑了赡突,我明明用 S3Browser 对扶,ossbrowser 這樣的工具就看到了目錄,比如你上傳一個 key 名為:"/root/dir1/test.txt" 到 Bucket 里面惭缰,root
浪南,dir1
這個明明就是給我顯示成了目錄關(guān)系。
其實不是的漱受。對于對象存儲后端來講逞泄,你只是上傳了一個 key = “/root/dir1/test.txt” 的對象,還是只有 Bucket/Object 兩層關(guān)系拜效。目錄只是 s3Browser, ossbrowser 這樣的客戶端工具為了好看做出來的效果喷众。他識別到 key 里面包含了斜線 “/” 之后,就用最經(jīng)典的目錄層次效果給你呈現(xiàn)了紧憾。
堅持思考到千,方向比努力更重要。微信公眾號關(guān)注我:奇伢云存儲