Azure Cosmos DB お客様のプロファイル: Jet.com (Azure Cosmos DB customer profile: Jet.com)

Posted: 2018/05/18 カテゴリー: Uncategorized
タグ:, , , , , , ,

Azure Cosmos DB customer profile: Jet.com


Ed Price – MSFT

Jet.comは、12か月未満でAzure上の革新的なEコマース エンジンを稼働!

Jet.comのScott Havensと共に、MicrosoftのAnna Skobodzinski、Aravind Krishna、Shireesh Thotaが執筆。

この記事は、過去1年間にわたってMicrosoftと密接に協力してきたAzureのお客様に関するシリーズの1つです。我々は、お客様がAzureサービスを選択した理由を考察し、お客様のソリューションの設計を詳しく調べます。

Jet.com

今回は、完全にMicrosoft Azure上で構築されているEコマース プラットフォームを持つ、急成長しているテクノロジ企業「Jet.com」を取り上げます。.NETとオープン ソース テクノロジの両方を使った開発とインフラストラクチャのデリバリーなどを紹介します。Jet.comについてさらに学ぶには、Microsoft Build 2018カンファレンスのJet.comのビデオをご覧ください。

ニュージャージー州ホーボーケンに本社があるJet.comは、起業家のMarc Loreが共同創業しました。彼は、恐らく人気の高いEコマース サイト「Diapers.com」の創業者として最もよく知られており、 彼は、最終的にDiapers.comをAmazonに売却しました。2016年8月8日にWalmartがJet.comを買収し、Jet.comはWalmart.comの子会社になりました。現在、Marc Loreと彼のチームは、革新的なオンライン マーケットプレイス「Jet.com」を通して、Amazon.comと真っ向から競争しています。

Jet.comのEコマースへのマイクロサービス アプローチ

Jet.comは、他のオンライン小売業者と競争するために、継続的に革新しています。たとえば、Jet.comは、リアルタイムに価格調整を行う、独自の価格エンジンを持っています。価格がより低ければ、顧客は、同時により多くの商品を購入し、同じ流通センターにある商品を購入するように促されます。

テクノロジ チームは、このような革新のために、深い相互依存関係を持つことなしに、個別のサービス コンポーネントを変更できる必要があります。そこで、彼らは、マイクロサービスとアジャイル プロセスに依存した、イベント ソーシング モデルを基にした、機能ファースト アプローチを開発しました。

12か月未満で構築されたJet.comプラットフォームは、オープン ソース ソフトウェア、Visual F#などのMicrosoftテクノロジ、Azure Cosmos DBなどのAzure PaaS (Platform as a Service) サービスで構成されています。

「我々は、100倍の規模でシステムが行う必要があることの予測を念頭に置いて、システムを設計せざるを得ません。」

Jeremy Kimball (VP Engineering, Jet.com)

Figure 1. The Jet.com technology stack mixes, third-party software, open source and Microsoft technologies and services on Azure, color-coded by technology.

図1: Jet.comテクノロジ スタックは、サード パーティー ソフトウェア、オープン ソース、MicrosoftのテクノロジやAzureサービスを組み合わせています (テクノロジで色分けされています)。

柔軟なマイクロサービス

巨大なスタックを実行している場合、アップデートをデプロイするために、すべてのサービス インスタンスをダウンさせたくはありません。これが、Jet.comプラットフォームの各コア コンポーネント (たとえば、注文処理、在庫管理、価格設定) が、数百のマイクロサービスで構成されている理由の1つです。マイクロサービスは、1つのことを行い、その1つのことだけを行います。この単純性が、各マイクロサービスをエラスティックで回復性があり最小限で完全なものにし、マイクロサービスを組み合わせられることによって、エンジニアは巨大システムにわたってより均等に複雑さを分散できるようになります。

Jet.comのエンジニアが、サービスを変更したり機能を追加したりする必要がある場合、システムの他の部分に影響を与えることなしに、それを行うことができます。マイクロサービス アーキテクチャが、Jet.comのペースの速い継続的デリバリー/デプロイ サイクルをサポートしています。また、チームは、プラットフォームを簡単にスケールでき、それでも独立してサービスをアップデートできます。

イベント ソーシング アーキテクチャ

イベント ソーシング パターンは、Jet.comのマイクロサービス間の通信の基礎です。小売/注文処理システムでの従来型のデザイン パターンは、通常、データベースに注文の状態を格納し、それから、現行の状態を知るためにデータベースをクエリし、最新の状態で更新します。しかし、もし、システムが、どのようにして現行の状態に到達したかについても知る必要があるとしたら、どうなるでしょうか? イベント ソーシング パターンは、アプリケーション状態に対するすべての変更を一連のイベントとして格納することで、この問題を解決します。

たとえば、Jet.comでショッピング カートに商品が入れられると、まず、注文処理マイクロサービスがイベント ストリームにイベントを配置します。それから、在庫処理システムが、イベント ストリームからイベントを読み取り、Jet.comエコシステム内の業者の1つで予約を行います。価格エンジンは、これらのイベントを読み取り、価格を計算し、イベント ストリームに新規イベントを配置する、といったことをします。

「我々がJetの次世代イベント ソーシング プラットフォームを構築していた時、Azure Cosmos DBは、我々の成功に不可欠な低レイテンシ、高スループット、グローバルの可用性、高度な一連の機能を提供しました。」

Scott Havens (Director of Software Engineering, Jet.com)

Figure 2. Event sourcing model drives the Jet.com architecture.

図2: イベント ソーシング モデルが、Jet.comのアーキテクチャを主導

イベントをクエリでき、過去の状態を再構築するために、イベント ログを使えます。イベント ソーシングを通した追記のみでの書き込みの実行は、書き込みの多いシステムで、特に書き込みに最適化されたデータベースと組み合わせると、高速でスケーラブルになります。

速度のために構築: 次世代アーキテクチャ

野心的な目標と急成長のため、Jet.comのエンジニアは、顧客の買い物のエクスペリエンスを拡張し、自社のマーケティング システムを改善する方法を、常に探しています。顧客トラフィックが増えるにつれて、スケーラビリティに対する要求も増えてきました。そこで、チームは、すべてのパートナー業者からのすべてのSKU (最小在庫管理単位) の利用可能な量を追跡する在庫システムで、効率性の改善を求めました。また、このシステムは、進行中の注文で準備されている量も追跡します。在庫切れによる業者からの拒否率を最小化することを目標にして、販売可能量はJet.com価格エンジンと共有されます。

自社のサービスをより高速で、よりスマートで、より効率的なものにするために、Jetは、次世代在庫処理システム「Panther」をリリースしました。Pantherは、いくつかの重要な目標を満たす必要がありました。

  • 注文パイプライン内で、より早く在庫を予約することで、顧客のエクスペリエンスを改善する。
  • さらなる履歴データとより良い分析を提供することで、マーケティング チーム、運用チーム向けの洞察を拡張する。
  • 通常は複数のシステムやチームにわたって分散している在庫管理の責任を統一する。

Jetの既存の在庫管理システムは、イベント ソーシング型ではありませんでした。オープン ソースのイベント ストレージ システムは、そのスケールで、イベント ソーシング方式での在庫処理のレイテンシ、スループットの要件を満たせませんでした。Pantherチームは、既存のストレージ システムが、自社のますます増加するユーザー ベースに対処するのに十分なほどにはスケールしないことを、知っていました。IaaS (Infrastructure as a Service) ソリューションとして実装されていたその在庫管理システムも、このチームが担当していました。彼らは、管理がより簡単で、高可用性をサポートし、複数の地理的場所にわたるレプリケーションを提供し、とりわけ、パフォーマンスに優れた、確かなSLA (サービス レベル アグリーメント) によって支えられたソリューションを求めていました。

彼らは、グローバル分散型で、大規模にスケーラブルで、低レイテンシのAzure上のデータベース サービス「Azure Cosmos DB」を基にして、Pantherシステムのプロトタイプを開発しました。プロトタイプが有望な結果を示した時、彼らは解決策を手にしたことを知りました。Pantherは、イベント ストレージ (ソーシング) とイベント処理のために、グローバル分散されたAzure Cosmos DBを使っています。上流システムからのイベントは、Azure Cosmos DBに直接投入されます。データは、注文IDとほかのプロパティによってパーティション分割されており、需要を満たすために、コレクションはエラスティックにスケールします。マイクロサービスが、コレクションに書き込まれた変更をリッスンし、下流システムが利用するために、データベースでコミットされた順序で、新規イベントをイベント バスに生成します。

Figure 3. The Panther inventory system dataflow. All services are written in F#.

図3: Panther在庫システムのデータ フロー。すべてのサービスは、F#で書かれています。

この図のより大きなバージョンを表示。

イベント ストレージの実装

Azure Cosmos DBがJet.comの重要なニーズを満たしたので、Jet.comは、PantherでAzure Cosmos DBを選択しました。

  • 1桁ミリ秒の低レイテンシで、大規模なスケールの書き込み、読み取りの両方に対応します。
  • 各リージョンのアプリケーションのリクエストにローカルで対応しながら、グローバルにデータを分散します。
  • オン デマンドで、独立して、いつでも、世界中で、ストレージとスループットの両方をエラスティックにスケールします。
  • 可用性、レイテンシ、スループット、一貫性 (整合性) に対して、第一級の包括的なSLAを保証します。

あらゆるアクションやサービス間通信が、データベース書き込みコマンドを通して対処されるので、イベント ソーシング パターンは、データベースでの大量の書き込みを必要とします。主に、Azure Cosmos DBが、書き込み最適化データベースとして、Jet.comが必要とする大規模な投入率に対処できたという理由で、Jet.comはAzure Cosmos DBを選択しました。

また、彼らは、注意深くコストを管理するために、ストレージとスループットの弾力性を必要としていました。ほとんどの主要な小売業者と同様に、Jet.comは、(予想されるイベント率が通常時に比べて10倍から20倍に増加し得る) 重要な買い物の日の間に、大きなピークを見込んでいます。Jet.comは、Azure Cosmos DBで、プロビジョニングされるスループットを時間単位で微調整し、特定の週、または時間で必要としているものに対してのみ支払い、世界中でいつでもそれを変更することができます。

たとえば、Jet.comは、2016年11月の間、注文イベント ストリームのために、100万から1000万RU/s (毎秒要求ユニット) の間で構成されたスループットで、単一の地理レプリケーションされたAzure Cosmos DBコレクションをプロビジョニングしていました。注文IDをパーティション分割キーとして使って、このコレクションはパーティション分割されていました。アクセス パターンは、特定の注文IDと時間範囲で、特定の種類のイベントを取得していたので、彼らのサービスとデータベースは、顧客数と注文数が増加するにつれて、シームレスにスケールしました。最も人気の高い買い物の日であるブラック フライデー、サイバー マンデーの間、顧客の要求を満たすために、彼らは、1兆RU/sのプロビジョニングされたスループットで、24時間の間、稼働することができました。

低レイテンシの操作

Azure Cosmos DB上で稼働するイベント ストアは、Pantherにとってミッション クリティカルなコンポーネントでした。高速なスループットが重要だっただけではなく、低レイテンシが絶対条件であり、マイクロサービスがスムーズに動作しなければなりませんでした。Azure Cosmos DBは、包括的な業界トップのSLAを提供しています。単一リージョン内の99.99%の可用性、複数リージョンにわたる99.999%の可用性に対するSLAだけではなく、保証された1桁ミリ秒のレイテンシ、一貫性 (整合性)、スループットに対するSLAもあります。Azure Cosmos DBは、レイテンシSLAの一環として、データベースが99%以上の読み取りを10ミリ秒以下で、99%以上の書き込みを15ミリ秒以下で完了することを、保証しています。概して、観測されるレイテンシは、これよりも大幅に低くなっています。SLAによって支えられたこの保証は、Jet.comの運用にとって重要な利点でした。

Jet.comは、PantherサービスAPIでの厳しいレイテンシの目的のために、99パーセンタイル、99.9パーセンタイルのAPIのリクエスト時間を、積極的に監視しました。この時間は、基になるNoSQLデータベース呼び出しのパフォーマンスに結びついていました。このレイテンシの目標を満たすため、Jet.comエンジンは、Panther以前のデータベースのスケーリングと構成を管理するために、その運用サイクルを使い尽くしていました。Azure Cosmos DBへの移行によって、運用負荷は大幅に軽くなったので、Jetのエンジニアはコア サービスにさらに時間を費やすことができるようになりました。

すぐに使えるグローバル分散

Pantherにとって、運用上の改善、スケーラビリティの改善は重要でしたが、グローバル分散は必須でした。Azure Cosmos DBは、形勢を一変させた、すぐに使えるソリューションを提供しました。

ほとんどのPantherサービスは、Azureの米国東部2リージョンで動作していましたが、データは、世界中の複数の場所で利用できる必要がありました。これには、(レイテンシがそこまで重要ではないビジネス プロセスを実行するために、データが使われていた) Azureの米国西部リージョンが含まれます。米国西部の読み取りリージョンは、米国東部2の書き込みリージョンで書き込まれた順序で、データを読み取らなければならず、その遅延は15分未満でなければなりませんでした。Azure Cosmos DBの調整可能な一貫性 (整合性) モデルが、チームが、最小のコードと保証された正確性で、様々なシナリオのニーズに対応するのに役立ちました。たとえば、有界整合性制約 (bounded staleness) 一貫性 (整合性) モデルに依存することで、15分のビジネス要件を満たすことが保証されます。

Azure Cosmos DBの変更フィードのサポート

Jet.comのエンジニアは、できるかぎり早く、Pantherに関連するイベントをAzure Cosmos DBの永続ストレージに投入したいと思っていました。それから、彼らは、エコシステム業者での予約、注文のフルフィルメント状態の更新といった、他のアクティビティを実行するために、多数のマイクロサービスからこれらのイベントを利用したいと思っていました。正しい注文処理のためには、これらのイベントが、1回だけ、厳密に1回だけ、Azure Cosmos DBでコミットされた順序で処理されることが不可欠でした。

これを行うため、Jet.comのエンジニアは、変更フィードのサポートを開発するために、MicrosoftのAzure Cosmos DBチームと密接に協力しました。変更フィードAPIは、修正された順序で、コレクションからドキュメントを読み取る方法を提供します。Azure Cosmos DBは、異なるパーティション範囲で利用可能な変更を並列に処理するために使える、分散APIを提供しているので、Jet.comは、多数のマシンにわたって作業の調整を管理する必要なしに、イベントの処理を分散するために、マシンのプールを使えます。

まとめ

チームは、しばしば、依然に使っていたテクノロジを使って、クラウドへのリフト&シフト アプローチを採ります。Jet.comは、手頃な価格で必要としているスケールを得るためには、クラウド向けに設計された製品を使わなければならないことを理解しました。そして、彼らは進んで新しいものを試しました。その結果は、12か月未満で構築された、大規模なスケールで本番環境で稼働する、革新的なEコマース エンジンでした。

わずか数週間以内に、Azure Service Fabricを基にしたプロトタイプが、Pantherが、大規模なスケール、Jetが必要としていた機能、複数リージョンにわたる高可用性、超高速なパフォーマンスをサポートできることを証明しました。しかし、Pantherを本当に可能にしたものは、イベントストアとしてのAzure Cosmos DBの追加でした。イベント ソーシング パターンをマイクロサービス ベースのアプローチと組み合わせることで、Jet.comを改善し続けて顧客を喜ばせるために彼らが必要としていた柔軟性が得られました。


広告
コメント
  1. […] translation – S/N Ratio (by SATO Naoki (Neo)) > Azure Cosmos DB お客様のプロファイル: Jet.com (Azure Cosmos DB customer profile: Jet.com)https://satonaoki.wordpress.com/2018/05/18/azure-cosmos-db-customer-profile-jet-com/ […]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中