因為最近我所供職的公司正在在從傳統軟體公司轉型成為SaaS類型的公司。 越發的感覺到經濟學中所說的細緻分工乃是必然的結果,serverless將會是絕大部分中小公司的最後出路,一是因為成本低廉,二來確實對運營的效率提升有很大的幫助,而我因為職位的關係,不可避免的接觸到了北美地區雲計算的霸主,亞馬遜的各種雲服務, 其中包括了大名鼎鼎的EC2和S3,後來因為項目的不斷推進,上層決定推薦我進行進一步的培訓以便適應更快節奏的serverless的開發工作,我決定開一個系列介紹亞馬遜雲服務的常用和主要的幾個產品。方便大家可以更快更清楚瞭解每個service的用處,目的是當你看完這一個系列之後應該可以自己在很短的時間內搭建起一個serverless的APP後端。這一系列的定位是入門和介紹,並且有簡單的入門實際例子,我參考的難度水平是AWS Training certificate的中等難度,所以說如果你決定要使用aws或者是僅僅有興趣想要了解,你都可以在一個系列中找到你想要的內容!之後我會邀請在亞馬遜和谷歌微軟供職的朋友撰寫相應的他們瞭解的強項,盡量給大家帶來一手的資訊。

這篇文章的主要內容就是大致的給大家介紹亞馬遜雲服務:AWS,amazon web services 的主要和常用的幾個服務,我們會在後面的每一篇文章中再單獨介紹這些服務的具體用法和使用場景。

本章摘要:

  • EC2
  • S3
  • DynamoDB
  • Lambda function
  • SQS/SNS
  • API gateway
  • Cloudfront
  • Elastic load balancing
  • EBS
  • Cloudwatch
  • CloudTrail
  • Config as code: troposphere/cloudformation/teraform

1EC2

EC2是我在日常工作中所接觸到的最多的一個服務,當然也是我們整個雲服務中cost最多的一個部件,我工作中很大一部分的努力就是盡量的減少EC2的用量。

官方介紹:

Amazon Elastic Compute Cloud (Amazon EC2) 是一種 Web 服務,可以在雲中提供安全並且可調整大小的計算容量。該服務旨在讓開發人員能夠更輕鬆地進行 Web 規模的雲計算。

我理解的重點:

說白了就是public cloud,但是你交給亞馬遜幫你託管,每一個ec2都可以選擇不同的location,可以在全世界各地選擇。Amazon的Image成為AMI:Amazon machine image

你可以在spin up agent 的時候選擇你想要使用的AMI,亞馬遜的官方提供了一些標準的AMI,但是每個公司基本上都有自己的pipeline去produce 高度customize的AMI供EC2使用,每一個instance都可以隨時terminate,而且同時spin up起來的agent/instance的數量並沒有限制,這種靈活性和傳統的on-prem的系統形成了鮮明的對比,因為不是所有的service都會二十四小時的運轉,所以靈活的terminate或者shut down就位省錢鋪平了道路。

使用情況:

美國上千家的各行業龍頭公司都在使用,普及程度相當廣泛。

2. S3 和DynamoDB

官方介紹:

Amazon Simple Storage Service 是互聯網存儲解決方案。該服務旨在降低開發人員進行網路規模級計算的難度。

Amazon S3 提供了一個簡單 Web 服務介面,可用於隨時在 Web 上的任何位置存儲和檢索任何數量的數據。此服務讓所有開發人員都能訪問同一個具備高擴展性、可靠性、安全性和快速價廉的數據存儲基礎設施, Amazon 用它來運行其全球的網站網路。此服務旨在為開發人員帶來最大化的規模效益。

那麼什麼是DynamoDB呢

Amazon DynamoDB 是一種完全託管的 NoSQL 資料庫服務,提供快速且可預測的性能,同時還能夠實現無縫擴展。使用 DynamoDB,您可以免除操作和擴展分散式資料庫的管理工作負擔,因而無需擔心硬體預置、設置和配置、複製、軟體修補或集羣擴展等問題。此外,DynamoDB 提供了加密靜態,這可以消除在保護敏感數據時涉及的操作負擔和複雜性。有關更多信息,請參閱Amazon DynamoDB 靜態加密。

使用 DynamoDB,您可以創建資料庫表來存儲和檢索任意量級的數據,並提供任意級別的請求流量。您可以擴展或縮減您的表的吞吐容量,而不會導致停機或性能下降,還可以使用 AWS 管理控制檯來監控資源使用情況和各種性能指標。

Amazon DynamoDB 提供了按需備份功能。它允許您創建表的完整備份以進行長期保留和存檔,從而滿足監管合規性需求。有關更多信息,請參閱 DynamoDB 的按需備份和還原。

您可以為 Amazon DynamoDB 表創建按需備份以及啟用時間點恢復。時間點恢復有助於保護 Amazon DynamoDB 表免遭意外寫入或刪除操作。使用時間點恢復,您可以使該表還原到最近 35 天中的任何時間點。有關更多信息,請參閱時間點恢復:工作原理。

我理解的重點

很多aws的新手在入門的時候,經常沒辦法搞明白S3和DynamoDB之間的區別和聯繫

S3本質上是一種File storage 然而Dynamo是一種nosql database,其中s3比較適合於你去存儲un-structured data,裡面的文件系統並沒有文件夾的組成形式,所有的存儲對象都會變成object,其中所有的組織形式都是flat organization 的container 被稱之為Buckets,作者之前任職於EMC時所參與開發的ECS,elastic cloud storage 也是同類產品。每一個object有一個獨特的key用於retrive對應的object,每一個object的最大容量為5TB。這就使得s3更適用於存儲大的文件。

對於dynamo來說,作為一種nosql database它的出現就是為了高的throughput還有很低的latency,dynamo會非常的適合當開發者需要處理semi structure的數據的時候。比較特殊的是dynamo支持兩種primary key一種是Partition key另外一種是partition key和sort key。

同時,dynamo還提供二級的index,LSI和GSI允許開發者query和scan table。同時數據的replication也是可以在dynamo中實現的,每一個value的存儲大小被限制在了400k之內,這使得dynamo最合適的應用場景是小的數據的存儲。

總的對比下來,s3和dynamo之間在use case,數據的大小,以及價格之間都有很大的區別,在開發的時候謹慎選擇,對之後的開發效率和經濟上面的影響都很大。

3 lambda function

官方介紹:

AWS Lambda 是一項計算服務,可使您無需預配置或管理伺服器即可運行代碼。AWS Lambda 只在需要時執行您的代碼並自動縮放,從每天幾個請求到每秒數千個請求。您只需按消耗的計算時間付費 – 代碼未運行時不產生費用。藉助 AWS Lambda,您幾乎可以為任何類型的應用程序或後端服務運行代碼,並且不必進行任何管理。AWS Lambda 在可用性高的計算基礎設施上運行您的代碼,執行計算資源的所有管理工作,其中包括伺服器和操作系統維護、容量預置和自動擴展、代碼監控和記錄。您只需要以 AWS Lambda 支持的一種語言 (目前為 Node.js、Java、C#、Go 和 Python) 提供您的代碼。

您可以使用 AWS Lambda 運行代碼以響應事件,例如更改 Amazon S3 存儲桶或 Amazon DynamoDB 表中的數據;以及使用 Amazon API Gateway 運行代碼以響應 HTTP 請求;或者使用通過 AWS SDK 完成的 API 調用來調用您的代碼。藉助這些功能,您可以使用 Lambda 輕鬆地為 Amazon S3 和 Amazon DynamoDB 等 AWS 服務構建數據處理觸發程序,處理 Kinesis 中存儲的流數據,或創建您自己的按 AWS 規模、性能和安全性運行的後端。

您也可以構建由事件觸發的函數組成的無伺服器應用程序,並使用 CodePipeline 和 AWS CodeBuild 自動部署這些應用程序。有關更多信息,請參閱AWS Lambda 應用程序。

有關 AWS Lambda 執行環境的更多信息,請參閱 Lambda 執行環境和可用庫。有關 AWS Lambda 如何確定執行您的代碼所需的計算資源的信息,請參閱基本 AWS Lambda 函數配置。

我的理解:

lambda function可以說是在serverless的過程中標誌性的一環,不僅僅是提供了一個可以後端處理的工具,其重要性其實很大,開發者不需要自己管理計算資源,不需要執行計算資源,沒有管理的成本,簡直就是serverless的典型代表,不僅僅開發的效率會有質的提升,整個應用的開發成本也會下降很多。

4 SQS 和SNS

官方介紹:

Amazon Simple Queue Service (Amazon SQS) 提供安全、持久且可用的託管隊列,可讓您集成和分離分散式軟體系統和組件。Amazon SQS 提供常見的構造,例如死信隊列和成本分配標籤。它提供了一個通用 Web 服務 API,並且可通過 AWS 開發工具包支持的任何編程語言訪問。

Amazon SQS 支持標準隊列和 FIFO 隊列。有關更多信息,請參閱 我需要哪種類型的隊列?。

主要的特性有哪些?

  • 安全性 – 您可以控制誰能向 Amazon SQS 隊列發送消息以及誰能從隊列接收消息。利用 伺服器端加密 (SSE),可以使用 AWS Key Management Service (AWS KMS) 中託管的密鑰保護隊列中消息的內容,從而通過此方式傳輸敏感數據。
  • 持久性 – 為確保消息的安全,Amazon SQS 將消息存儲在多個伺服器上。標準隊列支持至少一次消息傳送,而 FIFO 隊列支持僅一次消息處理。
  • 可用性 – Amazon SQS 使用冗餘基礎設施為生成和使用消息提供高度並發的消息訪問和高可用性。
  • 可擴展性 – Amazon SQS 可獨立處理各個緩衝的請求,並可透明擴展以處理任何負載增加或峯值,無需任何預配置指令。
  • 可靠性 – Amazon SQS 在處理期間鎖定消息,以便多個生成者可同時發送消息,多個使用者可同時接收消息。
  • 自定義 – 您的隊列不必完全相同—例如,您可以設置隊列的默認延遲。可以使用 Amazon Simple Storage Service (Amazon S3) 或 Amazon DynamoDB 存儲大於 256 KB 的消息的內容,Amazon SQS 保留指向 Amazon S3 對象的指針,您也可以將一個大消息拆分為幾個小消息。

我的理解:

作為message queue的一種具體產品,在aws的生態中,sqs起到了至關重要的作用,不僅僅彌補了從lambda function或者api gateway之間的裂縫和短板,同時還起到了一個信息延遲和傳輸的作用。

那麼sqs和sns的區別是什麼呢?

簡單的概括起來,sns是broadcasting稱為發布,訂閱的消息收發範式,而相對應的sqs則是單通道的傳輸。

5API Gateway

官方介紹:

mazon API Gateway 是一項 AWS 服務,能讓您創建、發布、維護、監控和保護您自己的任何規模的REST和WebSocketAPI。您可以創建可靠、安全且可擴展的 API,用以訪問 AWS、其他 Web 服務以及存儲在AWS 雲中的數據。您可以創建 API 以在您自己的客戶端應用程序(應用)中使用。或者,您可以將您的 API 提供給第三方應用程序開發人員。

API Gateway 的優勢

Amazon API Gateway 具備下列優點:

  • 支持有狀態 (WebSocket) 和無狀態 (REST) API
  • 與 AWS 服務(如 AWS Lambda、Amazon Kinesis 和 Amazon DynamoDB)集成
  • 能夠使用 IAM 角色和策略、AWS Lambda 授權方或 Amazon Cognito 用戶池來授權對您的 API 的訪問
  • 用於將 API 作為 SaaS 銷售的使用計劃和 API 密鑰
  • 用以安全地推出更改的金絲雀版本部署
  • API 使用情況和 API 更改的 CloudTrail 日誌記錄和監控
  • CloudWatch 訪問日誌記錄和執行日誌記錄,包括設置警報的能力
  • 能夠使用 AWS CloudFormation 模板以支持創建 API
  • 支持自定義域名

我的理解:

當我第一次接觸到API gateway的時候,我感到了前所未有的喜悅,以為之前自己在做web開發的時候,寫api都是一個非常枯燥無謂的過程,總是感覺到自己的時間浪費了不少,但是自從開始在aws上面開發自己的網站,直接使用現成的api gateway確實能夠讓開發的效率提升不少,並且因為其本身和lambda以及s3等服務的緊密結合,使得在aws裡面使用起來非常的方便。

我們會在下一章開始介紹剩餘的一些重要服務:

  • Cloudfront
  • Elastic load balancing
  • EBS
  • Cloudwatch
  • CloudTrail
  • Config as code: troposphere/cloudformation/teraform

歡迎關注和期待。


推薦閱讀:
相關文章