OSSC(Aliyun Open Storage Service C SDK)是我和實驗室@王維同窗在2012首屆阿里雲開發者大賽中的參賽項目(http://2012.aliyun.com),咱們做品提交是在10月2號,可是11月8號才揭曉最終結果,因此剩下的半個月還要慢慢等吧。 html
從GIT的提交記錄來看開發時間應該是2012-09-03 21:08:02首次提交,最終提交記錄是在2012-10-02 23:14:46,恰好整整一個月時間,除了實驗室導師的活須要完成,就只能零零散散的利用空餘時間來完成OSSC。雖然時間很緊,不過還好完成了這次比 賽的項目,從中也學到了不少東西。 算法
下圖是OSSC代碼演進,總的代碼(在GIT統計中包括第三方庫,如壓縮庫LZ4,miniLZO,MD5等)大概接近4.6W行,除開第三發庫,咱們本身的代碼大概在3.0W行左右。 編程
下圖是每一個做者代碼統計: 安全
下圖是活動統計: 網絡
下圖是文件類型統計: 多線程
下圖是代碼提交時刻統計: curl
阿里雲存儲服務(Open Storage Service,簡稱 OSS),是阿里雲對外提供的海量,安全,低成本,高可靠的雲存儲服務。 用戶能夠經過簡單的 REST 接口,在任什麼時候間、任何地點、任何互聯網設備上進行上傳和下載數據, 也可使用WEB 頁面對數據進行管理。同時,OSS 提供 Java、Python、PHP SDK,簡化用戶的編程。 基於 OSS,用戶能夠搭建出各類多媒體分享網站、網盤、我的企業數據備份等基於大規模數據的服務。 【摘自《OSS API 開放接口規範文檔》】。 函數
目前 OSSC 提供了 OSS 開放接口中所描述的全部功能, 特色包括: 測試
咱們爲OSS設計了一種可支持多種實時壓縮算法(如LZO, LZ4,LZF)的文件存儲格式,並實現了LZO,LZ4兩種壓縮算法(從此可能支持更多)的文件和內存塊的實時壓縮上傳和下載解壓縮功能,用戶在壓縮上 傳文件時須要指定壓縮算法(目前只能指定OSS_LZ4, OSS_LZO),可是在下載解壓縮時並不須要指定解壓縮算法,OSSC會自動根據文件格式選擇適當的解壓縮算法對文件或內存塊進行解壓縮。 網站
該壓縮存儲格式文件名稱以.ossz結尾,可是不強制使用.ossz後綴,事實上,你可使用任意文件名和後綴,OSSC會自動檢查文件是否爲合法 的壓縮格式。 另外,咱們爲文件和內存塊的實時壓縮上傳和下載解壓縮分別提供了相應的API,咱們建議壓縮上傳和下載API成對使用,即上傳時若是採用壓縮上傳,下載最 好採用壓縮下載的API進行文件下載,以避免在下載解壓縮時沒必要要的文件格式檢查,更詳細的原理能夠參考《OSSC 實現原理》一節,或源碼 src/util/oss_compression.c, src/util/oss_decompress 或 src/core/client_object_operation.c。
目前 OSSC 除了提供 OSS 開放接口中所描述的全部功能之外,還包括如下亮點:
OSSC 在 Ubuntu 12.04 上開發,咱們測試了OSSC在不一樣Linux操做系統發行版的穩定性,如下是OSSC通過測試操做系統:
OSSC 採用 CURL 庫處理 HTTP 請求,所以在編譯 OSSC 以前你須要安裝 CURL,CURL 源碼中包含了C調用API,最新版 CURL下載地址:http://curl.haxx.se/libcurl/。 除此以外,OSSC 不依賴任何其餘程序庫。
本節介紹如何編譯 CURL
$ ./configure $ make $ make test (optional) $ make install(需root用戶權限)
本節介紹如何編譯OSSC。
OSSC採用 CMake 管理構建過程,應該先安裝CMake,
cmake -DCMAKE_INSTALL_PREFIX=/your-path ../.
OSSC以程序庫的形式提供給上層開發者使用,所以若是你想基於OSSC開發上層應用,必須連接OSSC程序庫,OSSC大部分都集中到了 osscore 中,
只是支持多線程調用模式的API單獨放在 ossextra庫中(目前多線程只支持 pthread 線程庫,後期會考慮在 Windows 下也支持多線程)
如下是你的程序須要鏈接OSSC,連接參數爲:-L/path-to-your-ossc-installation -losscore.
另外須要注意的是,OSSC支持多線程斷點續傳模式下上傳文件,若是你想體驗該功能,你須要連接以下庫: -L/path-to-your-ossc-installation -lossextra.
一個優秀的項目必須遵循良好的編碼規範,良好的編碼風格能夠促進團隊協做,減小 BUG 產生概率,有助於開發後的代碼審查,下降後期維護成本。
OSSC雖然只是咱們在業餘時間完成的小項目,可是也注重了編碼風格的一致性,咱們強烈建議那些但願基於OSSC作二次開發的編碼人員閱讀本規範, 相信本規範可以讓你快速熟悉 OSSC 的總體結構和OSSC API 的使用方法。
OSSC詳細的實現原理請參考: OSSC實現原理
OSSC(OSS-C-SDK)徹底採用C語言開發,並實現了相似面向對象的調用方式,即「對象(struct 結構)」的「成員函數(函數指針)「採用函數指針形式實現, 咱們儘可能和OSS-JAVA的使用方式切合,每一個對象都有相關的頭文件和實現文件,並存放在modules目錄下,其中與oss功能相關的全部的文件名均 以oss_爲前綴,
每一個文件實現了一個對象(即模塊),另外,爲了方便開發人員記憶,OSSC中的全部結構和函數咱們採用以下命名;
request->set_bucket_name(request,"bucket-name-001");
好比上傳一個對象,你須要定義標識上傳對象的請求結構(oss_put_object_request_t *request)和
上傳對象以後返回信息的結構(oss_put_object_result_t *result),而後將request做爲參數傳遞給上傳對象函數中(client_put_object_from_file()或者client_put_object()中),最後返回值會保存在result指針所指向的結構中。
OSSC 高級模塊中包含了多線程上傳大文件的 API,並支持斷點續傳,因爲時間和精力有限,咱們目前並無實現 Windows 平臺的多線程上傳下載功能, 但願從此會有其餘開發者實現這一功能。
另外 Extra 庫還支持簡單的文件夾上傳同步和下載同步的功能,但願該API對其餘開發者有用。
OSSC 採用了POSIX多線程標準庫 pthread,理論上只要你的操做系統支持 pthread均可以使用 OSSC 的 extra 庫中的 API。
OSSC 使用的開源程序:
OSSC 採用 LGPL(GNU Lesser General Public License:GNU 寬通用公共許可證)受權形式發佈,有關 LGPL 能夠查閱 GNU 官方文檔: http://www.gnu.org/licenses/lgpl.html
傅海平:中國科學院計算技術研究所網絡數據中心(haipingf@gmail.com)
王 維:中國科院學計算技術研究所網絡數據中心(wangwei881116@gmail.com)