はじめに
この記事はSansan Advent Calendar 2018の13日目の記事になります。
ちょうど、業務の方でシステム間を連携させる仕組みとしてAPI Gateway+SNS+SQSを組み合わせてキューイングシステムを構築しました。この組み合わせはちょっと珍しいかなと思ったので、そのアーキテクチャのポイントについて書きたいと思います。
アーキテクチャ
図で示すとこんな感じのアーキテクチャをつくりました。
送受信できるようにそれぞれ2系統を用意しています。
Publisherがpublishするときは、API GatewayのAPIのURLにJSONをPOSTします。そうすると、SNSにJSONを含んだメッセージが転送され、フィルタリングで振り分けられ、指定のSQSのキューにメッセージがエンキューされます。Subscriberは好きなタイミングでSQSからメッセージをsubscribeすることで、対向システムの可用性や処理時間を気にすることなく疎結合なシステム間連携ができます。
SQS単体で使うのと何が違う?
API Gateway
JSON Schema(Swagger)を設定してバリデーションができるため、PublisherとSubscriberとのデータの取り決めを厳密に行えます。そのため、Subscriber側のバリデーションの負担が軽くなります。また、必要なときには認証がかけられるため、セキュリティ的にコントロールしやすくなります。
SNS
Publisher側の処理の抽象化ができます。また、フィルタリング機能で複数キューへの振り分けや複製を行えます。
さいごに
今回はさらっと概要だけ述べました。ちょっと思うように時間が取れなかったので、構築編をまたあげようと思います。