RedisMart:Redisを使用したフル機能の小売アプリケーション
RedisConfの基調講演を覚えていますか?はいの場合は、提示された小売アプリケーション(RedisMart)のカーテンの裏側での開発をお楽しみいただけます。そうでない場合は、YiftachとAshがそれを提示するのを見る時が来ました。こちらが動画へのリンクです:
この記事はシリーズの最初のものです。製品カタログ、分散リアルタイムインベントリ、およびAIを利用した製品検索を実装する方法を確認することで、RedisMart小売アプリケーションの主な要件とアーキテクチャに関する洞察を得ることができます。また、RedisEnterpriseがこれらすべての機能をどのように強化するかについても説明します。
要件
ソフトウェア開発でよくあることですが、いくつかの基本的な要件について説明することから始めましょう。非公式に記されたユーザーストーリーは次のとおりです。
- 小売顧客として:
- 速くしたい (<100msのエンドツーエンドのレイテンシ)カタログと製品の詳細へのアクセス 製品を見つけることができることによって さまざまな基準(全文、価格帯、他の顧客の評価、ファセット検索など)に基づいています。応答時間が長いと、バウンス率が高くなります。
- 商品のブランド名がわからない場合や、以前に購入したものと同じようなものが必要な場合は、画像で商品を購入したいと思います。私が持っているものとよく似ている、または視覚的に似ているカメラを見つけるのは素晴らしいことです。
- 安全な配達が欲しい または、オンラインで購入して、ストアまたはカーブサイドで受け取ることができます(クリックして収集します)。
- 在庫管理者として:
- 顧客に優れたフルフィルメントエクスペリエンスを提供するには、在庫を正確にリアルタイムで表示する必要があります。
- 在庫を最適化して、需要の高い商品の在庫を維持し、動きの遅い商品の在庫を減らしたいと考えています。
- 在庫を最適化するには、さまざまな店舗やフルフィルメントセンターの在庫をほぼリアルタイムで表示する必要があります。
アーキテクチャ
要件がわかったので、Redisがどのように役立つかを考えてみましょう。
- RediSearchは、数値フィルター、全文検索、ジオインデックス、スコアリング、および集計を使用した豊富な製品検索を可能にします。
- Redis Enterpriseのアクティブ-アクティブ機能は、箱から出してすぐに在庫全体で地理的に複製されたリアルタイムの更新を提供します。
- RedisAI、RedisGears、およびRediSearchは、リアルタイムの推論とベクトル類似性検索のためのデータベース統合された機械学習パイプラインを構築するために活用されます。
そこから、次のデザインを想像するのはそれほど難しくありませんでした:
青いボックスはサービスを表します。赤いボックスは、これらのサービスで使用されるデータベースを示しています。
次のようないくつかのマイクロサービスアプローチに従いました:
- サービスごとに1つのデータストア :各サービスには独自のデータストアがあり、データは別のサービスのデータストアに直接アクセスするのではなく、サービスインターフェースを介して交換されます。
- ポリグロットの永続性 :各サービスは、要件に基づいて最適なデータストアを使用します。多言語の永続性について話す:Redisは、モジュールが提供するさまざまな機能とデータモデルを組み合わせて、要件に合ったデータストアを構築できるデータプラットフォームです。 Redisと一部のRedisモジュールを使用して赤いボックスを実装したのは当然のことです。
実装
RedisMartは、WebショップWebアプリケーションによって提供されるユーザーインターフェイスを提供します。 RedisMartには、フロントエンドUI(顧客向けの小売Webサイト)とバックエンドUI(在庫管理用)があります。舞台裏でアプリケーションによって活用される一連のサービスを実装しました。
- 購入: 購入サービスは(驚くべきことに)顧客の購入を処理します。
- 在庫: 在庫サービスは、在庫内の在庫量に関する質問に答え、顧客が商品を購入すると量が減少します。インベントリの更新は、Redis Enterpriseのアクティブ-アクティブ機能を利用して、ほぼリアルタイムで他の場所のインベントリに複製されます。 Redis Enterpriseは、競合のないレプリケートされたデータ型を利用して、同時更新を処理します。この場合、カウンター損失を防ぐために、リセット可能な正負のカウンターデータ型が使用されます。
- 製品カタログ :製品カタログサービスは、製品関連の情報を提供し、製品を見つけるための高度な方法を提供します。これは、RediSearch+RedisJSONモジュールがデプロイされているRedisデータベースを使用します。 RedisJSONを使用すると、製品の詳細をJSONドキュメントとして直接保存できます。 RediSearchは、JSONドキュメントのインデックス作成、クエリ、および全文検索を行うことができます。製品の更新は、Redis Enterpriseのアクティブ-アクティブ機能を使用して、複数のサイトに簡単に伝播できます。
- 画像認識 :最後に、画像認識サービスは、画像のベクトル類似性検索のためのAIモデル提供機能を提供します。これは、RedisGears、RedisAI、およびRediSearchモジュールがインストールされているRedisデータベースを使用します。 RedisGearsを使用すると、データパイプラインを構築し、データが存在する場所の近くで実行できます。 AIモデルの提供と推論にRedisAIを利用しました。 RediSearchを利用して、AIモデルの出力に基づいて類似画像の実際の検索を実行します。
前述のように、これはシリーズの最初の記事です。個々のサービスをどのように実装したかについては、引き続きご注目ください。
RedisMart
カーテンの後ろを見てきたので、アプリケーションがステージ上でどのように見えるかを見てみましょう。
ホームページには、主な製品カテゴリが表示されます。カテゴリをクリックすると、そのカテゴリに属する最初の16個の製品が返され、製品カタログサービスを介して検索クエリがトリガーされます。
「製品の検索」フィールドでは、製品の全文検索を実行できます。次の検索結果ページが表示されます:
検索結果ページには、ファセット検索と実際の結果リストの2つのセクションがあります。ファセット検索を使用して、検索結果をさらに制限することができます。これを行うには、メインカテゴリ、サブカテゴリ、価格、および評価をフィルタリングします。ブログシリーズのパート2では、RediSearchを使用してこのようなファセット検索を実現する方法の実装の詳細について説明します。 RedisMartのデバッグビューを見てみましょう。
ご覧のとおり、タグと集計が役割を果たします。
右上隅にある小さなカメラアイコンをクリックすると、製品カタログ内で見つけたいものの画像を撮ることができます。次のダグの写真では、データベースに他のダグは見つかりませんでした…
…でも、ヘッドフォンがうまく見つかりました。
ヘッドフォンを決めて購入したいとします。選択した後、RedisMartを使用してそれらをショッピングカートに追加できます。チェックアウトプロセス中に、それらを配達するか、近くの場所で収集するかを決定できます。
RediSearchのジオサーチは、このローカルピックアップ機能を強化します。デバッグビューは、これが舞台裏でどのように実現されているかについてのヒントを再び提供します。
顧客が購入を完了するとすぐに、在庫のあるアイテムの数を減らすことによって在庫サービスが関与します。これにより、アプリケーションのバックエンドに直接アクセスできるため、在庫を管理できます。 RedisMartは、複製された各サイトで在庫の即時更新がどのように観察されるかを視覚化します。米国での購入(GCP us-central1)は、ヨーロッパ(Azure北ヨーロッパ)に瞬く間に複製されます。
繰り返しになりますが、詳細については後で説明します。ここでの主なポイントは、非常に低いネットワーク遅延で近くの場所からデータにアクセスできる一方で、データが複数のサイト間で同時に変更されると、カウンターの損失が防止されることです。
次のビデオを見ると、アプリケーションの動作を確認できます。
概要
Redisを使用したフル機能の小売アプリケーションの構築に関するブログシリーズのこの最初の部分をお楽しみいただけたでしょうか。ご覧のとおり、Redisリアルタイムデータプラットフォームでは、RediSearch + RedisJSONのドキュメントデータベース機能を活用することで、製品情報への即時アクセス(エンドツーエンドの遅延が100ミリ秒未満)などの要件に対応できます。 RediSearch + RedisGears + RedisAIの組み合わせにより、AIを利用した画像検索で、製品カタログ内の類似製品を見つけることができます。さらに、ファセットや地理検索などの機能についても説明しました。最後になりましたが、Redis Enterpriseのアクティブ-アクティブ機能に基づいて、地理的に複製されたリアルタイムのインベントリを簡単に作成できることを示しました。これらすべてを備えたRedisリアルタイムプラットフォームは、小売企業が全体的な購入体験にプラスの影響を与え、顧客に可能な限り最高のフルフィルメント体験を提供し、最も費用効果の高い方法で在庫を最適化するのに役立ちます。
RedisMartに実装した個々のサービスについて詳しく知りたいですか?その後、シリーズの次のブログ記事をお楽しみに!
自分で試してみませんか?リアルタイムデータプラットフォームとしてのRedisで手を汚すためのリンクは次のとおりです。
- モジュールの詳細
- github.com/RediSearch
- github.com/RedisJSON
- github.com/RedisGears
- github.com/RedisAI
- Redisエンタープライズクラウド
- アクティブ-アクティブな地理的分布
クレジット
このデモアプリケーションに貢献してくれたすべての人に感謝します:
- RedisConf中にデモアプリケーションを提示してくれたYiftachShoolmanとAshSahu
- デモアプリケーションの要件リストに貢献し、RedisConfを整理し、UIデザインを支援し、このブログ投稿に貢献してくれたRedisマーケティングチーム(特にUdi Gotlieb、Ash Sahu、Doug Tidwell、Bryson Coles)
- デモアプリケーションの実装、テスト、設計、およびこのブログ投稿への貢献を行ったTechnical Enablementチーム(特にMartin Forstner、Greg Georges、David Maier)
- モジュールと画像認識サービスを開発するためのCTOチーム(特にLeibale Eidelman、Guy Korland)
- デモアプリケーションの要件リストに貢献し、製品機能を提供してくれた製品管理チーム(特に、Pieter Cailliau、Emmanuel Keller、Jonathan Salomon、Amiram Mizne)
- そしてここで言及するのを忘れたすべての人
このブログシリーズは、RedisMartアプリケーションの主要な開発者であるMartinForstnerに捧げたいと思います。彼が最近亡くなったことを共有することは大きな悲しみを伴います。マーティンの知識、才能、ユーモアのセンスは誰にも負けませんでした。彼はRedisのソフトウェアエンジニア以上のものでした。彼は同僚、チームメイト、メンター、そして友人でした。安心してください、マーティン、私たちはあなたがいなくて寂しいです!
-
CloudflareワーカーとのRedis@Edge
エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、
-
例を含むRedisGEORADIUSBYMEMBERコマンド–Redisチュートリアル
このチュートリアルでは、特定の領域に該当するキーに格納されている地理空間値の要素を取得する方法について学習します。このために、Redis GEORADIUSBYMEMBERを使用します コマンド。 GEORADIUSBYMEMBERコマンド このコマンドは、キーに格納されている地理空間値(Sorted Set)の1つ以上のメンバーを返すために使用されます。これらのメンバーは、経度、指定されたメンバーの緯度値、および半径の引数を使用して計算された領域の境界内にあります。この面積は、指定されたメンバーの経度、緯度の値を円の中心位置として使用し、指定された単位の半径を円の半径として使用して計算