總有人說阿里雲主機帶寬小,那只是由於你還停留在單機架構上。 php
阿里的架構設計,雲主機主要用來跑程序的,附件的存儲和訪問主要靠OSS。 python
有人又會說了,OSS按存儲費+流量雙重計費傷不起,只是你不知道OSS有免費額度,另外能夠經過CDN來大幅節約流量,甚至能夠反代回雲主機實現內網免流量。長遠來說能節省一大筆費用。 vim
「無圖無真相,有視頻更好」。通常來講,網絡用戶都喜歡圖片和視頻,而不喜歡讀乾巴巴的文字。這看似單純的意願,卻讓網站的開發者和維護人員叫苦不 迭——圖片、視頻等內容佔用了一個網站的不少存儲、帶寬資源。是時候把圖片、視頻遷移到雲存儲,來釋放被壓得喘不過氣的服務器和帶寬了!瀏覽器
下面以一個網站的圖片存儲爲例,來逐步瞭解如何使用開放存儲服務(Open Storage Service,簡稱OSS)。緩存
開放存儲服務安全
要使用OSS,須要先在http://oss.aliyun.com網站上註冊,註冊成功後,便可在網站上的OSS管理中心建立bucket,上傳、下載本身的object。服務器
bucket是用戶數據的命名空間,例如圖片能夠放到一個bucket中,視頻放到另一個bucket中。一個bucket存儲的總數據量和文件 個數都是無限制的。存儲在bucket中的每一個文件,稱之爲object。存儲在object中的數據能夠是任意內容,OSS不會去處理object中的 數據。網絡
對於每一個bucket,OSS允許設置三種訪問權限,即私有讀寫(private)、公開讀私有寫(public-read)、公開讀寫 (public-read-write)。對於私有讀寫和私有寫的權限,OSS使用API密鑰對(AccessID/AccessKey)來保證你的數據 只能被你本身安全訪問,因此千萬不要向任何人泄露你的安全加密對。API密鑰對能夠從OSS的管理中心獲取到,如圖1所示。架構
如圖1所示運維
初階:使用命令行工具
對於開發人員來講,使用命令行工具能夠更容易地操做OSS。命令行工具隨Python SDK包一塊兒發佈,從開放存儲主頁http://oss.aliyun.com能夠下載到。
安裝好Python SDK包後(安裝指南參考主頁的SDK使用嚮導),首先用osscmd來配置你的安全加密對(如下以Linux環境爲例,Windows用戶須要用python path_to_osscmd來指定osscmd的路徑):
$ osscmd config –id=AccessID –key=AccessKey
配置完便可開始建立一個bucket,使用命令行工具鍵入以下命令建立一個叫作myimage的bucket,建立完調用osscmd的ls命令來列出已經有的bucket:
$ osscmd createbucket myimage
$ osscmd ls
因爲bucket名字是全局惟一的,所以你建立的bucket可能和已存在的bucket衝突。建議使用公司的網址做爲前綴來建立bucket,如 com-abc-img。默認狀況下,osscmd建立的bucket權限是private。對於Web圖片訪問,能夠設置bucket的權限爲 public-read以將存儲在OSS中的圖片直接嵌入網頁。可使用osscmd的setacl命令來設置bucket權限爲public- read:
$ osscmd setacl myimage –acl=public-read
接下來,上傳一個圖片到myimage中。爲了使瀏覽器正確解析圖片,設置它的類型爲圖片(image/jpg):
$ osscmd put –content-type=image/jpg /path/to/top.jpg oss://myimage/
這樣就成功地將圖片文件top.jpg存入到了myimage中。這個文件的URL地址是http://storage.aliyun.com /myimage/top.jpg。對這個URL:域名地址是OSS的服務地址htpp://storage.aliyun.com,myimage是 bucket的名字,接下來就是剛剛上傳的圖片名。能夠將這個URL直接嵌入到HTML頁面中的img元素中:
<img src=」http://storage.aliyun.com/myimage/top.jpg」 alt=」top image」>
這裏須要提示的是:在使用osscmd的put命令時加入-p參數,在上傳完文件後,會打印出URL。
直接鍵入osscmd,不加參數便可輸出所有支持的命令。
進階:使用SDK經過程序來操做OSS
OSS提供了Python、PHP、Java、C、C#五種語言的SDK包,若是以爲直接調用OSS的REST API麻煩的話,可使用官方提供的可靠SDK。
咱們選擇用時下流行的Python語言來操做OSS。上一節安裝完Python SDK後,咱們已經不須要更多的配置了。打開文本編輯器或者vim,你用EMACS?佩服你,是個牛人!
下面代碼的做用是打印出本身的全部bucket列表:
接下來,用SDK向剛剛建立的myimages中寫入網頁的導航圖片nav.jpg。代碼以下:
若是沒有報錯的話,文件已經上傳成功了。可使用osscmd的ls命令來查看這個文件是否已經存在:
$ osscmd ls oss://myimages/
看到nav.jpg了嗎?還能夠用osscmd的meta命令來查看nav.jpg的屬性:
$ osscmd meta oss://myimages/nav.jpg
輸出中的第二列是nav.jpg的etag(即md5值)。回到SDK,接着再用這些代碼繼續傳一些文件,而後用SDK來查看有哪些文件存在。
繼續寫下面的代碼就能夠列出myimages中的全部文件:
網站大量的圖片,須要使用文件夾的方式來組織。在OSS裏如何創建文件夾呢?很是簡單,只須要在文件名以前加上文件夾名,OSS會自動爲你建立出文件夾。使用osscmd來上傳文件到myimages中的2012這個目錄,而且用ls命令列出:
$ osscmd put /path/to/sidebar.jpg oss://myimages/2012/
$ osscmd ls oss://myimages/2012/
而使用SDK的代碼以下:
用代碼列出2012目錄下的文件:
高階:安全簽名的URL和自定義header
對於有些設置爲private的bucket,有時須要允許其中的某個文件可以被公開訪問,但又不但願把bucket的權限設置爲public-read而致使其餘數據有泄露的危險。對URL進行簽名可以有效地解決這個問題。使用osscmd對一個文件進行簽名:
$ osscmd signurl oss://myimages/2012/sidebar.jpg –timeout=600
命令最後的timeout參數的含義是生成的連接在600秒內有效,超過600秒就不可訪問。使用SDK來生成URL:
對於某些網站,若是要防止盜鏈(或防止搜索引擎爬蟲致使的網站流量飆升),可使用生成的URL嵌入頁面,生成URL的過程不須要和OSS進行交換。
若是想在讀取文件時,OSS支持返回一些自定義的響應頭(response header),須要在上傳這個文件時就設置好。目前,除了前面介紹的Content-Type之外,OSS還支持設置以下幾種經常使用的HTTP響應 頭:Expires、Cache-Control、Content-Disposition和Content-Encoding。這些Header的具體 含義,能夠參考RFC 2616標準。使用API來設置這些響應頭的方法以下:
經濟、無需運維的雲存儲
以上介紹了OSS的基本功能,與傳統的存儲如NAS等解決方案相比,OSS更經濟,而且爲用戶完全解決了繁雜的系統平常運維、備份等工做。
傳統存儲系統隨着業務規模的增加,必須不斷地預先擴容,同時還要對存儲系統中的數據不斷備份,以面對可能忽然發生的硬件故障。而使用OSS,用戶上 傳的數據自動會有多份拷貝冗餘,數據安全性達到99.99999999%。OSS在維護用戶數據高可靠性的同時,也保障了服務的高可用性,承諾最低 99.9%的可用性,全部繁雜的存儲備份和硬件故障再也不是用戶的問題。
在網絡方面,OSS的網絡響應速度很是具備優點,保證了全國絕大多數地區的良好訪問體驗。
但當用戶網站的訪問量很是大,須要服務全國各地用戶,特別是部分靜態圖片成爲訪問熱點時,使用CDN服務,可以更快地將數據傳遞到終端用戶,而且網絡流量的開銷也更爲經濟。接下來,讓咱們瞭解一下阿里雲CDN的狀況。
使用CDN加速內容加載的速度
阿里雲CDN服務是一個遍及全國的分佈式緩存系統,可以將網站文件(如圖片或JavaScript代碼文件)緩存到全國多個城市機房中的服務器上,當一個用戶訪問你的網站時,會就近到靠近TA的城市的服務器上獲取數據,這樣最終用戶訪問你的服務速度會很是快。
阿里雲CDN服務在全國部署超過100個節點,能提供給用戶優良的網絡加速效果。當網站業務忽然爆發增加時,無需手忙腳亂地擴容網絡帶寬,使用 CDN服務便可輕鬆應對。和OSS服務同樣,使用CDN,須要先在aliyun.com網站上開通CDN服務。開通後,須要在網站上的管理中心建立你的 distribution(即分發頻道),每一個distribution由兩個必須的部分組成:distribution ID和源站地址。
舉例來講,須要對剛剛存儲在OSS中的myimages這個bucket中的數據進行加速,那麼源站地址即爲 http://storage.aliyun.com,CDN服務會自動爲用戶建立一個distribution ID,服務建立完成後,便可使用http://distributionID.aliyuncdn.com/myimages /someimage.jpg來訪問原來存儲在myimage這個bucket中的someimage.jpg文件。若是不想使用阿里雲CDN生成的域 名,那麼能夠將本身網站的二級域名,如cdn.abc.com,加入一個CNAME記錄到distributionID.aliyuncdn.com。
建立distribution須要在阿里雲網站的CDN管理頁面操做。而當 distribution建立好以後,便可使用SDK來對distribution進行操做,代碼很是相似OSS的使用方法,接下來的代碼列出了用戶的 distribution列表,而且將其中一個ID爲myID的distribution中的一張圖片從CDN緩存中刪除。
因而可知,使用阿里雲OSS和CDN,能夠簡單、經濟地解決服務的存儲和網絡問題,畢竟,大多數網站或應用的存儲和網絡帶寬多半是被圖片或視頻消耗掉的。
從整個業界來看,最近這樣的面向我的用戶的雲存儲如國外的DropBox和Box.net很是受歡迎。很是期待你們能在阿里雲服務如OSS平臺上開發出這麼棒的應用!