生活随笔
收集整理的這篇文章主要介紹了
AWS SQS, SWF and SNS
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
SQS (Simple Queue Service)
概念 簡(jiǎn)單消息服務(wù),類似于Rabbit MQ,主要作用是作為消息中間件,解耦應(yīng)用程序的各個(gè)組件 SQS不保證消息FIFO,但能保證消息的高可靠 消息的生命周期 生產(chǎn)者將消息發(fā)送到消息隊(duì)列,此時(shí)消息的狀態(tài)變?yōu)閕n-flight 消費(fèi)者從消息隊(duì)列中獲取消息,此時(shí)消息的狀態(tài)變?yōu)閜rocessed,在visibility timeout的時(shí)間段以內(nèi),其它消費(fèi)者無法獲取到相同的消息 消費(fèi)者處理完畢消息后,從SQS中消息刪除 Visibility Timeout 某個(gè)消費(fèi)者從消息隊(duì)列中取出一個(gè)消息后,visiblity timeout開始計(jì)時(shí),此時(shí)該消息不能被其它消費(fèi)者獲取。如果超時(shí)了該消息還沒有被開始的消費(fèi)者刪除,則該消息的狀態(tài)又變?yōu)閕n-flight,其它消費(fèi)者可以獲取該消息繼續(xù)處理。 該機(jī)制很好理解,試想,如果某個(gè)消費(fèi)者獲取了某個(gè)消息,但可能某種原因處理失敗了卻又一直不刪除此消息,該消息就會(huì)一直處于processed狀態(tài),消息即不能被刪除,又不能被其它消費(fèi)者處理,這就是一個(gè)問題,所以引入了timeout機(jī)制。 超時(shí)時(shí)間范圍30s-12h,默認(rèn)30s Delay Queue 如果設(shè)置了delay queue,所有消息都會(huì)被延時(shí)處理,直到delay的時(shí)間到了。 delay的時(shí)間范圍0-15m In-flight 消息被發(fā)送到queue后其狀態(tài)為in-flight,默認(rèn)可以有120000 個(gè)in-flight消息 Queue的操作,Unique IDs CreateQueue,ListQueues,DeleteQueue,SendMessage, SendMessageBatch,ReceiveMessage,DeleteMessage,DeleteMessageBatch,ChangeMessageVisibility,etc 發(fā)送消息到queue后,SQS會(huì)返回一個(gè)消息的唯一ID,該ID只是用于標(biāo)識(shí)該消息,不能操作消息 從queue獲取到消息后SQS會(huì)返回receipt handle,可以用此句柄操作消息,如刪除消息等 Queue and message identifiers Queue:queue URL,每個(gè)Queue都有個(gè)URL用于唯一標(biāo)識(shí)該Queue Message ID:唯一標(biāo)識(shí)消息,但不能操作消息 Receipt handles:消息句柄,也能唯一標(biāo)識(shí)消息,用于操作消息 Message Attributes 消息屬性,用于對(duì)消息的額外描述,如時(shí)間戳,簽名等,可選項(xiàng),不是必須設(shè)置的 Long Polling 默認(rèn)情況用于獲取消息的邏輯是在一個(gè)循環(huán)里不停的調(diào)用ReceiveMessage,如果有消息則交專門的線程處理,如果沒有則返回空。ReceiveMessage不是阻塞式的,也就是說如果沒有消息其就會(huì)馬上返回。這樣可能有一個(gè)問題,如果一直沒有消息則會(huì)陷入死循環(huán),會(huì)增加CPU的開銷。可以通過每次循環(huán)后sleep一段時(shí)間來解決,但如果有很多消息則會(huì)降低系統(tǒng)性能,因?yàn)槊看味家猻leep。 Long Polling是指為SQS設(shè)置一個(gè)時(shí)間,在該時(shí)間段里調(diào)用ReceiveMessage后如果沒有消息則調(diào)用會(huì)被阻塞。如果被阻塞后在該時(shí)間段內(nèi)有新的消息,則立即返回消息,如果超時(shí)后還沒消息則返回空。 Long Polling時(shí)間范圍1-20s Dead Letter Queue 將處理失敗的消息放入dead letter queue,以便trouble shooting Access Control 通過創(chuàng)建IAM policy可以設(shè)置Queue的訪問權(quán)限,例如只允許某個(gè)賬號(hào)在某個(gè)時(shí)間段訪問Queue等 Queue就是AWS的一個(gè)資源,通過IAM policy可以準(zhǔn)確指定訪問權(quán)限 Durability 如果向SQS發(fā)送消息,SQS只有確定存儲(chǔ)完成后才會(huì)返回成功,這能保證消息的持久性,且操作簡(jiǎn)單 不像其它的異步處理系統(tǒng),發(fā)送消息后會(huì)立刻返回,而不管消息是否處理成功 如果要建立SQS的異步調(diào)用,可以在SendMessage調(diào)用的上層進(jìn)行處理,例如專門的線程來發(fā)送消息而不管發(fā)送結(jié)果 消息可以在Queue中存放4-14天
SWF?(Simple Workflow?Service)
概念 簡(jiǎn)單工作流服務(wù),用于協(xié)調(diào)某個(gè)工作流的各個(gè)處理子流程,在各個(gè)處理流程上應(yīng)用不同的處理分支來完成任務(wù) SWF支持串行處理,并行處理,同步處理和異步處理等類型 Domains SWF域,是一組資源的集合和分組 一個(gè)domain可以包含多個(gè)workfkow,且workflow之間可以有交互,但一個(gè)workflow只能屬于某一個(gè)domain History 通過查看workflow history可以知道詳細(xì)的處理流程細(xì)節(jié),完成時(shí)間,錯(cuò)誤記錄等 Actors Workflow Starter:用于初始化和啟動(dòng)某個(gè)workflow Workflow Decider:用于決定下一個(gè)工作流是什么 Activity Workers:用于執(zhí)行具體的任務(wù) Tasks Activity tasks:執(zhí)行具體的任務(wù) Lambda tasks:通過Lambda執(zhí)行具體的任務(wù) Decision tasks:執(zhí)行任務(wù)來決定下一個(gè)工作流是什么 Task List 任務(wù)列表,可以理解為task的隊(duì)列,是所有任務(wù)的集合 Long Polling Decider和Activity worker與SWF相互通信的途徑 與SQS的long polling有點(diǎn)類似,都是周期性的檢查他們和SWF的狀態(tài),如果有需要處理的任務(wù),則進(jìn)行相應(yīng)的處理 Object Identifier Workflow Type:Domain name,version Activity Type:Domain name,version Decision and activity task:Unique task token Execution of workflow:Domain,workflow ID,run ID Execution Closure 如何結(jié)束任務(wù):完成,取消,錯(cuò)誤,超時(shí) 簡(jiǎn)單的workflow執(zhí)行流程 Starter通知SWF開始某個(gè)工作流 SWF通知Decider下一步如何處理 Decider返回SWF下一個(gè)處理的任務(wù) SWF通知Activity worker處理任務(wù) Activity worker處理完畢后返回SWF SWF通知Decider下一步如何處理 ...... Decider通知SWF任務(wù)處理完畢 SWF關(guān)閉workflow執(zhí)行流程,歸檔歷史記錄等
SNS (Simple Notification Service)
概念:簡(jiǎn)單通知服務(wù),用于通知終端用戶某個(gè)事件的發(fā)生,運(yùn)行方式類似生產(chǎn)者消費(fèi)者模式。 通知方式 Email,發(fā)郵件 SQS,向隊(duì)列發(fā)消息 HTTP/s,可能是通過提交http請(qǐng)求或者調(diào)用RESTful發(fā)送消息 SMS,發(fā)短信 AWS Lambda,執(zhí)行Lambda程序 Topic 一個(gè)topic就是一個(gè)SNS的接入點(diǎn),任何想發(fā)送通知的生產(chǎn)者都是將通知發(fā)送到某個(gè)topic Subscription 訂閱某個(gè)topic,就是將某種通知方式關(guān)聯(lián)到某個(gè)topic,只要topic接受到生產(chǎn)者發(fā)送的通知,SNS就會(huì)將通知轉(zhuǎn)發(fā)給所有訂閱者 一個(gè)topic可以對(duì)應(yīng)多個(gè)subscription,一個(gè)subscription只對(duì)應(yīng)一個(gè)topic SNS的使用場(chǎng)景 Fanout:通知的扇出,是指某個(gè)topic接受到某個(gè)生產(chǎn)者發(fā)送的消息后,SNS會(huì)將其消息轉(zhuǎn)發(fā)給所有訂閱者,通知被擴(kuò)散了 Applicaiton and system alert,應(yīng)用和系統(tǒng)的告警,如EC2 instance異常關(guān)閉,EC2 的CPU使用率過高,系統(tǒng)出現(xiàn)異常導(dǎo)致無法啟動(dòng)服務(wù)等都可以通過SNS告知用戶 Push Email and Text Message:向用戶群發(fā)郵件或短信,例如廣告信息,通知信息等 Mobilie Push Notificatoin:向應(yīng)用推送更新通知,并可以包含下載鏈接等
總結(jié)
以上是生活随笔 為你收集整理的AWS SQS, SWF and SNS 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。