5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-12-04

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

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

どうすれば良いか?

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

最初の構成

image.png

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

  • webhook側でエラー
  • ALBとEC2の通信障害

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

改善したシステム構成

なので下記構成にしました。
image.png
ALB->Lambda->SQS->Lambda->webhook(API)
1.最初ALBからlambdaを呼び出す
2.lambdaは、SQSでキューを登録し終
3.別のlambdaを定期的起動させ、SQSのキューをチェックさせる
4.キューがあったら、取り出し、webhookAPIをコールする
2でキューを追加する場合は、冪等性を担保するために、そのデータが以前に処理されたことがあるかどうかをチェックします。

最後に

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

5
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?