合同会社モリカワのブログ

森川敬一。CTOとして30年やってきました。集大成としてCTOを増やすという事を目標にやってます。

絶対に止めれないシステムの作り方

絶対に止めれないシステムとは

もちろん銀行システムとかのクリティカルなシステムもそうなのですが、今回は、そこまでではないのですが、データ連携上一部のapiは止めれないシステムを指します。
僕は直面したのが、Lineでのユーザー登録によるwebhookを受け取るって奴です。
昔のキャリアのユーザー登録であれば、止まっていた時には別途データが飛んできてまとめて処理とかも出来ましたが、Lineさんのはありません。ユーザー登録時のwebhookを取りこぼすと2度と受信出来ないのです。
同様にSNS等で登録時にwebhookが来て、対応する必要があるシステムもあると思います。

どうすれば良いか?

先ず思うのは、AWSでLambdaで受け取って処理すれば良いと思うでしょう。
これでも良いのですが、Lambdaがエラー処理で落ちたりすることもあります。

最初の構成

画像

この構成の場合は、通常時は良いのですが、トラブル時にデータをロストしてしまいます。

  • webhook側でエラー

  • ALBとEC2の通信障害

トラブル以外にもデプロイ時のwebサービスの再起動等の時もデータがロストしてしまいます。

改善したシステム構成

なので下記構成にしました。

画像


ALB->Lambda->SQS->Lambda->webhook(API)
1.最初ALBからlambdaを呼び出す
2.lambdaは、SQSでキューを登録し終
3.別のlambdaを定期的起動させ、SQSのキューをチェックさせる
4.キューがあったら、取り出し、webhookAPIをコールする

最後に

これによりシステム停止時にも問題なく稼働するシステムが構築できましたが、SQSでなくても、S3に保存したり、
他にもやり方はあると思います。
皆さんが考えたaws構成について教えて下さい