CloudflareとUpstashRedisでリミックスを使ったBlazingFastWebサイト
WebサイトまたはWebアプリを開発するとき、速度の最適化だけに何時間も費やしたいと思う人は誰もいません。問題は、高速なWebサイトが非常に重要であり、パフォーマンスが成功の決定要因になることが多いことです。RemixRunなどのWebフレームワークは、構成を最小限に抑えながらWebパフォーマンスを最適化することを目的として作成されました(「ゼロ構成」)。現在、高速を実現するのに役立つフレームワークが多数あります。
残念ながら、アプリのデータベースも非常に高速でない限り、ウェブサイトの最適な読み込み時間はほとんど役に立ちません。
今日は、優れたWebサイトの読み込み速度を実現し、それらをデータベースのピークパフォーマンスと組み合わせる方法を見ていきます。 UpstashRedisグローバルデータベースの概要。
なぜグローバルデータベースなのか?
ほとんどの個人は、Webサイトをオンラインで展開するときに、コンテンツ配信ネットワーク(CDN)を使用します。コンテンツ配信ネットワーク(CDN)は、サーバーのグローバルネットワークです。 Webサイトのファイルは、地理的に最も近い場所からクライアントにキャッシュして提供できるため、CDNは単一のサーバーシステムよりも大幅に低い遅延を実現します。これにより、世界中でWebサイトがすばやく読み込まれるようになります。Upstashのグローバルデータベースについて説明する場合、CDNの同じ概念がRedisデータベースに適用されます。グローバルデータベースを使用すると、データベースのレプリカが世界中の複数の地域に分散されます。これで、クライアントは最も近いリージョンにルーティングされ、最大10ミリ秒未満の遅延が発生します。
すでにたくさんのことを約束したので、実際にすべてがどのように機能するかを見てみましょう。
UpstashRedisグローバルデータベースを使用するRemixRunを使用してWebアプリを構築し、Cloudflareワーカーにデプロイします。
Cloudflareワーカーには、CDNと同様に、グローバルに展開できるという利点があります。これは、Remixアプリのサーバー側レンダリングがクライアントのできるだけ近くで行われるため、レイテンシが最小になることを意味します。 Upstashのグローバルデータベースと組み合わせると、これはパフォーマンス面で理想的なセットアップです。
選択したフォルダに移動して実行します
npx create-remix@latest
RemixRunアプリのセットアップを案内するダイアログが表示されます。
必ずCloudflareワーカーを選択してください 展開ターゲットとして。このウォークスルーでは、 JavaScriptを進めます。 アプリですが、TypeScriptを自由に選択してください。設定は次のようになります。
R E M I X - v1.2.3
💿 Welcome to Remix! Let's get you set up with a new project.
? Where would you like to create your app? upstash-remix
? Where do you want to deploy? Choose Remix if you're unsure, it's easy to chang
e deployment targets. Cloudflare Workers
? TypeScript or JavaScript? JavaScript
? Do you want me to run `npm install`? Yes
分割払いが終了したら、新しく作成したフォルダをコードエディタで開きます。
UpstashRedisグローバルデータベースを作成する
Upstash Redisグローバルデータベースについては、https://upstash.com/にアクセスして、ログインするか、アカウントを作成してください。コンソールで、[データベースの作成]をクリックし、名前を入力して、データベースの種類として[グローバル]を選択します。最後に[作成]をクリックして、データベースが作成されるのを待ちます。次に、UPSTASH_REDIS_REST_URL
をコピーします。 およびUPSTASH_REDIS_REST_TOKEN
。
プロジェクトで、.env
というファイルを作成します プロジェクトルートに、次のように両方の変数を追加します。
UPSTASH_REDIS_REST_TOKEN=<INSERT YOUR UPSTASH_REDIS_REST_TOKEN HERE>
UPSTASH_REDIS_REST_URL=<INSERT YOUR UPSTASH_REDIS_REST_URL HERE>
データベースを操作するために、@upstash/redis
をインストールしましょう。 npm install @upstash/redis
を含むnpmパッケージ 。
RemixRunアプリケーションの作成
データベースが設定されたので、ファイルapp/routes/index.jsx
を開きます。 、ボイラープレートコードを削除し、次のように入力します。
import { json, redirect, useLoaderData } from "remix";
import redis from "../utils/redis.server";
export const loader = async () => {
const start = new Date();
const count = await redis.get("counter");
return json({ count, loadingTime: new Date() - start });
};
export const action = async () => {
await redis.incr("counter");
return redirect("/");
};
export default function Index() {
const { count, loadingTime } = useLoaderData();
return (
<div style={{ fontFamily: "system-ui, sans-serif", lineHeight: "1.4" }}>
<h1>Record speeds with Remix on Cloudflare and Upstash Redis</h1>
<p>The button below was clicked {count} times already.</p>
<form method="post" action="/?index">
<button type="submit">Click me!</button>
</form>
<p>
It took <b>{loadingTime} ms</b> to read the number of button clicks from{" "}
<a href="https://upstash.com/redis">Upstash Redis</a>{" "}
<a href="https://docs.upstash.com/redis/features/globaldatabase">
Global Database
</a>
.
</p>
</div>
);
}
さらに、ファイルapp/utils/redis.server.js
を作成します と
// app/utils/redis.server.js
import { Redis } from "@upstash/redis/cloudflare";
export default Redis.fromEnv();
これは2つのことを行います。両方を見てみましょう。
1。 useLoaderData
を使用したサーバー側のレンダリングデータ
一番下のreturnステートメントには、表示されるシンプルなユーザーインターフェイスがあります
-
count
と呼ばれるカウンター変数 および -
loadingTime
という変数 。
もう少し上を見ると、これら2つの変数はuseLoaderData()
からのものであることがわかります。 針。このRemixRun固有のフックは、loader
と一緒に使用されます 上部の関数。そこで、キーcounter
を読み取ります。 データベースから、かかる時間を測定し、両方をuseLoaderData()
に返します。 function.loader
その後、Remix Runアプリをロードするたびに関数が実行されるため、誰かがWebサイトを要求するたびに、現在のcounter
が読み取られます。 価値、サーバー側はWebサイトをレンダリングし、クライアントに送り返します。
2。誰かが「Clickme!」をクリックしたときにカウンター変数をインクリメントします。ボタン。
Remix Runを使用すると、ビルドフォームを非常に簡単に作成できます。 JSXには、<form/>
があります。 POST
を送信するタグ /?index
へのリクエスト 誰かが送信ボタンをクリックしたとき。 Remix Runの素晴らしい点は、action
を追加するだけでよいことです。 ファイルに対して機能し、APIを明示的に作成しなくてもフロントエンドとバックエンドの相互作用を準備できます。action
関数の場合、カウンターをインクリメントし、変更を反映するためにWebサイトをリロードするようにクライアントに指示します。
🥳準備はできています
さて、あなたはたぶんあなたが今作成したものを見たいと思うでしょう。これを行うには、npm run dev
を実行します ブラウザでアプリを表示します。
- 「Clickme!」をクリックしますボタンをクリックして、カウントがどのように増加するかを確認します
- 測定された読み込み時間を見てください。ドイツでは、通常、レイテンシが20ミリ秒未満であることがわかりますが、Cloudflareにデプロイすると、レイテンシを半分に短縮する準備ができています。
Cloudflareでフルスピードに進み、今すぐ1桁のミリ秒のレイテンシーを達成しましょう!
まず、インストールしていない場合は、ドキュメントの説明に従ってCloudflare Workers CLIラングラーをインストールします:https://developers.cloudflare.com/workers/cli-wrangler/install-update/。 CLIも必ず認証してください。
まだアカウントをお持ちでない場合は、ここでcloudflareアカウントを作成し、Cloudflareでメールアドレスを確認した後、ダッシュボードに移動して、無料のカスタムCloudflareWorkersサブドメインを設定してください。
.env
から秘密を設定することを忘れないでください Cloudflareの場合も
wrangler secret put UPSTASH_REDIS_REST_TOKEN
...
wrangler secret put UPSTASH_REDIS_REST_URL
...
これが完了すると、アプリをデプロイできるようになります。
npm run deploy
Wranglerは、アプリがデプロイされるとアプリへのリンクを提供します。それを開いて、アプリの速度を確認してください。
https://remix-cloudflare-workers.soenkep.workers.dev/でデプロイ例を確認してください。
https://github.com/zunkelty/upstash-remix-runで完全なコード(環境変数なし)を見てください。
-
エッジキャッシングを使用した5ミリ秒のグローバルRedisレイテンシ
データベースとクライアントが同じリージョンにある場合、Redisを使用すると1ミリ秒のレイテンシーが簡単になります。ただし、クライアントをグローバルに分散させたい場合は、遅延が100ミリ秒を超えて増加します。これを克服するためにEdgeCachingを構築しました。 エッジキャッシング エッジキャッシングを使用すると、REST応答は、CDNと同様に、世界中のエッジロケーションにキャッシュされます。エッジキャッシングが有効になっている場合、平均で5msのグローバルレイテンシが見られます。 10の異なるリージョンにあるクライアントからのレイテンシー数を記録するベンチマークアプリケーションを参照し
-
CloudflareワーカーとのRedis@Edge
エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、