Huawei クラウド アプリケーション ミドルウェア DCS シリーズ - Redis 実装 (電子商取引 Web サイト) フラッシュ セールの例

クラウドサービス、API、SDK、デバッグ、閲覧、全部できます

短い記事から学ぶことができます: アプリケーション ミドルウェア シリーズの Redis 実装 (電子商取引 Web サイト) フラッシュ セールの例

1 DEVKITとは

Huawei Cloud Developer Plug-in (Huawei Cloud Toolkit) は、Huawei Cloud の製品機能を開発者のデスクトップに拡張するもので、開発者がローカルで Huawei Cloud に迅速に接続できるようにし、Huawei Cloud から開発者へのラストマイルを開放します。Huawei Cloud ToolKit は、Huawei Cloud の開発者エコシステム ツール システムを中心に構築された一連の IDE プラグインであり、VS Code、IntelliJ IDEA およびその他の一連のプラットフォームに加え、Huawei Cloud の自社開発 CodeArts IDE をサポートし、開発者がより効率的にアプリケーションを構築できるようにします。そして便利に。開発者により安定、高速、安全なプログラミング エクスペリエンスを提供することに尽力します。

体験パス:ツールキット - Huawei Cloud

2 IDE と DEVKIT の関係

2.1 CodeArts IDEとは何ですか?

CodeArts IDE は、ソース コード エディターのシンプルさと、コード補完やデバッグなどの開発者ツールの機能を組み合わせた統合開発環境 (IDE) です。

ダウンロード パス: Toolkit-Huawei Cloud

2.2 IntelliJ IDEA と DEVKIT の関係

インストールの準備

JDK1.8以降をダウンロードしてインストールします。

IntelliJ IDEA 2020.2 以降をダウンロードしてインストールします。

インストールの検証

IntelliJ シリーズ プラットフォームにプラグインが正常にインストールされると、左側のナビゲーション バーに Huawei Cloud Toolkit アイコンが表示され、それをクリックすると背面パネルに「Huawei Cloud API」という文字が表示され、インストールが成功したことが示されます。

ダウンロード パス: Toolkit-Huawei Cloud

2.3 CodeArts IDE と DEVKIT の関係

API プラグインは CodeArts IDE のネイティブ組み込みプラグインであり、デフォルトでインストールされます。関連するアイコンは左側のナビゲーション バーに表示されます。

ダウンロード パス: Toolkit-Huawei Cloud

2.4 Visual Studio Code IDE と DEVKIT の関係

インストールの準備

最新バージョンの Visual Studio Code をダウンロードしてインストールします。

インストールの検証

VS Code IDE にプラグインが正常にインストールされると、左側のナビゲーション バーに Huawei Cloud Toolkit アイコンが表示され、それをクリックすると背面パネルに「Huawei Cloud API」という文字が表示され、インストールが成功したことが示されます。

ダウンロード パス: Toolkit-Huawei Cloud

3 Redis実装(ECサイト)フラッシュセール例

3.1 Redis実装(ECサイト)フラッシュセール例

リリースノート

この例は、Huawei Cloud Distributed Cache Service Redis Basic Edition 5.0 に基づいて開発されています。

導入

Redis実装(ECサイト)フラッシュセール例(Java版)

Redis キャッシュ データベースは、電子商取引 Web サイトの製品カテゴリ、推奨システム、フラッシュ セール活動に適しています。

たとえば、フラッシュ セール アクティビティは同時実行性が高いため、従来のリレーショナル データベースに大きなアクセス圧力がかかり、高度なハードウェア構成 (ディスク IO など) のサポートが必要になります。Redis データベース、単一ノードの QPS サポートは 100,000 に達し、フラッシュの同時実行に簡単に対応できます。フラッシュセールとデータロックを実装するコマンドは簡単で、SET、GET、DEL、RPUSH などのコマンドを使用するだけです。分散アプリケーションをロックすると、過剰な在庫や無秩序なアクセスを回避できます。この実践では、Redis を使用して分散アプリケーションをロックする方法を紹介します。

開発前の準備

Huawei Cloud アカウントを登録します。詳細な手順については、「Huawei Cloud Management Console のユーザーとして登録する方法」を参照してください。, 実名認証が完了します。

パブリック IP アドレスを持つ ECS が購入されました。詳細については、「Linux Elastic Cloud サーバーの購入とログイン」を参照してください。

DCS キャッシュ インスタンスが購入されました。詳細な操作については、「キャッシュ インスタンスの購入」を参照してください。DCS インスタンスと購入した ECS が同じ仮想プライベート クラウドおよびサブネット内にあることを確認し、購入したインスタンスで Redis へのパブリック ネットワーク アクセスを構成する必要があります。詳細については、「Nginx を使用してパブリック ネットワークから Redis 4.0/5.0 スタンドアロン/アクティブ/スタンバイ/プロキシ クラスター インスタンスにアクセスする」を参照してください。

SDKのインストール

Maven を通じて SDK を取得してインストールできます。まず、Maven をダウンロードしてオペレーティング システムにインストールする必要があります。インストールが完了したら、対応する依存関係を Java プロジェクトの pom.xml ファイルに追加するだけです。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

使い始める

依存モジュールをインポートする

// 通用唯一识别码类
import java.util.UUID;
// Redis客户端Jedis类
import redis.clients.jedis.Jedis;

ロック

サンプルコード

 /*
     * @param lockName      锁名
     * @param timeout       获取锁的超时时间
     * @param lockTimeout   锁的有效时间
     * @return              锁的标识
     */
    public String getLockWithTimeout(String lockName, long timeout, long lockTimeout) {
        String ret = null;
        Jedis jedisClient = new Jedis(HOST, PORT);

        try {
            String authMsg = jedisClient.auth("YOUR PASSWORD");
            if (!SUCCESS.equals(authMsg)) {
                System.out.println("AUTH FAILED: " + authMsg);
            }

            String identifier = UUID.randomUUID().toString();
            String lockKey = "DLock:" + lockName;
            long end = System.currentTimeMillis() + timeout;

            while (System.currentTimeMillis() < end) {
                String result = jedisClient.set(lockKey, identifier, SET_IF_NOT_EXIST, EXPIRE_TIME, lockTimeout);
                if (SUCCESS.equals(result)) {
                    ret = identifier;
                    break;
                }

                try {
                    Thread.sleep(2);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        } catch (Exception e) {

        } finally {
            jedisClient.quit();
            jedisClient.close();
        }

        return ret;
    }

ロックを解除する

サンプルコード

 /*
     * @param lockName        锁名
     * @param identifier    锁的标识
     */
    public void releaseLock(String lockName, String identifier) {
        Jedis jedisClient = new Jedis(HOST, PORT);

        try {
            String authMsg = jedisClient.auth("YOUR PASSWORD");
            if (!SUCCESS.equals(authMsg)) {
                System.out.println("AUTH FAILED: " + authMsg);
            }

            String lockKey = "DLock:" + lockName;
            if (identifier.equals(jedisClient.get(lockKey))) {
                jedisClient.del(lockKey);
            }
        } catch (Exception e) {

        } finally {
            jedisClient.quit();
            jedisClient.close();
        }
    }

携帯電話のフラッシュセールをシミュレーションする

サンプルコード

public void handleOder() {
        String userName = UUID.randomUUID().toString().substring(0, 8) + Thread.currentThread().getName();
        String identifier = DLock.getLockWithTimeout("Huawei Mate 10", 10000, 2000);
        System.out.println("正在为用户:" + userName + " 处理订单");
        if (n > 0) {
            int num = MAX - n + 1;
            System.out.println("用户:" + userName + "购买第" + num + "台,剩余" + (--n) + "台");
        } else {
            System.out.println("用户:" + userName + "无法购买,已售罄!");
        }
        DLock.releaseLock("Huawei Mate 10", identifier);
    }

1.1 アプリケーションシナリオ

アプリケーションシナリオ

E コマースのフラッシュ セールは、オンライン入札活動です。通常、販売者は多数の顧客を引き付けるために、プラットフォーム上で少量の希少な商品をリリースします。プラットフォームには、通常の数十倍、場合によっては数百倍の注文リクエストが届きます。ただし、正常に注文できる顧客はわずかです。電子商取引フラッシュセールシステムの転用プロセスは、次のステップに分けることができます。

ユーザー リクエストがシステムに入力される: ユーザーがフラッシュ セール リクエストを開始すると、リクエストはまず負荷分散サーバーに入力されます。

負荷分散: 負荷分散サーバーは、負荷分散を実現するために、特定のアルゴリズムに基づいてリクエストを複数のバックエンド サーバーに分散します。負荷分散アルゴリズムは、ポーリング、ランダム、最小接続数などの方法を採用できます。

ビジネス ロジック処理: リクエストを受信した後、バックエンド サーバーはビジネス ロジック処理を実行し、リクエストされた製品数量、ユーザー ID およびその他の情報に基づいてそれを検証します。

在庫控除: 在庫が十分である場合、バックエンドサーバーは在庫控除操作を実行し、注文情報を生成し、フラッシュセールが成功したという情報をユーザーに返します。在庫が不足している場合、ユーザーに情報を返します。フラッシュセールが失敗したという情報。

注文処理: バックエンド サーバーは注文情報をデータベースに保存し、ユーザーに注文ステータスを通知するメッセージの送信などの非同期処理を実行します。

キャッシュの更新: バックエンド サーバーは、次のフラッシュ セール リクエストを処理するためにキャッシュ内の製品在庫情報を更新します。

フラッシュ セール プロセス中、データベースは複数回アクセスされます。注文時には、通常、アクセスを制限するために行レベルのロックが使用されます。ロックを取得することによってのみ、データベースのクエリと注文が可能になります。ただし、フラッシュセール中に大量の注文リクエストが発生すると、データベースへのアクセスがブロックされることがよくあります。

2 プラグインの魅力を体験する

Huawei Cloud 開発キットがオンラインになりました: Toolkit-Huawei Cloud

おすすめ

転載: blog.csdn.net/hwxiaozhi/article/details/133900553