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