2017-02-12 73 views
1

簡而言之,我有興趣構建通過SNS(大部分)連接的鬆散耦合的微服務,以便實時處理API請求。使用由Lambda支持的API網關在使用SNS的微服務之間進行通信的函數

前提

  • 需要所有這些到一個POST請求響應體
  • 內出現不能要求客戶拉成功上傳和/或成功的路由。

AWS API網關端點

  • POST/API /文檔/ uploadAndRouteDownWorkflow,執行documents.upload並接收從表示完全成功documents.upload和workflows.routeDocument功能的組合響應(上載和路線工作),部分成功(上傳但並不路線),或徹底失敗(上傳失敗)

lambda函數(EXECUT編按順序):

- documents.upload

  • 從API網關端點
  • 上傳文件調用到DMS(文檔管理系統)
  • 創建一個SNS消息到工作流微服務以便路由文檔

- workflows.routeDocument

  • 從訂閱的SNS主題調用
  • 路由文件/ SNS中的消息
  • 文件返回一個成功/失敗到原來的API請求

告誡爲什麼文件。上傳不會在內部調用worksflows.routeDocument

  1. 微服務不鬆耦合如果強迫是同步了
  2. 雙重計算時間兩種波長的職能(是可能)

是這種模式可能嗎?

謝謝!

回答

1

在此處,它打破了:

-workflows。routeDocument

  • 返回成功/失敗到原來的API請求

那是不可能的。通過使用SNS,您已將服務解耦,負責生成對API網關請求(documents.upload)的響應的Lambda函數不知道其他Lambda函數中發生了什麼。 workflows.routeDocument Lambda函數無法訪問API網關eventcontext對象,因此無法更新API響應。

這樣做的唯一方法是如果API網關調用的Lambda函數做了某種輪詢以等待其他函數調用完成,然後以某種方式訪問​​返回狀態(存儲在數據庫或其他東西中?)並在回覆中返回。我認爲這會在請求處理中引入很多延遲。

在這種情況下,我認爲documents.upload直接調用workflows.routeDocument Lambda函數更有意義。

+0

因此,如果我理解正確,我需要維護某種類型的同步流程,以便將指示成功失敗的結果返回到原始POST請求?在這一點上,如果我想讓這些部分鬆散耦合,我需要尋找一種看起來不同於AWS的解決方案。通過直接回復(https://www.rabbitmq.com/direct-reply-to.html)閱讀RabbitMQ中的RPC模式似乎符合我對此感興趣的內容。 AWS中有另一種方式來保持事物鬆散耦合,同時保持同步行爲嗎? –

+0

RabbitMQ RPC模式也可以與Amazon的SQS一起實現。但是,您需要認識到RabbitMQ仍在使用隊列和輪詢來傳遞響應。在任何完全解耦的解決方案中,您將擁有一個長期運行的'documents.upload'函數來輪詢數據庫或隊列,或者等待由'workflows.routeDocument'函數生成的響應。 –

+0

@DavidGarza您可能對今天的AWS許可感興趣:https://aws.amazon.com/about-aws/whats-new/2017/02/amazon-api-gateway-integration-with-aws-step-functions/ –

相關問題