![](https://habrastorage.org/webt/bl/yt/38/blyt38fl9nts498bccjyaztnszg.jpeg)
前に書いたように 、私たちはさまざまな国の大規模なオンラインストアで作業しているため、多くの場合、高負荷に直面しています。 この記事では、VirtoCommerceプラットフォームに実装され、 Azure Cloudにデプロイされたクライアントプロジェクトの1つで2017年ブラックフライデーがどのように進行し、10倍のトラフィック増加に耐えることができたかを説明します。
初期構成は、CDNを使用せずに顧客の要件に従って構築されました。 一方で、厳しい予算を満たす必要があり、他方では、リアルタイムでスケーリングと構成変更の可能性を築きました。
製品は次のようになりました。
![](https://habrastorage.org/webt/ld/aq/t1/ldaqt1mgtgnhw8xutgqqeufcjdg.png)
- フロントエンドアプリケーション用のApp Service- VirtoCommerce Storefront for ASP.NET Core 2.0で実行され、スカンジナビア諸国向けに3つの独立したストアがあります。 アプリケーションは、RESTful API呼び出しを介してバックエンドシステムと対話します
- バックエンド向けApp Service-プラットフォームVirtoCommerceで動作し、単一のカタログ、価格、ストア、注文を管理し、プラットフォームの機能とデータにアクセスするためのRESTful APIも実装します。
- Logic Appsは、外部システムと統合するように設計されています。
- Application Insightsは、ソリューションの動作を監視するために使用されます。
2017年ブラックフライデーで、マーケティング担当者はトラフィックが10倍増加すると予測しました。 さらに、日中に電子メールまたはSMSメーリングを行うことが計画されていたため、ある時点でリクエストが急激にピークに達していました。
パート1.準備
現在のシステムの分析が実行され、Azureサービスを使用して実装できる次の決定が行われました。
ブラックフライデーの準備をするために、4つのポイントを特定しました。
- 静的リソース(JavaScriptおよびCSS)のCDNをアクティブにします。
- 製品イメージのCDNをアクティブにします。
- キャンペーン中にコンピューティングリソースを増やします。
- Azureで自動スケールアウトルールを構成します。
したがって、ダイアグラムは次のようになります。
![](https://habrastorage.org/webt/xi/3-/pe/xi3-pebm-um2bljvdqsdomwuqvs.png)
静的リソースのCDNアクティベーション(JavaScriptおよびCSS)
デフォルトでは、すべてのリソース(JavaScriptおよびCSSファイル)はフロントエンドアプリケーションから直接ロードされます。
Azure Content Delivery Network(CDN)を使用すると、戦略的に配置されたポイントで静的なWebコンテンツをキャッシュできます。 これにより、ユーザーにコンテンツを配信するための最大スループットが保証されます。 CDNは、Webアプリケーションサーバーの負荷も軽減します。
静的リソースをキャッシュするためにCDNを接続するには、以下を行う必要があります。
- StaticAssetUrlメソッドでCDNリンクを生成するためのコードを追加します。
- App Service docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-content-delivery-networkの CDNを作成します。
- アプリケーション構成でCDN Urlを構成します。
その後、 テーマ/アセット/静的/フォルダーパスにアクセスするすべてのリソースは、CDNから既にロードされます 。
以前は、さまざまな地域に対して一連の制御テストを実行し、CDNの有効性を示しました。
たとえば、714 KBの静的なvendor.jsファイルの場合、次の結果が得られました: 216ms対705ms 。 良い速度ゲイン。
705ミリ秒前
![](https://habrastorage.org/webt/ip/5g/js/ip5gjsr_jltaffbwilbgicdc4wq.png)
216ミリ秒後
![](https://habrastorage.org/webt/uo/lo/6n/uolo6n1sxn6s5-ibgsxltkdhvg4.png)
製品イメージのCDNアクティベーション
クライアントソリューションでは、Azure Blobサービスをバイナリファイルまたは製品イメージのプライマリストレージとして使用することをお勧めします。
すぐに使用できるように、CDNをAzure Blob Storageに接続してコンテンツをキャッシュできます。 Azure CDNの一部としてマイクロソフトと提携しているパートナーサービスは、開発者に大量のコンテンツを配信するためのグローバルソリューションを提供します。 このソリューションにより、米国、ヨーロッパ、アジア、オーストラリア、南米の物理ノード上のコンピューティングインスタンスのBLOBと静的コンテンツをキャッシュできます。
製品イメージの新しいCDNを作成するには、次のことを行う必要があります。
- Virto Commerceプラットフォームバージョンv2.13.18 以降をインストールします。 さらに、AzureBlobProviderを使用します。
- Blobストレージ用のAzure CDNを作成しますdocs.microsoft.com/en-us/azure/cdn/cdn-create-a-storage-account-with-cdn
- cdnUrl属性をAssetsConnectionStringに設定します。 例:provider = AzureBlobStorage; rootPath = asset; DefaultEndpointsProtocol = https; AccountName = {AccountName}; AccountKey = {AccountKey}; cdnUrl = abc.azureedge.net
作業の前後を比較しました。 たとえば、サイズが82 KBのjpegファイルは、259ミリ秒ではなく、126ミリ秒後に受信しました。
259ミリ秒前
![](https://habrastorage.org/webt/tr/xq/7r/trxq7r4lgrlgyduf_sbpnqtaeak.png)
126ミリ秒後
![](https://habrastorage.org/webt/et/xz/da/etxzdasw7wup-8hiazuqvcjenjy.png)
プロモーション期間中にスケールアップする
デフォルトでは、App Servicesの場合、Azure S2:Mediumプランに従ってコンピューティングリソースを使用しますが、大規模なCPUまたはメモリリソースを使用する必要がある場合は、プランをS3:Largeに拡張する準備ができました。
![](https://habrastorage.org/webt/ii/1t/zg/ii1tzggxttma4l3mcary4louuew.png)
Azureのテストでは、コンピューティングリソースの量の増加は平均して2〜5分以内にダウンタイムなしで発生することが示されました。
自動スケールアウトルールの構成
スケールアウトを使用すると、アプリケーションを実行する環境の数を構成できます。 基本設定では、メトリックに応じてロールの数を2から5に自動的に増減するルールを設定しました。
これにより、アプリケーションの通常の操作中に、IT管理者の時間と予算を大幅に節約できます。
![](https://habrastorage.org/webt/6m/vj/id/6mvjidh233coerzodutmufcm0k0.png)
私たちは、次の設定を選択しました。
- 直前の10分間でCPUPercantage> 80またはMemoryPercentage> 90の場合、インスタンスカウントを1増やします。
- CPUPercantageが70未満、MemoryPercentageが70未満の場合、過去10分間にインスタンス数を1減らします。
残念ながら、ピーク負荷では自動ルールが遅すぎることが判明しました-それらは遅く、最終的には手動制御に切り替える必要がありました。 通常、自動スケールアウトは非常に効果的です。
パート2.ブラックフライデー
朝でした。 ブラウザでは、開発者とシステム管理者がライブストリームメトリックを開いています。 プロモーションが有効になり、最初のメールニュースレターが配信されました。 ライブストリームでは、リクエストの数が増加しています。 より多くのリソースが必要ですが、自動ルールにはこれらの変更に対応する時間がありません。
![](https://habrastorage.org/webt/ra/wv/wy/rawvwyi7pbtb6dvwsb6aalvn9i4.png)
応答時間の増加が見られます。 新しいインスタンスが発生し、状況が安定します。
郵送パスとリソースの波は自動的に削減されます。 次の波-画像が繰り返されます。 リソースに余裕を持たせるために、手動モードに切り替えてインスタンスの数を制御することにしました。
お客様は、負荷にもかかわらず、サイトがはるかに高速であることに注意してください。
期間からのリクエスト数の分布は次のとおりです。
![](https://habrastorage.org/webt/mo/pf/ev/mopfevms3alroppss_mazsnf1qc.png)
ブラックフライデーの朝、午前7時40分から午前9時40分 ステップ2分。
![](https://habrastorage.org/webt/xt/xx/9g/xtxx9grkf1sh67ycu4kh7vt4pmg.png)
そして、これは定期的な金曜日です:
![](https://habrastorage.org/webt/cg/lh/e1/cglhe1slosfplz_qxdbnrekbxny.png)
注文数の増加により、重要なパラメータに対するデータベースの負荷が増加しました。 通常、作業パラメーターは40%-50%DTUパーセンテージであると考えています。
ブラックフライデーでは、負荷が70〜80%に増加しました。 リソースを100 DTUに引き上げることが決定されました。 その場での計画の変更も、ダウンタイムなしで2〜3分以内に行われ、喜ばずにはいられませんでした。 これにより、潜在的な在庫問題が解決されました。 さらに多くのリクエスト、より多くのトラフィック。 より多くの注文。 そして、それはすでに土曜日の朝です。 その後、みんな寝ました。
![](https://habrastorage.org/webt/q8/nb/b6/q8nbb6hsrh_0rdvuaa8xynt98kg.png)
パート3.回顧
黒い金曜日に立ちました!
このサイトは、割引、速度、100%の可用性で顧客を満足させました。 店の顧客は、注文の数をサービス所有者に喜ばせました。
はい、この日のITリソースのコストは3倍になりましたが、この日の収益は通常の1日に比べて100倍に増加しています。 主なコストは、アプリケーションインスタンスの数の増加とデータベースプランの引き上げに関連しており、ブラックフライデーの終了後、以前のプランに戻りました。
計算が示したように、CDN接続によりITリソースのコストが1日あたりわずか2ドル増加したため、クライアントはこの構成を継続的に残すことにしました。
推定によると、静的リソースのCDNへの転送により、以下の指標が改善されました。
- 平均応答時間を400ミリ秒短縮しました。
- ページビューの読み込み時間を1.5秒短縮しました。
次は?
- ホームページ、カテゴリページ、製品カードの再レンダリングを削除するために、すべてのサイトをCDNの背後に隠します。 私たちのプロジェクトでは、現在の価格、クライアントの割引、バスケットなどのためにこれを行うことができます。 javascriptを介してロードされます。
- フロント エンドシステムとバックエンドシステムの間でAPI Managementをアクティブにします。
- Azure API Management docs.microsoft.com/en-us/azure/api-management/api-management-howto-cacheでキャッシュを追加してパフォーマンスを改善します。
- App Servicesをいくつかの地理的位置に配置します。
さて、2018年の新しいブラックフライデーに備えます!