日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何用Java平臺(tái)訪問開源云存儲(chǔ)

如何用Java平臺(tái)訪問開源云存儲(chǔ)

2011-09-02 09:51:21

云計(jì)算 盡管云計(jì)算這一術(shù)語(yǔ)并不新鮮(Amazon在2006年就開始提供它的云服務(wù)),但從2008年起它才開始真正成為流行詞,這期間,Google和Amazon的云服務(wù)逐漸獲得了公眾的關(guān)注。 Google的App Engine使用戶能夠在Google基礎(chǔ)設(shè)施上構(gòu)建和托管Web應(yīng)用程序。

創(chuàng)新互聯(lián)公司是專業(yè)的來(lái)賓網(wǎng)站建設(shè)公司,來(lái)賓接單;提供成都網(wǎng)站制作、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行來(lái)賓網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

盡管云計(jì)算這一術(shù)語(yǔ)并不新鮮(Amazon在2006年就開始提供它的云服務(wù)),但從2008年起它才開始真正成為流行詞,這期間,Google和 Amazon的云服務(wù)逐漸獲得了公眾的關(guān)注。 Google的App Engine使用戶能夠在Google基礎(chǔ)設(shè)施上構(gòu)建和托管 Web 應(yīng)用程序。

連同S3,AmazonWeb Services還包括Elastic Cloud Compute (EC2)計(jì)算Web服務(wù),該服務(wù)可以在Amazon的基礎(chǔ)設(shè)施上托管應(yīng)用程序。其他公司也開始蠢蠢欲動(dòng),準(zhǔn)備與Amazon和Google一決高下,其中就包括 Microsoft?的 Azure,甚至 Sun Microsystems(其云計(jì)算還沒有正式推向市場(chǎng))也想分一杯羹。例如IBM最近宣布,它將提供某些產(chǎn)品供開發(fā)人員在AmazonEC2 環(huán)境中使用。

AmazonSimple Storage Service (S3)是一個(gè)公開的服務(wù),Web應(yīng)用程序開發(fā)人員可以使用它存儲(chǔ)數(shù)字資產(chǎn),包括圖片、視頻、音樂和文檔。S3提供一個(gè) RESTful API以編程方式實(shí)現(xiàn)與該服務(wù)的交互。通過(guò)本文,您將了解如何使用開源的JetS3t庫(kù)利用Amazon的S3云服務(wù)存儲(chǔ)和檢索數(shù)據(jù)。

面向開源的S3云平臺(tái)介紹

云是一個(gè)抽象的概念,表示松散連接在一起的計(jì)算機(jī)組,這些計(jì)算機(jī)共同執(zhí)行某項(xiàng)任務(wù)或者服務(wù),就像是使用一個(gè)單獨(dú)的實(shí)體完成一樣。此概念背后的架構(gòu)也很抽象:每個(gè)云提供者都可以根據(jù)各自情況隨意設(shè)計(jì)它的產(chǎn)品。軟件即服務(wù)(Software as a Service,SaaS)是一個(gè)與云相關(guān)的概念,表示云向用戶提供某種服務(wù)。云模型可以降低用戶成本,因?yàn)樗麄儫o(wú)需購(gòu)買軟件和硬件也可以運(yùn)行 — 服務(wù)提供者已經(jīng)為用戶提供了必要的組件。

以Amazon的S3產(chǎn)品為例。顧名思義,這是一個(gè)公開的服務(wù),使 Web 開發(fā)人員能夠存儲(chǔ)數(shù)字資產(chǎn)(如圖片、視頻、音樂和文檔等),以便在應(yīng)用程序中使用。使用S3時(shí),它就像一個(gè)位于 Internet 的機(jī)器,有一個(gè)包含數(shù)字資產(chǎn)的硬盤驅(qū)動(dòng)。實(shí)際上,它涉及到許多機(jī)器(位于各個(gè)地理位置),其中包含數(shù)字資產(chǎn)(或者數(shù)字資產(chǎn)的某些部分)。Amazon還處理所有復(fù)雜的服務(wù)請(qǐng)求,可以存儲(chǔ)數(shù)據(jù)并檢索數(shù)據(jù)。您只需要付少量的費(fèi)用(大約每月 15 美分 /GB)就可以在Amazon的服務(wù)器上存儲(chǔ)數(shù)據(jù),1 美元即可通過(guò)Amazon服務(wù)器傳輸數(shù)據(jù)。

Amazon的S3服務(wù)沒有重復(fù)開發(fā),它公開了RESTful API,使您能夠使用任何支持 HTTP 通信的語(yǔ)言訪問S3。 JetS3t項(xiàng)目是一個(gè)開源Java庫(kù),可以抽象出使用S3的RESTful API的細(xì)節(jié),將API公開為常見的Java方法和類。編寫的代碼越少越好,難道不是嗎?充分利用其他人的成果也是不錯(cuò)的。在本文中您將看到,JetS3t使S3和Java語(yǔ)言的工作變得更加簡(jiǎn)單,從根本上提高了效率。

S3開源應(yīng)用模式介紹

理論上,S3是一個(gè)全球存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN),它表現(xiàn)為一個(gè)超大的硬盤,您可以在其中存儲(chǔ)和檢索數(shù)字資產(chǎn)。但是,從技術(shù)上講,Amazon的架構(gòu)有一些不同。您通過(guò)S3存儲(chǔ)和檢索的資產(chǎn)被稱為對(duì)象。對(duì)象存儲(chǔ)在存儲(chǔ)段(bucket)中。您可以用硬盤進(jìn)行類比:對(duì)象就像是文件,存儲(chǔ)段就像是文件夾(或目錄)。與硬盤一樣,對(duì)象和存儲(chǔ)段也可以通過(guò)統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifier,URI)查找。

例如,在我的硬盤中,我有一個(gè)名為 whitepaper.pdf 的文件,它位于主目錄中名為 documents 的文件夾中。相應(yīng)的,該pdf文件的URI為/home/aglover/documents/whitepaper.pdf 。在S3中,URI有一點(diǎn)不同。首先,存儲(chǔ)段只能是頂級(jí)的 — 無(wú)法像嵌套硬盤中的文件夾(或目錄)一樣進(jìn)行嵌套。其次,存儲(chǔ)段必須遵循 Internet 命名法則;句點(diǎn)旁邊沒有斜杠,名稱不包括下劃線等等。最后,由于存儲(chǔ)段名稱已經(jīng)是Amazon域內(nèi)的 (s3.amazonaws.com) 公共URI的一部分,存儲(chǔ)段名稱必須在所有S3中是惟一的。(好消息是每個(gè)帳戶只能包含 100 個(gè)存儲(chǔ)段,因此不用擔(dān)心別人占用了所有的好名字)。

存儲(chǔ)段在S3中是URI的根。也就是說(shuō),存儲(chǔ)段的名稱將是指向S3中某個(gè)對(duì)象的URI的一部分。例如,如果我有一個(gè)名為 agdocs 的存儲(chǔ)段以及一個(gè)名為 whitepaper.pdf 的對(duì)象,URI將是:http://agdocs.s3.amazonaws.com/whitepaper.pdf。

S3還提供了指定存儲(chǔ)段和對(duì)象的所有者和權(quán)限的能力,就像對(duì)待硬件的文件和文件夾一樣。在S3中定義對(duì)象或存儲(chǔ)段時(shí),您可以指定一個(gè)訪問控制策略,注明誰(shuí)可以訪問您的S3資產(chǎn)以及如何訪問(例如,讀和寫權(quán)限)。相應(yīng)地,您可以通過(guò)許多方式提供對(duì)您的對(duì)象的訪問,使用RESTful API只是其中一種。

這里Amazon有一個(gè)神奇的DNS魔術(shù),用戶不用擔(dān)心S3資產(chǎn)的 URL 。通過(guò) Domain Name System (DNS) 和 CNAME(canonical name的縮寫)記錄,您可以將自定義程度更高的 URL 映射到S3的 URL 。這樣一來(lái),您就隱藏了您(或您的應(yīng)用程序)依賴S3的事實(shí)!#p#

開始使用開源S3和JetS3t

要開始使用S3,您需要一個(gè)帳戶。S3不是免費(fèi)的,因此在創(chuàng)建帳戶時(shí)您必須向Amazon提供一種支付手段(比如信用卡號(hào)碼)。不用擔(dān)心:不收初裝費(fèi);您只需要為使用付費(fèi)。對(duì)于本文的示例,只需要支付不到 1 美元的費(fèi)用。

在創(chuàng)建帳戶的過(guò)程中,您還需要?jiǎng)?chuàng)建憑據(jù):訪問密鑰和秘密密鑰(就像用戶名和密碼)。(您還可以獲取 x.509 證書;但是,只有在使用Amazon的 SOAPAPI時(shí)才需要使用該證書)。和任何訪問信息一樣,都必須保管好您的秘密密鑰。因?yàn)槿魏稳耸褂媚膽{據(jù)訪問S3時(shí),您都將為此付費(fèi)。因此,每當(dāng)創(chuàng)建存儲(chǔ)段或?qū)ο髸r(shí),默認(rèn)的行為是讓所有內(nèi)容都私有;您必須顯式獲取對(duì)外部世界的訪問。

有了訪問密鑰和秘密密鑰,您可以下載 JetS3t并使用它通過(guò)RESTful API與S3交互。

使用編程手段通過(guò) JetS3t 登錄S3可以分為兩步。首先,必須創(chuàng)建一個(gè) AWSCredentials 對(duì)象,然后將它傳遞到 S3Service 對(duì)象。AWSCredentials 對(duì)象非常簡(jiǎn)單。它將訪問密鑰和秘密密鑰視為 String。S3Service 對(duì)象實(shí)際上是一個(gè)接口類型。因?yàn)镾3同時(shí)提供RESTful API和一個(gè) SOAP API,JetS3t 庫(kù)可以提供兩種實(shí)現(xiàn)類型:RestS3Service 和 SoapS3Service。就本文而言(包括大部分S3事務(wù)),RESTful API的簡(jiǎn)潔性讓它成為一個(gè)很好的選擇。

創(chuàng)建一個(gè)連接的 RestS3Service 實(shí)例很簡(jiǎn)單,如清單所示:

步驟 1. 創(chuàng)建一個(gè) JetS3t 的 RestS3Service 實(shí)例

def awsAccessKey = “blahblah”

def awsSecretKey = “blah-blah”

def awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey)

def s3Service = new RestS3Service(awsCredentials)

現(xiàn)在可以執(zhí)行一些有趣的操作了:例如,創(chuàng)建存儲(chǔ)段、添加一個(gè)影片,然后獲取一個(gè)有時(shí)間限制的URL 。實(shí)際上,這聽起來(lái)像一個(gè)業(yè)務(wù)流程,不是嗎?這是一個(gè)與發(fā)布有限資產(chǎn)(比如影片)有關(guān)的業(yè)務(wù)流程。

創(chuàng)建存儲(chǔ)段

對(duì)于虛構(gòu)的電影業(yè)務(wù),我將創(chuàng)建一個(gè)稱為 bc50i 的存儲(chǔ)段。借助 JetS3t,該流程很簡(jiǎn)單。通過(guò) S3Service 類型,您有幾個(gè)選項(xiàng)。我更喜歡使用 getOrCreateBucket 調(diào)用,如清單 2 所示。顧名思義,調(diào)用該方法可能返回一個(gè)存儲(chǔ)段實(shí)例(表示為 S3Bucket 類型的實(shí)例)或在S3中創(chuàng)建代碼段。

S3平臺(tái)詳細(xì)使用步驟簡(jiǎn)介

步驟 2. 在S3服務(wù)器上創(chuàng)建存儲(chǔ)段

def bucket = s3Service.getOrCreateBucket(“bc50i”)

不要被我這個(gè)簡(jiǎn)單的代碼示例所蒙蔽。JetS3t 庫(kù)的擴(kuò)展性非常強(qiáng)。例如,您可以快速確定擁有多少存儲(chǔ)段 —— 只需通過(guò) listAllBuckets 調(diào)用請(qǐng)求一個(gè)S3 Service 實(shí)例即可。該方法返回一個(gè) S3Bucket 實(shí)例數(shù)組。對(duì)于任何存儲(chǔ)段實(shí)例,您可以詢問它的名稱和創(chuàng)建日期。更重要的是,您可以通過(guò)JetS3t 的 AccessControlList 類型控制與之相關(guān)的權(quán)限。例如,我可以獲取 bc50i 存儲(chǔ)段實(shí)例,并允許任何人可以公開讀取和編寫,如清單 3 所示:

步驟 3.修改存儲(chǔ)段的訪問控制列表

def bucket.acl = AccessControlList.REST_CANNED_PUBLIC_READ_WRITE

當(dāng)然,通過(guò) API,您也可以隨意刪除存儲(chǔ)段。Amazon甚至允許您指定創(chuàng)建存儲(chǔ)段的地理位置。Amazon簡(jiǎn)化了存儲(chǔ)實(shí)際數(shù)據(jù)的復(fù)雜性,但是您可以告訴Amazon要將存儲(chǔ)段(及其內(nèi)部所有的對(duì)象)放在美國(guó)或歐洲(當(dāng)前可用選項(xiàng))。

向存儲(chǔ)段添加對(duì)象

使用JetS3t 的API創(chuàng)建S3對(duì)象就像操作存儲(chǔ)段一樣簡(jiǎn)單。JetS3t 庫(kù)也很智能,可以負(fù)責(zé)處理與S3存儲(chǔ)段內(nèi)文件相關(guān)的內(nèi)容類型。例如,我想向S3上傳一段影片nerfwars2.mp4,以便用戶能夠在有限的時(shí)間內(nèi)觀看。創(chuàng)建一個(gè)S3對(duì)象與創(chuàng)建常見的 java.io.File 類型一樣簡(jiǎn)單,并能將S3Object 類型與存儲(chǔ)段關(guān)聯(lián),如清單 4 所示:

步驟 4. 創(chuàng)建一個(gè)S3對(duì)象

def s3obj = new S3Object(bucket, new File(“/path/to/nerfwars2.mp4”))

使用文件和存儲(chǔ)段初始化 S3Object 之后,要做的所有事情就是通過(guò) putObject 方法上傳,如清單 5 所示:

步驟 5. 上傳影片

s3Service.putObject(bucket, s3obj)

使用清單 5 可以完成上傳?,F(xiàn)在影片位于Amazon服務(wù)器了,影片的鍵就是它的名稱。當(dāng)然,您可以根據(jù)需要重寫該名稱以調(diào)用其他對(duì)象。實(shí)際上,JetS3t API(以及 AmazonS3RESTful API)公開了許多信息,供您創(chuàng)建對(duì)象時(shí)使用。我們知道,您還可以提供訪問控制列表。S3中的任何對(duì)象都可以保存API允許您創(chuàng)建的其他元數(shù)據(jù)。之后可以通過(guò)該元數(shù)據(jù)的S3API(以及派生的 JetS3t)查詢?nèi)魏螌?duì)象。

創(chuàng)建對(duì)象的URL

到現(xiàn)在為止,我的S3實(shí)例有一個(gè)包含影片的存儲(chǔ)段。實(shí)際上,我的影片可以通過(guò)以下URI獲?。篽ttp://bc50i.s3.amazonaws.com/nerfwars2.mp4。但是,只有我才能獲取。(在本例中,我只能通過(guò)編程方式訪問它,因?yàn)榕c所有內(nèi)容關(guān)聯(lián)的默認(rèn)訪問控制被設(shè)置為拒絕任何未授權(quán)訪問)。我的目的是為選擇的用戶提供一種方式查看新影片(在有限的時(shí)間內(nèi)),直到我開始收取訪問費(fèi)用(S3也會(huì)提供幫助)。

創(chuàng)建一個(gè)公共 URL 是S3提供的一個(gè)便捷功能;實(shí)際上,使用 S3,您可以創(chuàng)建一個(gè)公共 URL,但只在一段時(shí)間內(nèi)有效(例如,24 小時(shí)內(nèi))。對(duì)于我剛剛存儲(chǔ)在S3服務(wù)器上的影片,我將創(chuàng)建一個(gè) 48 小時(shí)內(nèi)有效的 URL 。然后我將向選定的用戶提供該 URL,以便他們下載并觀看(假定他們?cè)趦商靸?nèi)下載)。

處理帶有效期的文件

要?jiǎng)?chuàng)建一個(gè)針對(duì)S3對(duì)象的時(shí)間敏感型URL,您可以使用 JetS3t 的createSignedGetUrl 方法,這是一個(gè) S3Service 類型的靜態(tài)方法。該方法采用一個(gè)存儲(chǔ)段名稱、一個(gè)對(duì)象鍵(在本例中是影片名,還記得嗎?)、一些憑證(以 JetS3t 的AWSCredentials 對(duì)象的形式)、截止日期。如果您了解所需的存儲(chǔ)段和對(duì)象鍵,則可以通過(guò)清單 6 中的 Groovy 代碼快速獲取 URL:

步驟 6. 創(chuàng)建一個(gè)時(shí)間敏感型URL

def now = new Date()

def url = S3Service.createSignedGetUrl(

bucket.getName(), s3obj.key, awsCredentials, now + 2)

使用 Groovy,我可以通過(guò) + 2 語(yǔ)法輕松指定一個(gè) 48 小時(shí)的限定日期。得到的 URL 如下所示(只有一行):

https://bc50i.s3.amazonaws.com/nerfwars2.mp4?AWSAccessKeyId=1asd06A5MR2&Expires=1234738280&Signature=rZvk8Gkms=

如果您的帶寬和存儲(chǔ)需求不穩(wěn)定,則S3能提供很多幫助。例如,想想我演示的業(yè)務(wù)模型 — 影片在一年中特定的時(shí)間發(fā)布。在傳統(tǒng)的存儲(chǔ)模型中,您需要在某處機(jī)架上購(gòu)買許多空間(或提供通向它的硬件和管道),很可能下載量很大,但隨后會(huì)相對(duì)降低。但是,您不能根據(jù)需要付費(fèi)。使用 S3,該模型將根據(jù)需要付費(fèi) — 公司僅在需要時(shí)為存儲(chǔ)和帶寬付費(fèi)。更重要的是,S3的安全特性可以幫助您進(jìn)一步指定人們何時(shí)可以下載視頻,甚至可以指定誰(shuí)可以下載。

使用S3實(shí)現(xiàn)這些需求非常容易。在高水平上,創(chuàng)建一個(gè)受限的影片公共下載需要 4 個(gè)步驟:

1.登錄S3。

2.創(chuàng)建存儲(chǔ)段。

3.向存儲(chǔ)段添加所需的視頻(或?qū)ο?。

4.創(chuàng)建一個(gè)指向該視頻的時(shí)間敏感型 URL 。

就是這樣!#p#

使用后記:便利的按需付費(fèi)模式

與傳統(tǒng)存儲(chǔ)模型相比,S3的隨需付費(fèi)模型有很多明顯的優(yōu)勢(shì)。例如,在自己的硬盤上存儲(chǔ)音樂收藏,我必須預(yù)先花 130 美元購(gòu)買一個(gè) 500GB 的存儲(chǔ)單元。我沒有500GB 的數(shù)據(jù)可以存儲(chǔ),因此我為自己不需要的空間花費(fèi)了 25 美分 /GB(雖然很便宜)。我還需要維護(hù)設(shè)備并支付電費(fèi)。如果我使用 Amazon,我不需要預(yù)先為不重要的資產(chǎn)支付 130 美元。我只需要支付 10 美分 /GB,無(wú)需為管理和維護(hù)存儲(chǔ)硬件付費(fèi)。

現(xiàn)在想想在整個(gè)企業(yè)范圍內(nèi)實(shí)現(xiàn)這些服務(wù)的好處。以 Twitter 為例,在S3上為100 萬(wàn)個(gè)用戶帳戶存儲(chǔ)圖片。通過(guò)按照使用付費(fèi)的方式,Twitter 不需要花費(fèi)大量資金購(gòu)買硬件基礎(chǔ)設(shè)施來(lái)存儲(chǔ)和提供圖片服務(wù),也不需要支出人力和部件成本來(lái)配置和維護(hù)圖片。

云的好處還不止這些。您還可以實(shí)現(xiàn)低延遲和高可用性。假設(shè)存儲(chǔ)在Amazon云中的資產(chǎn)遍布全世界,那么為各個(gè)位置提供內(nèi)容的速度將會(huì)更快。更重要的是,由于您的資產(chǎn)分布在各種機(jī)器上,您的數(shù)據(jù)在一些機(jī)器(或部分網(wǎng)絡(luò))癱瘓時(shí)也能保持高可用性。

一言以蔽之,AmazonS3的好處很簡(jiǎn)單:低成本、高可用性、安全。除非您是一個(gè) SAN 專家,喜歡維護(hù)硬件資產(chǎn)來(lái)存儲(chǔ)數(shù)據(jù)內(nèi)容,但是Amazon可能比您做的更好。在資金緊張的時(shí)候,為什么還要將自己的資金提前預(yù)支在硬件上呢(不要忘了,硬件會(huì)隨時(shí)間貶值)?


文章題目:如何用Java平臺(tái)訪問開源云存儲(chǔ)
文章鏈接:http://www.5511xx.com/article/cossgip.html