因?yàn)樽罱宜┞毜墓菊谠趶膫鹘y(tǒng)軟件公司轉(zhuǎn)型成為SaaS類型的公司。越發(fā)的感覺到經(jīng)濟(jì)學(xué)中所說的細(xì)致分工乃是必然的結(jié)果,serverless將會(huì)是絕大部分中小公司的最后出路,一是因?yàn)槌杀镜土?,二來確實(shí)對(duì)運(yùn)營(yíng)的效率提升有很大的幫助,而我因?yàn)槁毼坏年P(guān)系,不可避免的接觸到了北美地區(qū)云計(jì)算的霸主,亞馬遜的各種云服務(wù),其中包括了大名鼎鼎的EC2和S3,后來因?yàn)轫?xiàng)目的不斷推進(jìn),上層決定推薦我進(jìn)行進(jìn)一步的培訓(xùn)以便適應(yīng)更快節(jié)奏的serverless的開發(fā)工作,我決定開一個(gè)系列介紹亞馬遜云服務(wù)的常用和主要的幾個(gè)產(chǎn)品。方便大家可以更快更清楚了解每個(gè)service的用處,目的是當(dāng)你看完這一個(gè)系列之后應(yīng)該可以自己在很短的時(shí)間內(nèi)搭建起一個(gè)serverless的APP后端。這一系列的定位是入門和介紹,并且有簡(jiǎn)單的入門實(shí)際例子,我參考的難度水平是AWS Training certificate的中等難度,所以說如果你決定要使用aws或者是僅僅有興趣想要了解,你都可以在一個(gè)系列中找到你想要的內(nèi)容!
這篇文章的主要內(nèi)容就是大致的給大家介紹亞馬遜云服務(wù):AWS,amazon web services的主要和常用的幾個(gè)服務(wù)。
本章摘要:
·EC2
S3
·DynamoDB
·Lambda function
·SQS/SNS
·API gateway
·Cloudfront
·Elastic load balancing
·EBS
·Cloudwatch
·CloudTrail
·Config as code:troposphere/cloudformation/teraform
1.EC2
EC2是我在日常工作中所接觸到的最多的一個(gè)服務(wù),當(dāng)然也是我們整個(gè)云服務(wù)中cost最多的一個(gè)部件,我工作中很大一部分的努力就是盡量的減少EC2的用量。
官方介紹:
Amazon Elastic Compute Cloud(Amazon EC2)是一種Web服務(wù),可以在云中提供安全并且可調(diào)整大小的計(jì)算容量。該服務(wù)旨在讓開發(fā)人員能夠更輕松地進(jìn)行Web規(guī)模的云計(jì)算。
我理解的重點(diǎn):
說白了就是public cloud,但是你交給亞馬遜幫你托管,每一個(gè)ec2都可以選擇不同的location,可以在全世界各地選擇。Amazon的Image成為AMI:Amazon machine image
你可以在spin up agent的時(shí)候選擇你想要使用的AMI,亞馬遜的官方提供了一些標(biāo)準(zhǔn)的AMI,但是每個(gè)公司基本上都有自己的pipeline去produce高度customize的AMI供EC2使用,每一個(gè)instance都可以隨時(shí)terminate,而且同時(shí)spin up起來的agent/instance的數(shù)量并沒有限制,這種靈活性和傳統(tǒng)的on-prem的系統(tǒng)形成了鮮明的對(duì)比,因?yàn)椴皇撬械膕ervice都會(huì)二十四小時(shí)的運(yùn)轉(zhuǎn),所以靈活的terminate或者shut down就位省錢鋪平了道路。
使用情況:
美國(guó)上千家的各行業(yè)龍頭公司都在使用,普及程度相當(dāng)廣泛。
2.S3和DynamoDB
官方介紹:
Amazon Simple Storage Service是互聯(lián)網(wǎng)存儲(chǔ)解決方案。該服務(wù)旨在降低開發(fā)人員進(jìn)行網(wǎng)絡(luò)規(guī)模級(jí)計(jì)算的難度。
Amazon S3提供了一個(gè)簡(jiǎn)單Web服務(wù)接口,可用于隨時(shí)在Web上的任何位置存儲(chǔ)和檢索任何數(shù)量的數(shù)據(jù)。此服務(wù)讓所有開發(fā)人員都能訪問同一個(gè)具備高擴(kuò)展性、可靠性、安全性和快速價(jià)廉的數(shù)據(jù)存儲(chǔ)基礎(chǔ)設(shè)施,Amazon用它來運(yùn)行其全球的網(wǎng)站網(wǎng)絡(luò)。此服務(wù)旨在為開發(fā)人員帶來最大化的規(guī)模效益。
那么什么是DynamoDB呢
Amazon DynamoDB是一種完全托管的NoSQL數(shù)據(jù)庫(kù)服務(wù),提供快速且可預(yù)測(cè)的性能,同時(shí)還能夠?qū)崿F(xiàn)無縫擴(kuò)展。使用DynamoDB,您可以免除操作和擴(kuò)展分布式數(shù)據(jù)庫(kù)的管理工作負(fù)擔(dān),因而無需擔(dān)心硬件預(yù)置、設(shè)置和配置、復(fù)制、軟件修補(bǔ)或集群擴(kuò)展等問題。此外,DynamoDB提供了加密靜態(tài),這可以消除在保護(hù)敏感數(shù)據(jù)時(shí)涉及的操作負(fù)擔(dān)和復(fù)雜性。
使用DynamoDB,您可以創(chuàng)建數(shù)據(jù)庫(kù)表來存儲(chǔ)和檢索任意量級(jí)的數(shù)據(jù),并提供任意級(jí)別的請(qǐng)求流量。您可以擴(kuò)展或縮減您的表的吞吐容量,而不會(huì)導(dǎo)致停機(jī)或性能下降,還可以使用AWS管理控制臺(tái)來監(jiān)控資源使用情況和各種性能指標(biāo)。
Amazon DynamoDB提供了按需備份功能。它允許您創(chuàng)建表的完整備份以進(jìn)行長(zhǎng)期保留和存檔,從而滿足監(jiān)管合規(guī)性需求。
您可以為Amazon DynamoDB表創(chuàng)建按需備份以及啟用時(shí)間點(diǎn)恢復(fù)。時(shí)間點(diǎn)恢復(fù)有助于保護(hù)Amazon DynamoDB表免遭意外寫入或刪除操作。使用時(shí)間點(diǎn)恢復(fù),您可以使該表還原到最近35天中的任何時(shí)間點(diǎn)。
我理解的重點(diǎn):
很多aws的新手在入門的時(shí)候,經(jīng)常沒辦法搞明白S3和DynamoDB之間的區(qū)別和聯(lián)系
S3本質(zhì)上是一種File storage然而Dynamo是一種nosql database,其中s3比較適合于你去存儲(chǔ)un-structured data,里面的文件系統(tǒng)并沒有文件夾的組成形式,所有的存儲(chǔ)對(duì)象都會(huì)變成object,其中所有的組織形式都是flat organization的container被稱之為Buckets,作者之前任職于EMC時(shí)所參與開發(fā)的ECS,elastic cloud storage也是同類產(chǎn)品。每一個(gè)object有一個(gè)獨(dú)特的key用于retrive對(duì)應(yīng)的object,每一個(gè)object的最大容量為5TB。這就使得s3更適用于存儲(chǔ)大的文件。
對(duì)于dynamo來說,作為一種nosql database它的出現(xiàn)就是為了高的throughput還有很低的latency,dynamo會(huì)非常的適合當(dāng)開發(fā)者需要處理semi structure的數(shù)據(jù)的時(shí)候。比較特殊的是dynamo支持兩種primary key一種是Partition key另外一種是partition key和sort key。
同時(shí),dynamo還提供二級(jí)的index,LSI和GSI允許開發(fā)者query和scan table。同時(shí)數(shù)據(jù)的replication也是可以在dynamo中實(shí)現(xiàn)的,每一個(gè)value的存儲(chǔ)大小被限制在了400k之內(nèi),這使得dynamo最合適的應(yīng)用場(chǎng)景是小的數(shù)據(jù)的存儲(chǔ)。
總的對(duì)比下來,s3和dynamo之間在use case,數(shù)據(jù)的大小,以及價(jià)格之間都有很大的區(qū)別,在開發(fā)的時(shí)候謹(jǐn)慎選擇,對(duì)之后的開發(fā)效率和經(jīng)濟(jì)上面的影響都很大。
3.lambda function
官方介紹:
AWS Lambda是一項(xiàng)計(jì)算服務(wù),可使您無需預(yù)配置或管理服務(wù)器即可運(yùn)行代碼。AWS Lambda只在需要時(shí)執(zhí)行您的代碼并自動(dòng)縮放,從每天幾個(gè)請(qǐng)求到每秒數(shù)千個(gè)請(qǐng)求。您只需按消耗的計(jì)算時(shí)間付費(fèi)–代碼未運(yùn)行時(shí)不產(chǎn)生費(fèi)用。借助AWS Lambda,您幾乎可以為任何類型的應(yīng)用程序或后端服務(wù)運(yùn)行代碼,并且不必進(jìn)行任何管理。AWS Lambda在可用性高的計(jì)算基礎(chǔ)設(shè)施上運(yùn)行您的代碼,執(zhí)行計(jì)算資源的所有管理工作,其中包括服務(wù)器和操作系統(tǒng)維護(hù)、容量預(yù)置和自動(dòng)擴(kuò)展、代碼監(jiān)控和記錄。您只需要以AWS Lambda支持的一種語言(目前為Node.js、Java、C#、Go和Python)提供您的代碼。
您可以使用AWS Lambda運(yùn)行代碼以響應(yīng)事件,例如更改Amazon S3存儲(chǔ)桶或Amazon DynamoDB表中的數(shù)據(jù);以及使用Amazon API Gateway運(yùn)行代碼以響應(yīng)HTTP請(qǐng)求;或者使用通過AWS SDK完成的API調(diào)用來調(diào)用您的代碼。借助這些功能,您可以使用Lambda輕松地為Amazon S3和Amazon DynamoDB等AWS服務(wù)構(gòu)建數(shù)據(jù)處理觸發(fā)程序,處理Kinesis中存儲(chǔ)的流數(shù)據(jù),或創(chuàng)建您自己的按AWS規(guī)模、性能和安全性運(yùn)行的后端。
您也可以構(gòu)建由事件觸發(fā)的函數(shù)組成的無服務(wù)器應(yīng)用程序,并使用CodePipeline和AWS CodeBuild自動(dòng)部署這些應(yīng)用程序。
有關(guān)AWS Lambda執(zhí)行環(huán)境的更多信息,請(qǐng)參閱Lambda執(zhí)行環(huán)境和可用庫(kù)。
我的理解:
lambda function可以說是在serverless的過程中標(biāo)志性的一環(huán),不僅僅是提供了一個(gè)可以后端處理的工具,其重要性其實(shí)很大,開發(fā)者不需要自己管理計(jì)算資源,不需要執(zhí)行計(jì)算資源,沒有管理的成本,簡(jiǎn)直就是serverless的典型代表,不僅僅開發(fā)的效率會(huì)有質(zhì)的提升,整個(gè)應(yīng)用的開發(fā)成本也會(huì)下降很多。
4.SQS和SNS
官方介紹:
Amazon Simple Queue Service(Amazon SQS)提供安全、持久且可用的托管隊(duì)列,可讓您集成和分離分布式軟件系統(tǒng)和組件。Amazon SQS提供常見的構(gòu)造,例如死信隊(duì)列和成本分配標(biāo)簽。它提供了一個(gè)通用Web服務(wù)API,并且可通過AWS開發(fā)工具包支持的任何編程語言訪問。
Amazon SQS支持標(biāo)準(zhǔn)隊(duì)列和FIFO隊(duì)列。
主要的特性有哪些?
·安全性–您可以控制誰能向Amazon SQS隊(duì)列發(fā)送消息以及誰能從隊(duì)列接收消息。
利用服務(wù)器端加密(SSE),可以使用AWS Key Management Service(AWS KMS)中托管的密鑰保護(hù)隊(duì)列中消息的內(nèi)容,從而通過此方式傳輸敏感數(shù)據(jù)。
·持久性–為確保消息的安全,Amazon SQS將消息存儲(chǔ)在多個(gè)服務(wù)器上。標(biāo)準(zhǔn)隊(duì)列支持至少一次消息傳送,而FIFO隊(duì)列支持僅一次消息處理。
·可用性–Amazon SQS使用冗余基礎(chǔ)設(shè)施為生成和使用消息提供高度并發(fā)的消息訪問和高可用性。
·可擴(kuò)展性–Amazon SQS可獨(dú)立處理各個(gè)緩沖的請(qǐng)求,并可透明擴(kuò)展以處理任何負(fù)載增加或峰值,無需任何預(yù)配置指令。
·可靠性–Amazon SQS在處理期間鎖定消息,以便多個(gè)生成者可同時(shí)發(fā)送消息,多個(gè)使用者可同時(shí)接收消息。
·自定義–您的隊(duì)列不必完全相同—例如,您可以設(shè)置隊(duì)列的默認(rèn)延遲??梢允褂肁mazon Simple Storage Service(Amazon S3)或Amazon DynamoDB存儲(chǔ)大于256 KB的消息的內(nèi)容,Amazon SQS保留指向Amazon S3對(duì)象的指針,您也可以將一個(gè)大消息拆分為幾個(gè)小消息。
我的理解:
作為message queue的一種具體產(chǎn)品,在aws的生態(tài)中,sqs起到了至關(guān)重要的作用,不僅僅彌補(bǔ)了從lambda function或者api gateway之間的裂縫和短板,同時(shí)還起到了一個(gè)信息延遲和傳輸?shù)淖饔谩?/span>
那么sqs和sns的區(qū)別是什么呢?
簡(jiǎn)單的概括起來,sns是broadcasting稱為發(fā)布,訂閱的消息收發(fā)范式,而相對(duì)應(yīng)的sqs則是單通道的傳輸。
5.API Gateway
官方介紹:
mazon API Gateway是一項(xiàng)AWS服務(wù),能讓您創(chuàng)建、發(fā)布、維護(hù)、監(jiān)控和保護(hù)您自己的任何規(guī)模的REST和WebSocketAPI。您可以創(chuàng)建可靠、安全且可擴(kuò)展的API,用以訪問AWS、其他Web服務(wù)以及存儲(chǔ)在AWS云中的數(shù)據(jù)。您可以創(chuàng)建API以在您自己的客戶端應(yīng)用程序(應(yīng)用)中使用?;蛘?,您可以將您的API提供給第三方應(yīng)用程序開發(fā)人員。
API Gateway的優(yōu)勢(shì)
Amazon API Gateway具備下列優(yōu)點(diǎn):
·支持有狀態(tài)(WebSocket)和無狀態(tài)(REST)API
·與AWS服務(wù)(如AWS Lambda、Amazon Kinesis和Amazon DynamoDB)集成
·能夠使用IAM角色和策略、AWS Lambda授權(quán)方或Amazon Cognito用戶池來授權(quán)對(duì)您的API的訪問
·用于將API作為SaaS銷售的使用計(jì)劃和API密鑰
·用以安全地推出更改的金絲雀版本部署
·API使用情況和API更改的CloudTrail日志記錄和監(jiān)控
·CloudWatch訪問日志記錄和執(zhí)行日志記錄,包括設(shè)置警報(bào)的能力
·能夠使用AWS CloudFormation模板以支持創(chuàng)建API
·支持自定義域名
我的理解:
當(dāng)我第一次接觸到API gateway的時(shí)候,我感到了前所未有的喜悅,以為之前自己在做web開發(fā)的時(shí)候,寫api都是一個(gè)非??菰餆o謂的過程,總是感覺到自己的時(shí)間浪費(fèi)了不少,但是自從開始在aws上面開發(fā)自己的網(wǎng)站,直接使用現(xiàn)成的api gateway確實(shí)能夠讓開發(fā)的效率提升不少,并且因?yàn)槠浔旧砗蚻ambda以及s3等服務(wù)的緊密結(jié)合,使得在aws里面使用起來非常的方便。