ストラップ用のサーバーレスRedisキャッシング
プロジェクトを時間どおりに提供するということは、通常、既存のテクノロジーを可能な限り活用する必要があることを意味します。カスタム実装につながるすべての決定は、独自のソリューションを維持する必要があることも考慮する必要があります。これが、Strapiのようなオープンソースツールが次のプロジェクトのRESTAPIを構築するための方法である理由です。
ストラピは最先端のヘッドレスCMSです。グラフィカルインターフェイスを使用してスキーマを定義できるため、技術者でない人でもデータをモデル化できます。開発チームは、バックエンドの実装について心配することなく、Webアプリとモバイルアプリの構築と新機能の提供に集中できます。結局のところ、大きなオープンソースコミュニティがStrapiを維持しています。
現在、StrapiはSQLiteを使用すると応答を比較的迅速に配信しますが、データとユーザーベースが拡大するにつれて、これは最初から最適なソリューションではない可能性があります。市場に出た後は、世界中に何千人ものユーザーが分散することになります。
したがって、Strapiをスケールアウトし、次にデータベースのデプロイメントをスケールアウトして、そのすべての負荷を処理する必要があります。ある種のキャッシュをプラグインできたら素晴らしいと思いませんか?
ストラップRESTキャッシュはストラッププラグインのコレクションです。これらは、LRUキャッシングをStrapiアプリに追加して、実際のデータベース要求を減らすのに役立ちます。
メモリ、Couchbase、Redisがサポートされており、カスタムプロバイダーを作成することもできます。ここでのエキサイティングな部分は、UpstashRedisに数分で接続できるRedisキャッシュプロバイダーです!
Upstash Redisは、Redisを使用するほとんどのシナリオで使用できます。違いは、数回クリックするだけでUpstashRedisをセットアップできることです。また、グローバルレプリケーションが付属しているため、Strapiインスタンスは最も近いレプリカにルーティングされます。これは、高速キャッシュに不可欠です。また、サーバーレスであるため、使用した分だけ料金を支払います。
では、UpstashRedisでStrapiを起動して実行する方法を見てみましょう。
このチュートリアルでは、UpstashアカウントとNode.jsのインストールが必要です。また、Strapiの優先パッケージマネージャーであるYarnも必要です。
既存のStrapiプロジェクトがある場合は、「RESTキャッシュの追加」セクションに直接進むことができます。次の手順は、使用するデータを設定するためのものです。
最初のステップは、Strapiを使用して新しいバックエンドを作成することです。これは、次のコマンドで実行できます。
$ npx create-strapi-app@latest strapi-upstash-redis-cache
コマンドが終了すると、Strapiはブラウザを開き、データモデルと最初のコンテンツを作成するための管理者ログインの詳細を要求します。
ログイン後、StrapiContent-TypeBuilderを使用して最初のデータ収集をモデル化できます。図1は、Strapi管理コンソールのContent-TypeBuilderの場所を示しています。
「新しいコレクションタイプの作成」リンクをクリックして、新しいタイプを作成します。 「Article」という名前を付けて、2つの単純なテキストフィールドを追加します。 1つのフィールドは「タイトル」と呼ばれる短いテキスト用で、もう1つは「コンテンツ」と呼ばれる長いテキスト用です。
図2は、[保存]ボタンをクリックする前のタイプの外観を示しています。
その後、そのコンテンツタイプの実際のインスタンスが必要になります。
図1に、コンテンツマネージャーの場所を示します。コンテンツマネージャーに移動し、右上にある[新しいエントリの作成]ボタンをクリックします。
図3に、新しいコンテンツエントリUIを示します。 [保存]ボタンと[公開]ボタンをクリックすることを忘れないでください。そうしないと、パブリックAPIを介してアクセスできないプライベートドラフトが作成されます。
記事の種類と実際の記事がありますが、一般には公開されていません。これを変更するには、パブリックロールを更新する必要があります。図4は、ナビゲーションのどこにあるかを示しています。
パブリックロールをクリックしてから、「Article」権限をクリックします。ここで、「検索」と「findOne」を選択し、この方法で「保存」をクリックする必要があります。そのAPIを開くと、すべての記事を一覧表示して1つの記事を読み込むことができます。
ブラウザで記事リソースを開くと、新しい記事が表示されます。デフォルトのStrapi設定では、次のURLのリソースが提供されます。
https://localhost:1337/api/articles
応答は次のようになります。
{
"data": [
{
"id": 2,
"attributes": {
"title": "My First Article",
"content": "This is an article!",
"createdAt": "2022-04-06T15:29:48.104Z",
"updatedAt": "2022-04-06T15:29:48.949Z",
"publishedAt": "2022-04-06T15:29:48.948Z"
}
}
],
"meta": {
"pagination": {
"page": 1,
"pageSize": 25,
"pageCount": 1,
"total": 1
}
}
}
RESTキャッシュの追加
最後に、Upstash Redisでキャッシュを追加することのエキサイティングな部分です!
そのためには、最初に3つのパッケージをインストールする必要があります。
yarn add strapi-plugin-redis \
strapi-plugin-rest-cache \
strapi-provider-rest-cache-redis
これらの3つのパッケージにより、StrapiはUpstashRedisデータベースにデータを送信できます。
UpstashRedisデータベースの作成
キャッシュを正しく構成するには、RedisインスタンスへのURLが必要です。このために、UpstashRedisデータベースを作成する必要があります。したがって、ブラウザでUpstash Consoleを開き、[データベースの作成]ボタンをクリックします。
作成プロセスが完了したら、データベースのURLを取得できます。これには数秒しかかかりません。 [ノード]タブを選択し、図5に示すようにコード例からURLをコピーします。
RESTキャッシュの構成
RESTキャッシュを構成するには、config/plugins.js
にファイルを作成する必要があります 次の内容で:
module.exports = {
redis: {
config: {
connections: {
default: { connection: "REDIS_URL" },
},
},
},
"rest-cache": {
config: {
provider: { name: "redis" },
strategy: {
contentTypes: [{ contentType: "api::article.article", hitpass: false }],
//debug: true,
},
},
},
};
redis
で フィールドでは、UpstashRedisデータベースへの接続を構成します。前の手順のURLには、Strapiが必要とするすべての資格情報が含まれています。
rest-cacheフィールドでは、使用するプロバイダーとキャッシュするコンテンツタイプをキャッシュに指示します。私たちの場合、それは単なる記事のコンテンツタイプです。 hitpass: false
何らかの認証が行われた場合でも、コンテンツが常にキャッシュされるようにします。
debug: true
のコメントを外した場合 、デバッグ出力が表示されます。この出力により、キャッシュが機能するかどうかを簡単に確認できます。
ストラップはデフォルトとしてSQLiteを使用します。これは開発用コンピューターでインプロセスで実行されるため、このシステムから数キロ離れた場所に配置されたUpstashRedisよりも高速です。実際のデータベースサーバーを使用する本番環境では、状況が大きく異なります。
すべてを正しく構成したら、開発サーバーを再起動できます。
yarn run develop
サーバーが稼働しているときは、次のURLを使用してサーバーに再度アクセスできます:
https://localhost:1337/api/articles
私たちのデータベースは最初のリクエストを処理し、UpstashRedisは次のことを行います。
Upstash Redisを使用すると、Strapiのデプロイを高速化するのに数分しかかかりません。 Upstash Consoleは、設定に貼り付けるだけのURLを提供してくれます。それだけです。
最初のUpstashRedisデータベースも無料なので、チェックしてください。クレジットカードは必要ありません!
-
エッジキャッシングを使用した5ミリ秒のグローバルRedisレイテンシ
データベースとクライアントが同じリージョンにある場合、Redisを使用すると1ミリ秒のレイテンシーが簡単になります。ただし、クライアントをグローバルに分散させたい場合は、遅延が100ミリ秒を超えて増加します。これを克服するためにEdgeCachingを構築しました。 エッジキャッシング エッジキャッシングを使用すると、REST応答は、CDNと同様に、世界中のエッジロケーションにキャッシュされます。エッジキャッシングが有効になっている場合、平均で5msのグローバルレイテンシが見られます。 10の異なるリージョンにあるクライアントからのレイテンシー数を記録するベンチマークアプリケーションを参照し
-
サーバーレスRedisのパイプラインRESTAPI
Upstashは、ネイティブのRedisAPIに加えてRESTAPIをサポートしています。 REST APIは、開発者がサーバーレスおよびエッジ関数からの接続の問題なしにRedisにアクセスするのに役立ちます。ただし、同じ関数で複数のRedisコマンドを実行する場合、これはデータベースを複数回呼び出すことを意味します。コミュニティメンバーの1人(@MasterGates)が、Discordチャンネルで素晴らしい提案をしてくれました。パイプラインAPI: パイプラインAPI Pipeline APIは、RedisPIPELINEコマンドをRESTAPIに適合させたものです。 1つのhtt