????????S3應(yīng)該是Amazon發(fā)布的最早的一項網(wǎng)頁服務(wù)了,已經(jīng)有十年了,到現(xiàn)在功能越來越多,考試中也是必考的內(nèi)容,見過最簡單的一道送分題問的是S3代表的是什么,S3是英文的縮寫,是simple storage service,直譯的話是簡單存儲服務(wù)。
????????S3被用到的最多的功能就是存儲數(shù)據(jù)了,但同時也有很多其他的性能,最簡單的使用場景,比如說我搭建了一個資源共享網(wǎng)站,比如說視頻,文件啊,這些文件由于大小的原因,很適合放在s3中,在代碼中引用就可以了。
? ? ? ? S3存儲桶
????????那在s3中存放數(shù)據(jù)的時候,就需要有個容器來存放,這個容器就叫做s3存儲桶,存儲桶是s3中用于數(shù)據(jù)存儲的基礎(chǔ)容器,需要在指定的AWS區(qū)域內(nèi)創(chuàng)建桶,每個桶的名字必須是整個AWS系統(tǒng)內(nèi)唯一的,就像域名一樣,已經(jīng)有了淘寶網(wǎng)了,你就不可能再注冊一個網(wǎng)站還叫淘寶。每個AWS賬戶下最多能生成100個S3桶,在S3的桶內(nèi)還可以任意創(chuàng)建文件夾。當(dāng)生成存儲桶并在其中存放數(shù)據(jù)后可以根據(jù)數(shù)據(jù)對象的url來對對對象進(jìn)行訪問,美國東部(弗吉尼亞北部)區(qū)域內(nèi)的存儲桶訪問url就是,http://s3.amazonaws.com/bucket,其他區(qū)域的存儲桶url是http://s3-aws-region.amazonaws.com/bucket,在考試中也遇到過,告訴你一個區(qū)域,然后這個區(qū)域內(nèi)有某個桶,和保存的數(shù)據(jù)對象,讓你選出該對象的url是什么。
????????在桶內(nèi)可以存儲無限量的數(shù)據(jù),就是說桶的大小沒有限制,放多少數(shù)據(jù)都可以,但是每個數(shù)據(jù)對象的大小是有限制的,范圍是從0B到5TB,當(dāng)數(shù)據(jù)對象大于100M的時候,推薦使用分段上傳。數(shù)據(jù)對象的存儲是以鍵值對的形式保存的。當(dāng)在某個區(qū)域內(nèi)創(chuàng)建一個存儲桶,并在桶內(nèi)存儲數(shù)據(jù)后,aws會自動的將存儲的數(shù)據(jù)同時復(fù)制到這個區(qū)域內(nèi)的所有可用區(qū)中,所以默認(rèn)的存儲類型中s3里保存的數(shù)據(jù)具有很高的可用性(具有11個9)以及持久性(99.99%)也就是說1000億個數(shù)據(jù)里最多會丟失一個數(shù)據(jù)。
? ? ? ? 注意點(diǎn):存儲桶不能跨區(qū)域,只能存在于一個區(qū)域內(nèi);每個AWS賬戶只能生成100個S3存儲桶;存儲桶的命名必須是唯一的;存儲桶的擁有著不能轉(zhuǎn)移;只有當(dāng)存儲桶中沒有數(shù)據(jù)的時候,才可以刪除該存儲桶。
? ? ? ? S3數(shù)據(jù)對象
? ? ? ? S3的數(shù)據(jù)對象就是存放在S3存儲桶中的數(shù)據(jù),所有的數(shù)據(jù)都是按照鍵值對的形式存在的。同時,數(shù)據(jù)對象還擁有元數(shù)據(jù),例如content-type, size等;版本ID,當(dāng)在S3存儲桶中存儲數(shù)據(jù)的時候,如果對存儲桶啟動版本管理的話,所有的存儲對象都會有一個版本ID,當(dāng)上傳具有同樣名字的數(shù)據(jù)的時候,已被保存的數(shù)據(jù)會被最新的版本所覆蓋,但由于啟用了版本管理功能,仍然能夠?qū)⒃瓉淼陌姹净謴?fù)。
?????????這里還有兩個概念需要大家理解一下,考試中也見到過:
????????就是s3中的數(shù)據(jù)寫后讀一致性和寫后讀最終一致性,其實這兩個也很簡單,在任何區(qū)域中的s3存儲桶中對新生成的對象,然后通過api或直接訪問,馬上就能讀取到新生成的數(shù)據(jù)文件,利用的就是寫后讀一致性。但是對已有的數(shù)據(jù)進(jìn)行重寫覆蓋或者是刪除的話,不能馬上得到結(jié)果,得需要一些時間來反映,利用的就是寫后讀最終一致性。
????????在存儲桶中存儲數(shù)據(jù)對象的時候,還可以選擇對這個對象以什么存儲類別來存儲,最常用的有四種存儲類別,可以根據(jù)使用場景選擇適合自己的存儲類別。
????????有通用型,這個是默認(rèn)存儲類別,當(dāng)上傳對象時沒有指定存儲類別的話,s3將會采用這個通用性存儲類別。這個具有高持久性,以及高可用性,存儲的花費(fèi)也是最高的。
????????還有不經(jīng)常訪問的Standard—IA,這個用于不頻繁訪問的數(shù)據(jù),但是當(dāng)訪問的時候需要能夠快速訪問到數(shù)據(jù),也具有高持久性和高可用性,花費(fèi)比通用性低一些。
????????低冗余存儲,主要應(yīng)用在不是特別重要的,可以通過程序再生的數(shù)據(jù),比如說網(wǎng)站在上傳了自己的頭像,然后網(wǎng)站利用程序生成了頭像的縮略圖,原圖片一般會保存在通用類別中,而生成的縮略圖會以低冗余存儲類別保存,就算這個圖片丟失了,還可以再利用程序?qū)υ瓐D片生成一個縮略圖,也具有高可用性和高持久性,10000個對象中每年可能會丟失一個對象。
????????還有最后一個Glacier,這個適用于存檔數(shù)據(jù),這些數(shù)據(jù)一般不經(jīng)常訪問,而且存檔對象不能用于實時訪問,得需要先從glacier里把數(shù)據(jù)還原出來之后才可以訪問,這是和前三個存儲類別的一個不同點(diǎn),而且上傳對象時不能一開始就指定以glacier的存儲類別保存數(shù)據(jù),必須得利用對象的生命周期將對象轉(zhuǎn)成glacier存儲類別,它存儲對象時成本特別的低。glacier一般都是最后將數(shù)據(jù)存檔,而不能將數(shù)據(jù)當(dāng)作備份用,因為從這個存檔類別中讀取數(shù)據(jù)需要很長的時間。