開發(fā)者、客戶、用戶
本文檔中會經常提到如下幾個角色。
開發(fā)者是云存儲服務的使用者,因此云存儲服務的客戶等同于開發(fā)者。
用戶是開發(fā)者所推出產品的直接使用者,也是云存儲服務的間接使用者。
鍵值對(Key-Value)
鍵值對(Key-Value,簡稱KV)是一個常用的數據結構概念,通常又被稱為字典(Dictionary)或映射(Map)。每個存放到該數據結構中的值(Value)都對應一個全局唯一的鍵或鍵名(Key)。該數據結構的特征是以空間換時間,通過鍵名查詢值通常是比較快速的過程。
在存儲系統中,鍵值對和文件系統(File System,簡稱FS)是同一個概念。在IT系統演進早期,文件系統比較符合常規(guī)的使用場景,令用戶可以對大量內容進行有效歸類管理,比如桌面操作系統通常會默認創(chuàng)建圖片、視頻、文檔、下載等文件夾。但當系統內的節(jié)點(如文件和文件夾)數量達到某個級數后,系統性能將急劇下降到不可用的程度,因此文件系統在設計時一般會對文件夾中可包含的子節(jié)點數目設置一個上限。
在設計海量存儲系統時,文件系統的兩個缺陷就會凸顯出來:性能限制、無法橫向無限擴展。在這種考慮下,海量存儲系統一般設計為鍵值對模式。鍵是對應文件的名稱,它可以是一個任意字符串(有些設計中可能會保留一些字符),值就是一個具體文件。寫入文件時,用戶可以自行指定鍵(比如看起來接近于文件系統的格式:data/imgs/2011/1/1/img001.jpg
),或者讓存儲系統自動生成一個唯一的鍵并返回給上傳端。使用者只需要知道下載出口的域名,而無需了解文件具體會被存放到哪個機房的哪個設備,也無需知道具體存放形式。只需在瀏覽器輸入對應的URL訪問即可,如:
http://imgs.qiniu.com/data/imgs/2011/1/1/img001.jpg
資源(Resource)
資源是七牛云存儲服務中的邏輯存儲單元。對于每一個賬號,該賬號里存放的每個資源都有唯一的一對空間(Bucket)與鍵(Key),作為識別標識。
資源鍵名是一個字符串,大部分情況下接近于Linux文件路徑的風格,比如:level1/level2/example1.jpg
。但在七牛云存儲中并沒有路徑的概念,因此這個鍵名并不表示目錄level1/level2/
下的一個名為example1.jpg
的文件,而是該鍵名就是這樣一個完整的字符串。因此,與Linux文件路徑不同,資源的標識符可以包含任意字符(包括UTF-8編碼形式的Unicode字符)。
使用者可以在上傳資源時為其指定一個方便管理的鍵名,通過設計好的前綴來達到類似于文件目錄的分類和層次效果。比如對于一個網站的資源,我們可以用如下鍵名命名資源:
index.html
features/index.html
features/feature1.html
features/feature2.html
imgs/features/feature1.png
imgs/features/feature2.png
about.html
假設這些資源都位于某個綁定了域名example.com
的公開空間中,則用戶可以在瀏覽器里輸入以下URL訪問這些資源:
http://www.example.com/features/index.html
或省略掉index.html
,如下:
http://www.example.com/features/
空間(Bucket)
空間是資源的組織管理單位,一個資源必然位于某個空間中。可以為每個空間設置一系列的屬性,以對資源提供合理的管理動作。
常見的屬性有如下:
- 將空間設置為公開或私有,以控制空間內資源的訪問權限。
- 設置資源的數據處理樣式(Style),以便于用簡短方式對資源進行處理。
數據處理(Fop)
數據處理是七牛云存儲提供的一種強大的數據處理機制。開發(fā)者可以在上傳或訪問資源時觸發(fā)數據處理流程,從而得到資源進行按需變換后的結果。
數據處理的執(zhí)行非常簡單,就是在資源請求中加上數據處理動作和參數,比如以下的URL對圖片進行了縮放處理,就是調用了一個名為“imageView2”的數據處理操作:
http://developer.qiniu.com/resource/gogopher.jpg?imageView2/2/w/200/h/200
多個數據處理操作可以通過管道(Pipe)進行連接,實現級聯操作,每一級的輸出作為下一級的輸入。比如我們可以在一次請求中完成先對圖片進行縮放,然后再在圖片右下角添加一個透明圖片水印,其中縮放和添加水印分別是一個數據處理操作:
http://developer.qiniu.com/resource/gogopher.jpg?imageView2/2/w/400
|watermark/1/image/aHR0cDovL3d3dy5iMS5xaW5pdWRuLmNvbS9pbWFnZXMvbG9nby0yLnBuZw==
數據處理樣式(Fop-Style)
如果覺得url?
這種形式過于冗長,還可以為這些串行的
集合定義一個友好別名,之后可以用這個友好別名來取代冗長的指令和參數。我們稱這個別名為數據處理樣式,它是對一個或一組數據處理操作的命名。
還以上一個數據處理的URL為例,看起來非常長且難以理解。我們可以定義一個名為watermark
的數據處理樣式,對應以上的數據處理操作:imageView2/2/w/400 |watermark/1/image/aHR0cDovL3d3dy5iMS5xaW5pdWRuLmNvbS9pbWFnZXMvbG9nby0yLnBuZw==
,則我們可以用如下方式進行訪問:
http://developer.qiniu.com/resource/gogopher.jpg-watermark
顯然簡潔很多也方便很多。
Note
上面的 ‘-’ 我們稱為數據處理樣式的分隔符。