Serverlessノード.JPのURL短縮アプリケーションは、upstashカフカと


これは単純なノードです.JS URL短縮アプリを使用するCloudflare Workers .
このアプリはCloudflare Workers and Upstash データを保存するためのREDIS、およびMaterialize リアルタイムデータ解析のために.
Upstash Serverless、低レイテンシを提供し、KafkaとRedisのソリューションを行くように支払う.
Materialize リアルタイムアプリケーションのストリーミングデータベースです.具体的には、さまざまなストリーミングソース(KAKKA)、データストア、データベース(S 3とPostgresのような)、およびファイル(CSVとJSONのような)からの入力データを受け取り、SQLを使用して問い合わせをすることができます.

アプリ構造


デモアプリケーションには次の構造があります.
  • 短いリンクを追加し、他のURLにそれらをリダイレクトすることができます無制限のCloudFlare労働者.
  • すべてのデータは、Upstash Serverless Redisクラスタにキー値ペア(短いリンク->ロングリンク)として格納されます.
  • あなたが短いリンクを訪問するたびに、それはイベントをトリガし、Uststashカフカにそれを格納します.
  • その後、我々はUststashカフカからデータを取得し、リアルタイムで具体化することを分析します.
  • アプリのデモはここで見つけることができます
    https://cf-url-shortener.bobbyiliev.workers.dev/admin

    ダイヤグラム


    以下はアプリケーション構造の図です.

    デモ


    ここでは、アプリの動作方法の簡単なデモです

    必要条件


    始める前に、次のようにする必要があります
  • UpstashのRedisクラスタとKafkaクラスタ
  • upstashというカフカ話題visits-log .
  • CloudFlare CLIツールと呼ばれます.wrangler あなたのローカルマシンでhere
  • 説明したように、ローカルマシン上で実行される実現可能なインスタンスhere またはMaterialize Cloud instance .
  • このデモの実行


    すべての前提条件があれば、次の手順を実行できます.
  • リポジトリをクローンし、次のコマンドを実行します.
  • git clone https://github.com/bobbyiliev/cf-url-shortener.git
    
  • ディレクトリにアクセスします
  • cd cf-url-shortener
    
  • インストールnpm 依存:
  • npm install
    
  • を実行するwrangler CloudFlareで認証するコマンド
  • wrangler login
    
  • それからwrangler.toml ファイル更新account_id CloudFLASアカウントIDにマッチするには、次の手順に従います.
  • account_id = "YOUR_ACCOUNT_ID_HERE"
    
  • 以下の秘密をCloudFlareで設定しますwrangler ツール
  • wrangler secret put UPSTASH_REDIS_REST_URL
    wrangler secret put UPSTASH_REDIS_REST_TOKEN
    wrangler secret put UPSTASH_KAFKA_REST_URL
    wrangler secret put UPSTASH_KAFKA_REST_USERNAME
    wrangler secret put UPSTASH_KAFKA_REST_PASSWORD
    

    Make sure to use the REST API URLs and not the Broker details.

  • 次のコマンドを実行してCF Workerを配置します.
  • wrangler deploy
    
    CFの労働者が配置されている場合は、短いリンクを追加することができますし、他のURLにリダイレクトする管理者のURLを訪問することができます.

    セットアップ


    一度CFの労働者を配置したら、リアルタイムでUFSTashカフカのデータを分析するために具体化を設定することができます.
    実体化されたクラウドで新しい実体化インスタンスを作成することから始めましょう.
  • https://materialize.com/docs/cloud/get-started-with-cloud/
  • あるいは、ローカルにMaterializeをインストールすることもできます.
  • https://materialize.com/docs/install/
  • インスタンスを作成した後、psql ドキュメントに示すコマンド.

    カフカソースを作成する


    The CREATE SOURCE ステートメントを使用すると、外部のKAFKAデータソースに実体化を接続し、データがSQLテーブルにあるかのように、そのデータと対話できます.
    新しいカフカソースを作成するには、次のステートメントを実行します
    CREATE SOURCE click_stats
      FROM KAFKA BROKER 'UPSTASH_KAFKA_BROKER_URL' TOPIC 'visits-log'
      WITH (
          security_protocol = 'SASL_SSL',
          sasl_mechanisms = 'SCRAM-SHA-256',
          sasl_username = 'UPSTASH_KAFKA_BROKER_USERNAME',
          sasl_password = 'UPSTASH_KAFKA_BROKER_PASSWORD'
      )
    FORMAT BYTES;
    

    Change the Kafka details to match your Upstash Kafka cluster Broker and credentials.


    次に、私たちはNON-materialized View , 他の具体化されたビューで使用する再利用可能なテンプレートの種類として考えることができます.
    CREATE VIEW click_stats_v AS
        SELECT
            *
        FROM (
            SELECT
                (data->>'shortCode')::string AS short_code,
                (data->>'longUrl')::string AS long_url,
                (data->>'country')::string AS country,
                (data->>'city')::string AS city,
                (data->>'ip')::string AS ip
            FROM (
                SELECT CAST(data AS jsonb) AS data
                FROM (
                    SELECT convert_from(data, 'utf8') AS data
                    FROM click_stats
                )
            )
        );
    
    最後に、作成materialized view Kafkaソースのデータを分析するには、次の手順に従います.
    CREATE MATERIALIZED VIEW click_stats_m AS
        SELECT
            *
        FROM click_stats_v;
    
    次に標準SQLを使用して実体化されたビューを問い合わせることができますが、サブミリ秒の遅延でデータをリアルタイムで取得できます.
    SELECT * FROM click_stats_m;
    
    あなたは一緒に具体化された見解を積み重ねることができます、それで、短いリンクにつきクリック数で注文しましょう:
    CREATE MATERIALIZED VIEW order_by_clicks AS
        SELECT
            short_code,
            COUNT(*) AS clicks
        FROM click_stats_m
        GROUP BY short_code;
    
    具体化の大きな特徴の一つはTAIL .TAIL ストリームは、ソース、テーブル、またはビューからの更新が発生します.
    だから我々の具体化されたビューからデータをストリームを使用してTAIL , 次の文を使用できます.
    COPY ( TAIL ( SELECT * FROM order_by_clicks ) ) TO STDOUT;
    
    詳しくはTAIL , このブログ記事をチェックしてください

    Subscribe to changes in a view with TAIL in Materialize


    結果を表示する


    具体的にはPostgresワイヤ互換性があるので、MetabaseのようなBIツールを使用して、Mitiializeインスタンスのリアルタイムデータストリームを使用してビジネスインテリジェンスダッシュボードを作成できます.
    Metabase + Materializeの詳細については、公式ドキュメントを参照してください.

    Metabase + Materialize


    短いリンクあたりのクリック数を示すダッシュボードの例

    結論


    あなたのUpstashカフスServerlessインスタンス内のデータを分析するために材料を使用してデータにリアルタイムの洞察を得るために素晴らしい方法です.
    次のステップとして、具体化とupstashについて学ぶいくつかの他の大きなリソースがあります.
  • Materialize
  • Upstash
  • Upstash Kafka
  • Upstash Redis
  • Materialize Docs