天天看點

《AWS雲端企業實戰聖經——亞馬遜如何構造雲端計算》精彩集錦part1(1-4章)

         《AWS雲端企業實戰聖經——亞馬遜如何構造雲端計算》是由中國台灣資深AWS操作專家林允溥(豆瓣)寫的一本書,知名度較高。上研以來,因為導師的關系接觸了比較多的雲計算概念比較多,對雲計算行業巨擘Google、Amazon、VMware等公司聽得比較多,但對他們的雲計算産品/解決方案的認識卻僅停留在粗淺的了解層次上。近期在圖書館偶遇這本書,故想認真一覽,希望能窺得AWS的一些更本源的東西。(目前雲計算知識還不成體系,時間匆促,故僅記錄本書中令我眼光一亮的内容,想了解更多請翻閱此書)

第一章:誰應該使用雲計算

        這是打開當今對雲計算各種偏頗認識的鑰匙,雲計算不是萬能的,但沒有雲計算确實萬萬不能的。正如作者所言“雲端是一種工具,它适合在特定環境解決特定問題”。

1. 首先得意識到如今網絡已經平民化、普及化,其次要認識到雲計算誕生的需求來自多方面(web産生資料量、使用者通路量、pay for the peak...);

2. 幾個負面的雲計算定義例子(當然不止這些):“雲計算=使用VM”、“雲計算=分布式計算”、“使用雲計算=應用程式有高可擴充性” 、“所有系統都适合雲計算”;

3. 雲計算的定義非常多,這一方面是由于定義者出發的角度(使用者、伺服器提供者、裝置商)以及企業的利益訴求不一,另一方面則是因為學術界因研究需求造出的定義。本書給出的定義“依使用者所需,以網際網路為基礎,來提供大量的運算能力,分享資源和服務”,這跟作者的身份相符,從使用者/管理者的角度來定義,比較公允。

4. 雲計算三個層次:(比較清晰)

    IaaS(Amazon、Rackspace):"通過網際網路,以服務的形式提供運算能力、儲存設備、網絡及其他基礎設施。" 核心技術虛拟化,對使用者”pay as you go”,機關image/VM;

    PaaS(Google、MS、Salesforce.com):概念基本同IaaS,但需要特定的執行環境。機關為應用程式,一般提供SDK、IDE及基礎管理操作;

    SaaS(Google):“完成的應用程式,通過網際網路以服務的形式提供給使用者”,使用者隻需要Browser,無需安裝軟體。

5. 注意雲計算與傳統計算架構如虛拟主機、專屬伺服器和主機托管的差別(這些傳統架構現在搖身一變,貼上了雲計算的标簽)。關鍵詞:可伸縮性(Elasticity)

6. 雲計算的優勢(成本、可用性、持久性)和風險參半;

7. 适合雲計算的場景(精彩),可從優點出發找各種應用場景的契合點。如Startup companies(成本、快速疊代...)、高可擴充性網絡應用、大量運算需求、備份和容災、開發與測試(環境快速搭建)。

第二章:雲計算上司者AWS

作者認為Amazon web service(AWS)是目前最好的雲計算服務,這并非盲目推崇,AWS是學習雲計算精髓的标本。

1.     AWS的組合式服務概念:類似堆積木,提供多種服務滿足特定需求且各種服務可組合使用。涉及運算、存儲、資料庫、網絡、消息、監控、付款等;

2.     AWS服務提供WS接口,包括SOAP、REST和Query API(類REST)。支援多種開發語言,SDK和IDE;

3.     AWS的兩個重要概念:Region(地理上分離的大區域,同地區的AWS服務中EC2與這些服務通信不受網絡傳輸費)和Availability Zone(地區裡面資料中心的代号),一個Region含多個Availability zone;

4.     發現AWS使用了各種憑證和識别碼,看不懂,不關心,直接跳過。

第三章:AWS上手必備工具

AWS的服務都提供了SOAP和REST兩種接口,幾乎所有程式語言都可與其溝通。官方加第三方工具很多很多。

1.     各種服務的差別

[1].    S3 vs EBS:S3是完全獨立的“對象存儲服務”,通過WS通路,具有高持久性的永久存儲。EBS完全依賴于EC2的存儲服務,是SAN的概念,可對EBS Volume履歷快照;

[2].    EBS vs Instance storage:持久存儲 vs 本機EC2暫時存儲;

[3].    S3 vs CloudFront:S3是持久性的長期存儲,後者是暫時性緩存(類似CDN概念,資料主要來自S3);

[4].    SimpleDB vs RDS:前者為Document store資料庫,後者是關系型資料庫(MySql)

[5].    EC2 vs GAE:前者是低級的IaaS,後者是進階的PaaS。

2.     AWS傳輸收費節約:盡量把EC2的VM放在同一Availability zone,并避免不同AZ和Region的EC2 vm之間過多資料傳輸,盡量使用内部IP位址;

3.     AWS計算signature時加入timestamp,須調整好AWS聯機時間,建議使用NTP(Network Time protocol)自動校正;

4.     分級收費(很多服務都采用這種收費規則,類似Google gmail);

5.     通路控制工具:IAM(Identify and Access Management)和APL(Access Policy Language),正在完善,這部分工作比較難;

6.     AWS主要的圖形接口工具:AWS Management Console(web app形式,支援服務受限)、AWS Toolkit for Eclipse(Java開發,資源多,需要通路密鑰)等;

7.     AWS AP/CLI:EC2 API Tools(通過通路EC2的SOAP interface操作EC2的所有功能)、EC2 AMI Tools(包裝AMI);

8.     AWS SDK(作者推薦開發使用):Java/.Net/PHP/Android/iOS, AWS Developer Cente;

9.     其它資源主要是AWS網站的Tutorial,Article&Blog。

第四章:AWS基礎:S3與雲端存儲服務

多數人對雲計算的了解為“把資料放在網絡上”,存儲功能是雲計算的基礎服務。

1.     AWS存儲功能主要包括S3、SimpleDB和RDS;

2.     S3存儲檔案,解決動态資料存儲問題(可擴充),滿足系統存儲無限量檔案需求。正常解決資料快速動态增長的方法:資料庫表(簡單but大量IO)、資料以檔案存儲到大容量儲存設備(SAN)并将metaData寫入DB(檔案可直接讀取,但開發複雜、資料一緻性難以保持、ACL弱)、使用獨立存儲服務(如S3,簡單但架構複雜,依賴S3的可用性);

3.     增加CloudFront類CDN服務,可部分解決S3失效造成的資料無法讀寫問題;

4.     S3的simplicity源自REST接口/SOAP接口提供,注重HA;

5.     收費名額:存儲容量、操作次數、網絡傳輸量;

6.     S3的兩個組成層次:Bucket(名字唯一,一般一個應用/服務開一個容器就夠了,作為提供服務的端點)、Object(存儲在bucket中真正的檔案,包含其metadata,可通過對象命名實作階層化);

7.     S3是全AWS有效而非Region-specific(了解其名字的唯一性)。EC2則不是這樣。

8.     S3對象存儲級别分标準(durability11個9)和低備份(RRS,4個9);

9.     S3的容器可設定為記錄對象版本(更新、删除都會保留原始版本,除非指定版本号);

10.   S3無查詢功能,可通過key listing及peek object來實作,或将索引存到MySQL/SimpleDB,查到再讀S3

11.   多部分上傳(分成小檔案,multipart upload),類似TCP中的MTU;

12.   NoSql潮流興起原因:RDBMS可擴充性問題特别難解決(一般通過把資料分割存儲多台資料庫,讓多台資料庫同時查寫,而在應用程式中處理分割的資料,這樣資料庫變成了單純的資料寫入/讀取)。非關系型資料庫産品興起(Hbase、MongoDB…),它們具有的共性:

1>    Free schema(對應關系資料庫的固定)

2>    Denormalization(這個概念一直不太了解):NoSQL不提供join功能,建議把相關的屬性存儲在一起,否則要經過多次查詢并在應用層進行join;

3>    資料水準分割(利于高可用,高可擴充);

4>    Eventually consistent:關系型資料庫強調ACID,非關系型資料庫強調BASE;

13.   CAP理論:Consistency、Availablity、Partition Tolerance在分布式系統中二選一;

14.   SimpleDB:NoSQL資料庫服務,使用簡單、有彈性、高可擴充和高可用性。缺點是存儲容量受限、無資料類型(均以String存儲,這樣增加了應用層的資料處理工作);

15.   SimpleDB收費名額:機器使用率、存儲空間使用量、網絡傳輸量;

16.   SimpleDB名詞:Domains(=Tables)、Items(=Rows)、Attributes(=Columns)、Values(=values)、Item name(=primary key);

17.   SimpleDB提供最終一緻性讀取和一緻性讀取(犧牲延遲和性能)

18.   MySQL針對資料量和讀寫頻率的增加,一般采用MySQL replication或MySQL NDB cluster來應對(維護難度大),AWS推出的Oracle Database 11g的RDS服務helpful

19.   NoSQL目前存在的挑戰(相對于傳統關系資料庫):關系資料庫産品選擇多(NoSQL産品不夠成熟)、大量資料需求較少(大型網絡程式才需要)、無查詢語言标準(移植性不足)等;