跳到主要內容

發表文章

目前顯示的是 9月, 2018的文章

[AWS懶人包] SES

什麼是Simple Email Service(SES) SES 是AWS上的Mail Service, 可以用來收發電子郵件 Persistence SES會將收到的信件儲存在S3 觸發事件 可以用來觸發 SNS, 以及Lambda function

[AWS懶人包] SQS vs SNS

SQS 跟 SNS 的差別在哪? 這裡簡單的整理一下, SQS 是Pull Based的架構, 消費者要自己去佇列中抓訊息下來 SNS 是Push Based的架構, 訊息會自動推撥給訂閱者 使用情境 SQS 用在將應用程式解偶降低相依性 SNS Fanout, 用在同時將訊息散發到其他不同的服務上 使用例子 SQS 線上機票查詢服務(skyscanner), 假設架構如下 我們可以把服務使用者的EC2 instance與負責撈資料的EC2 instance解偶, 好處是, 即使撈資料的EC2掛了, 也不會弄丟使用者的查詢請求, 因為沒處理完的訊息會持續地保留在佇列中等待被處理 SNS 線上影像處理服務, 當使用者上傳照片到S3, 可以透過SNS同時散發這訊息給: (一)處理影像的Lambda, 以及(二)寄發感謝函給使用者的服務, 藉此平行地執行相應的動作 儲存方式 SQS 可以保留訊息到最長14天 SNS 不能保留訊息, 若推撥時訂閱者不在, 訊息會遺失 消費者 SQS的消費者通常都作相似的工作 SNS的消費者(訂閱者)有很大的可能是處理不一樣的工作 https://stackoverflow.com/questions/13681213/what-is-the-difference-between-amazon-sns-and-amazon-sqs

[AWS懶人包] Simple Notification Service(SNS)

Simple Notification Service Simple Notification Service(簡稱SNS) 允許我們從雲上推撥訊息到任何其他行動裝置或是服務上 Mobile Directly Push 基本上, 要實作訊息推撥的服務, 我們必須串接裝置平台上的Push Notification Service, 但是不同平台有各自的Push Notification Service, 如果目的端橫跨多平台(比如Apple, Google Android, Windows), 這對開發人員來說會是個很大的工程 使用SNS的Mobile Directly Push就不必煩惱這種問題, 因為他都幫我們整合好了, 所以可以簡單地實現跨平台推撥訊息的服務 Push-subscribe  定義好Topic之後, 只要將訊息傳到指定的Topic, 任何訂閱這個Topic的行動裝置或服務都會收到推撥通知 訂閱的對象 除了行動裝置之外, Email, SMS, Lambda, SQS, HTTP Endpoint也可以訂閱SNS上的Topic 優點 1. 主動推撥, 不需要特別發請求去詢問有沒有訊息 2. 推撥訊息時, 無需特別考慮目的端使用何種通訊協定 3. 允許同一則訊息同時在不同的通訊協定上傳送 https://docs.aws.amazon.com/sns/latest/dg/SNSMobilePush.html https://blog.idanbean.io/2016/03/02/aws-sns-with-apns/

[AWS懶人包] Simple Queue service(SQS)

Simple Queue service(SQS) 在設計系統時, 若不希望元件之間相依程度過高的話, 通常會在元件之間加一層message queue來解偶 在雲上, AWS提供的Simple Queue Service 簡稱SQS, 讓我們可以把雲上各個相依的服務元件解偶, 進而提升整體系統的延展性 Key Feature Pull Based 不會自動推撥訊息, consumer 需要不斷地去詢問有沒有可執行的任務在佇列中 (2018年六月之後的SQS可以透過事件來驅動Lambda) 訊息大小 目前支援最大256kb 訊息的保存期限 最短1分鐘到最長14天, 訊息一旦過保就會被刪除 訊息的存取時間 預設每則訊息可以被獨佔30秒, 因為當訊息被截取之後, 會變成隱蔽狀態, 可是一旦超過這個存取時間之後, 狀態會恢復, 重新開放給任何其他的consumer去獨佔, 當然我們也可以延長獨佔的時間到最長12小時 存取的範例程式碼 var params = { AttributeNames: [ "SentTimestamp" ], MaxNumberOfMessages: 1 , MessageAttributeNames: [ "All" ], QueueUrl: queueURL, VisibilityTimeout: 2 , //訊息的存取時間 WaitTimeSeconds: 0 //等待回復的時間, 設為0表示Short polling }; sqs.receiveMessage(params, (err,data)=>{ if (err){ console.log(err); } else { console.log( "Received Data:" ,data); } }) 任務完成後必須要手動清掉佇列中的訊息, 否則當存取時間超過之後, 訊息會重新開放給其他的consumer,