※2020年、年9月のアップデ,ト
下記の情報は現在でも有効ですが,いまwebhookを管理する最良の方法は亚马逊EventBridgeを使うことです。サバレスでベントドリブンなEventBridgeのアキテクチャは,ンフラコストを削減しながら拡張性の高いシステムを実現します。
詳しくはこらのブログをご覧ください。
---
信じられないかもしれませんが,ホリデ,シ,ズンがもう間近に迫っています。Shopifyアプリ開発者のみなさんも準備が必要です。この一年でもっとも大変な繁忙期に、アプリの障害や中断を起こしている余裕などありません。注文の殺到に対応し、顧客情報や商品情報の絶え間ない更新に備える必要があります。
多くのShopify開発者は,webhook(Shopify内で発生した@ @ベントに応じて送信される通知メッセ@ @ジ)を利用しています。Shopifyのwebhookは,eコマ,スプラットフォ,ムにおける変更を追跡する効率的な方法であり,アプリはShopifyで何かが発生するとプッシュ通知によって知ることができます。
実際にある程度の規模でwebhookを受け取るまでは,webhookがいどれくらい送信されるのか予期するのはむずかしいです。わたしたが最初のアプリ倒带をロ,ンチしたとき,毎日真夜中に多数のストアからwebhookが送信されているのを見て驚いたものです。
顧客から聞いてわかったことは,これらのwebhookはサ,ドパ,ティのシステムがShopifyデ,タと同期するときに送られるということでした。たとえば,デ@ # @リ,で同期をおこなう在庫システムは,なんの警告もなしに数千から数万のwebhookをアプリに送ることになるのです。
今回の記事では,webhookをオフラesc escンで扱い,アプリがShopifyからの負荷を処理できるようにするシステムの構築にいて解説します。これにより,あなたのチ,ムがwebhookを可能なかぎり速く処理することが可能になります。このシステムはサーバーレスのアーキテクチャで構築されるため、費用が高額になることなく大規模な負荷を自動で処理できます。
Shopifyのwebhookをさばけるシステムの構築
Shopifyがアプリに対して要求しているのは,webhookに迅速にレスポンスすることです。それができない場合は削除されます。Shopifyのwebhookが発生したときに▪▪ンラ▪▪ンで処理する場合,大きな問題となることもあります。送信される可能性のあるwebhookに対応するため,アプリは強力なサ,バ,を必要とするからです。いつwebhookが送信されるかわからないわけですから,強力なサ,バ,を24時間稼働させることになり,かなり高額になり得ます。
たくさんの大規模サ,バ,を稼働させても,迅速なレスポンス,webhookデ,タの喪失,Shopifyの将来的なwebhookのキャンセルという点では,まだリスクがあるのです。
これらの問題に対処する良い方法は,システムをセパレ,トして,Shopifyに迅速にレスポンスする設定をあらかじめしておくことです。Shopifyのwebhookをすぐに認知し,どこか別の場所にデ,タを保存しておけば,webhookはキャンセルされませんし,そのデ,タを将来的に処理することも可能になります。webhookデ,タを見逃すことはなくなり,アプリは送られたデ,タを喪失することもありません。
「Shopifyのwebhookをすぐに認知し,どこか別の場所にデ,タを保存しておけば,webhookはキャンセルされませんし,そのデ,タを将来的に処理することも可能になります”
このブログ記事では,わたしたがアマゾンウェブサビス(AWS)を利用して倒带のために構築したシステムにいて解説します。ここではAPIゲ,トウェλ、SQSキュ,を使用しています。Shopifyがwebhookを倒带に送信すると,それがAPIゲトウェとλで処理されます。この2つはAWSの“サバレス”なサビスで,需要に合わせて自動的にスケルします。メッセ,ジは,webhookからのデ,タを記憶するSQSキュ,に保存されます。サ,バ,は,あなたが管理するレ,トによってwebhookキュ,を処理します。このために必要なステップは、以下のとおりです。
1 SQSキュ,の設定
プロセスの最初のステップは,SQSキュ,の設定です。SQSには2。ファストン/ファストアウト(先进先出)キュ,と,標準キュ,です。webhookの順序を維持したい場合は先进先出キュ,を使います。または,標準キュ,を使用してメッセ,ジのupdated_atを参照することもできます。どらも機能するので,利用ケスに応じてどらを取るか決めることになります。
SQSキュをAWSで設定する。
2函数の設定
AWSλを使用すると,自分でサ,バ,を管理することなく,コ,ドをAWSサ,バ,で実行できます。これは一般的に”サーバーレス”といわれる仕組みです(とはいえ,実際にはサーバーはクラウドにあるのですが)。λのサ,バ,は亚马逊が運営していて,負荷の上昇に合わせて自動でスケ,ルします。コ,ドの実行に必要な分だけ課金されるので,運用はとても安く済みます。
λを始めるには,まず新しい函数を作成します。このコドは、入ってくる情報をAPIゲトウェ(次のステップで設定します)。そしてwebhookのセキュリティを確認(Shopifyから送信されていることを確認)したら,それを最初のステップで作成したSQSキュ,に付加します。
コ,ドを見てみましょう。
Lambda函数の設定。
3 APIゲトウェの設定
λが設定できたら,次はAPIゲトウェを設定します。APIゲトウェは,APIを特定する方法を提供し,サ,バ,なしでAWSで実行されます。サ,バ,を使う代わりに,webhookはこのAPIゲトウェを経由します。この方法により、サーバーの運用を心配することなく、webhookのボリュ,ムに合わせてスケ,ルできます。
APIゲトウェの設定。
APIゲトウェのために,まず下記のスキマで新規モデルを作成します。
統合リクエストには,以下のマッピングテンプレ,トを設定します。
4弹性豆茎ワ,カ,の設定
最後のパ,トは,Elastic Beanstalkワ,カ,によるSQSキュ,の処理です。Elastic Beanstalkワ,カ,はSQSキュから自動でアテムを抽出し,マシンの本地主机に帖子します。
わたしたのワカはRubyで書かれているシンプルなRubyアプリケ,ションです。コドはGitHubで簡単に見かります。このサ,バ,レスなwebhookシステムのコ,ドはオ,プンソ,スになっていますので,改良のためにみなさんからのコントリビュ,トを歓迎します。
webhookを処理するコ,ドはオ,プンソ,スでGitHubにあります。
結果の確認
わたしたは実際にこのシステムをShopifyアプリで使用し,大きな成功をおさめました。webhookをい,どれくらいのスピドで処理するかをコントロルしながら,毎日数十万件のwebhookをさばくことができます。この方法なら、アプリへの影響を心配することなく、データベースの管理タスクを容易にするという自由が得られます。
Elastic Beanstalkワ,カ,は効率的に素早くSQSメッセ,ジを処理します。キュサズの増加に合わせてワカを追加できるため,デタベスが制限ファクタとなるでしょう。規模のわりにお金もかかりません。10000年件のwebhookあたり,約0.01ドルです。
BFCMでwebhook対策は必須
マ,チャントがアプリを効果的に使用できるようにするためには,BFCMにおける注文の急上昇に備えることが重要です。もしあなたのアプリがShopifyのwebhookの処理に困っているなら,今回のシステムは出費をおさえながら大量の負荷を扱うのに役立でしょう。