ITと開発者の目から見た2017年ブラックフライデー。 トラフィックを10倍に増やしながらブラックフライデーに耐えた方法

毎年、ブラックフライデーは電子商取引ソリューションの新たな挑戦となります。 顧客は魅力的な価格で商品を購入する機会が得られ、ITスペシャリストはサーバーへのリクエスト、すべてのリソースへの法外な負荷、外部サービス(支払いシステム、ERPなど)へのアクセス不能を受け取ります。







書いたように 、私たちはさまざまな国の大規模なオンラインストアで作業しているため、多くの場合、高負荷に直面しています。 この記事では、VirtoCommerceプラットフォームに実装され Azure Cloudにデプロイされクライアントプロジェクトの1つで2017年ブラックフライデーがどのように進行し、10倍のトラフィック増加に耐えることができたかを説明します。



初期構成は、CDNを使用せずに顧客の要件に従って構築されました。 一方で、厳しい予算を満たす必要があり、他方では、リアルタイムでスケーリングと構成変更の可能性を築きました。



製品は次のようになりました。









2017年ブラックフライデーで、マーケティング担当者はトラフィックが10倍増加すると予測しました。 さらに、日中に電子メールまたはSMSメーリングを行うことが計画されていたため、ある時点でリクエストが急激にピークに達していました。



パート1.準備



現在のシステムの分析が実行され、Azureサービスを使用して実装できる次の決定が行われました。



ブラックフライデーの準備をするために、4つのポイントを特定しました。





したがって、ダイアグラムは次のようになります。







静的リソースのCDNアクティベーション(JavaScriptおよびCSS)



デフォルトでは、すべてのリソース(JavaScriptおよびCSSファイル)はフロントエンドアプリケーションから直接ロードされます。



Azure Content Delivery Network(CDN)を使用すると、戦略的に配置されたポイントで静的なWebコンテンツをキャッシュできます。 これにより、ユーザーにコンテンツを配信するための最大スループットが保証されます。 CDNは、Webアプリケーションサーバーの負荷も軽減します。



静的リソースをキャッシュするためにCDNを接続するには、以下を行う必要があります。



  1. StaticAssetUrlメソッドでCDNリンクを生成するためのコードを追加します。
  2. App Service docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-content-delivery-networkの CDNを作成します。
  3. アプリケーション構成でCDN Urlを構成します。


その後、 テーマ/アセット/静的/フォルダーパスにアクセスするすべてのリソースは、CDNから既にロードされます



以前は、さまざまな地域に対して一連の制御テストを実行し、CDNの有効性を示しました。



たとえば、714 KBの静的なvendor.jsファイルの場合、次の結果が得られました: 216ms対705ms 。 良い速度ゲイン。



705ミリ秒前







216ミリ秒後







製品イメージのCDNアクティベーション



クライアントソリューションでは、Azure Blobサービスをバイナリファイルまたは製品イメージのプライマリストレージとして使用することをお勧めします。



すぐに使用できるように、CDNをAzure Blob Storageに接続してコンテンツをキャッシュできます。 Azure CDNの一部としてマイクロソフトと提携しているパートナーサービスは、開発者に大量のコンテンツを配信するためのグローバルソリューションを提供します。 このソリューションにより、米国、ヨーロッパ、アジア、オーストラリア、南米の物理ノード上のコンピューティングインスタンスのBLOBと静的コンテンツをキャッシュできます。

製品イメージの新しいCDNを作成するには、次のことを行う必要があります。



  1. Virto Commerceプラットフォームバージョンv2.13.18 以降をインストールします。 さらに、AzureBlobProviderを使用します。
  2. Blobストレージ用のAzure CDNを作成しますdocs.microsoft.com/en-us/azure/cdn/cdn-create-a-storage-account-with-cdn
  3. cdnUrl属性をAssetsConnectionStringに設定します。 例:provider = AzureBlobStorage; rootPath = asset; DefaultEndpointsProtocol = https; AccountName = {AccountName}; AccountKey = {AccountKey}; cdnUrl = abc.azureedge.net


作業の前後を比較しました。 たとえば、サイズが82 KBのjpegファイルは、259ミリ秒ではなく、126ミリ秒後に受信しました。



259ミリ秒前







126ミリ秒後







プロモーション期間中にスケールアップする



デフォルトでは、App Servicesの場合、Azure S2:Mediumプランに従ってコンピューティングリソースを使用しますが、大規模なCPUまたはメモリリソースを使用する必要がある場合は、プランをS3:Largeに拡張する準備ができました。







Azureのテストでは、コンピューティングリソースの量の増加は平均して2〜5分以内にダウンタイムなしで発生することが示されました。



自動スケールアウトルールの構成



スケールアウトを使用すると、アプリケーションを実行する環境の数を構成できます。 基本設定では、メトリックに応じてロールの数を2から5に自動的に増減するルールを設定しました。



これにより、アプリケーションの通常の操作中に、IT管理者の時間と予算を大幅に節約できます。







私たちは、次の設定を選択しました。





残念ながら、ピーク負荷では自動ルールが遅すぎることが判明しました-それらは遅く、最終的には手動制御に切り替える必要がありました。 通常、自動スケールアウトは非常に効果的です。



パート2.ブラックフライデー



朝でした。 ブラウザでは、開発者とシステム管理者がライブストリームメトリックを開いています。 プロモーションが有効になり、最初のメールニュースレターが配信されました。 ライブストリームでは、リクエストの数が増加しています。 より多くのリソースが必要ですが、自動ルールにはこれらの変更に対応する時間がありません。







応答時間の増加が見られます。 新しいインスタンスが発生し、状況が安定します。

郵送パスとリソースの波は自動的に削減されます。 次の波-画像が繰り返されます。 リソースに余裕を持たせるために、手動モードに切り替えてインスタンスの数を制御することにしました。



お客様は、負荷にもかかわらず、サイトがはるかに高速であることに注意してください。



期間からのリクエスト数の分布は次のとおりです。







ブラックフライデーの朝、午前7時40分から午前9時40分 ステップ2分。







そして、これは定期的な金曜日です:







注文数の増加により、重要なパラメータに対するデータベースの負荷が増加しました。 通常、作業パラメーターは40%-50%DTUパーセンテージであると考えています。



ブラックフライデーでは、負荷が70〜80%に増加しました。 リソースを100 DTUに引き上げることが決定されました。 その場での計画の変更も、ダウンタイムなしで2〜3分以内に行われ、喜ばずにはいられませんでした。 これにより、潜在的な在庫問題が解決されました。 さらに多くのリクエスト、より多くのトラフィック。 より多くの注文。 そして、それはすでに土曜日の朝です。 その後、みんな寝ました。







パート3.回顧



黒い金曜日に立ちました!



このサイトは、割引、速度、100%の可用性で顧客を満足させました。 店の顧客は、注文の数をサービス所有者に喜ばせました。



はい、この日のITリソースのコストは3倍になりましたが、この日の収益は通常の1日に比べて100倍に増加しています。 主なコストは、アプリケーションインスタンスの数の増加とデータベースプランの引き上げに関連しており、ブラックフライデーの終了後、以前のプランに戻りました。



計算が示したように、CDN接続によりITリソースのコストが1日あたりわずか2ドル増加したため、クライアントはこの構成を継続的に残すことにしました。



推定によると、静的リソースのCDNへの転送により、以下の指標が改善されました。





次は?





さて、2018年の新しいブラックフライデーに備えます!



All Articles