優れたソフトウェアと実用的なチュートリアル
ウェブサイトのオフロードにCloudflare Workersを使用する
使い方 クラウドフレア 労働者負荷分散, Cloudflare Workersのウェブサイトトラフィック転送設定, Cloudflareワーカー 负载均衡代码示例, 重み付けベースのトラフィック分散の実装, Cloudflare Workersのパフォーマンス監視と最適化!
Cloudflare Workersは、Cloudflareのエッジネットワーク上でカスタムコードを実行できる強力なサーバーサイドJavaScriptランタイムです。Cloudflare Workersを使用すると、ウェブサイトのトラフィックを柔軟に管理し、トラフィックの迂回と負荷分散を実現できます。この記事では、Cloudflare Workersの使い方をご紹介します。ウェブサイトの転用読み込みが高速化され、Web サイトの安定性とパフォーマンスが向上します。
1. Cloudflareワーカーの作成
- 登録してログインまず、Cloudflareの公式サイトでアカウントを登録してログインする必要があります。
- ワーカーの作成Cloudflareダッシュボードで「Workers」オプションを選択し、「Create a Service」ボタンをクリックします。Workerに名前を付けて、サービスを作成します。
- コードを書く: Cloudflare のオンライン エディターで Worker コードを記述することも、ローカル開発環境を使用して開発し、Cloudflare にデプロイすることもできます。
2. 基本的な負荷分散の実装
負荷分散コードの作成: Workerコードでは、JavaScriptを使用して基本的な負荷分散を実装できます。以下は、トラフィックを複数のサーバーに転送する簡単なサンプルコードです。
const BACKENDS = [ 'https://backend1.example.com', 'https://backend2.example.com', 'https://backend3.example.com' ]; addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { const url = new URL(request.url); const backend = BACKENDS[Math.floor(Math.random() * BACKENDS.length)]; url.hostname = new URL(backend).hostname; return fetch(url.toString(), request); }
このコードスニペットはリクエストをランダムに分配します
バックエンド
アレイ内の異なるバックエンド サーバー。ルーティングルールの設定Cloudflare Workersの設定ページで、ルーティングルールを設定し、作成したWorkerを使用するリクエストを指定します。これらのルールは、パス、ホスト名、その他のリクエスト属性に基づいて設定できます。
3. 重みベースの負荷分散の実装
重みの設定: 特定の重みに基づいてトラフィックを分散したい場合は、上記のコードを修正し、重みに基づいてリクエストの分散を決定します。例を以下に示します。
const BACKENDS = [ { url: 'https://backend1.example.com', weight: 1 }, { url: 'https://backend2.example.com', weight: 3 }, { url: 'https://backend3.example.com', weight: 1 } ]; addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { const url = new URL(request.url); const backend = getWeightedBackend(); url.hostname = new URL(backend.url).hostname; return fetch(url.toString(), request); } function getWeightedBackend() { let totalWeight = BACKENDS.reduce((sum, backend) => sum + backend.weight, 0); let random = Math.random() * totalWeight; for (let backend of BACKENDS) { if (random < backend.weight) { return backend; } random -= backend.weight; } }
このコードは、指定された重みに応じてバックエンド サーバーを選択し、トラフィックの重み付け分散を実現します。
4. 監視と最適化
- 労働者のパフォーマンスの監視: Cloudflare の分析ツールを使用して、リクエストの応答時間、エラー率などのワーカーのパフォーマンスを監視します。このデータは、負荷分散戦略を調整してパフォーマンスを最適化するのに役立ちます。
- コードの最適化: 監視結果に基づいてワーカー コードを最適化し、効率的で安定した負荷分散を実現します。
5. テストと展開
- 検査員: デプロイする前に、Cloudflare のテスト ツールを使用して Worker の機能をテストし、期待どおりに動作することを確認します。
- 本番環境へのデプロイテストに合格したら、Worker を本番環境にデプロイし、トラフィック状況に基づいて調整を行います。
Cloudflare Workers 実践チュートリアル
Cloudflare プラットフォームでドメイン名をホストした後、Cloudflare Workers を使用して Web サイトのドメイン名の負荷を分散します。
リソースを転用するための戦略をいくつか紹介します。
- DNSラウンドロビン
- オープンソース プラットフォーム Nginx、Apache など
- 大手クラウドベンダー等が提供するロードローダーサービス
- CND
当初はCloudflareプラットフォームのスマートDNSサービスを試してみたかったのですが、有料(月額$5)だったので、Cloudflare Workersで試してみることにしました。
Cloudflareアカウントにサインアップする
- 行く クラウドフレア アカウントを登録し、ドメイン名をCFにホストする
- CNAMEレコードを追加すると、
a.aaa.com
AサーバーのIPに解決 - Aレコードを追加すると
b.aaa.com
サーバーBのIPに解決 - 完全厳密モードの SSL/TLS
- (しなければならない) DNSレコードでプロキシを有効にする(Xiaoju Cloud)
労働者の創出
- ワーカーとページに移動
- 選ぶ
アプリケーションを作成する
- 次のコードを貼り付けます
addEventListener('fetch', event => {event.respondWith(handleRequest(event.request)) }) // ターゲット サービスをポーリングします const TARGETS = [ 'a.aaa.com', 'b.aaa.com' ] async function handleRequest(request) {const url = new URL(request.url) url.hostname = getRandomServer() return await fetch(url, request) } // 1 時間ごとに異なるターゲットを切り替えます function getServerEveryHour() {const d = new Date() const h = d.getHours() return TARGETS[h%TARGETS.length] } // 毎回ランダムなターゲット (ターゲット間にクロスドメインがあるかどうかに注意してください) function getRandomServer() {return TARGETS[Math.floor(Math.random() * TARGETS.length)] }
- 保存して展開する
ワーカーの使用
- 新しく作成されたワーカーを表示し、詳細ページでトリガーを選択します。
- ルーティング中インターフェースクリックルートの追加
- ルート: オプション
aaa.com
ワイルドカードも使用可能です。特定の可視 - 作成した領域を選択します。
aaa.com
- ルート: オプション
確認する
作成した Workers 構成ページの右上隅をクリックして、JavaScript コードを編集、デバッグ、プレビューします。
転換が有効かどうかを確認するには、次のコードを変更します。
// ポーリング対象サービス const TARGETS = [ 'a.aaa.com', 'b.aaa.com' ]
ページを更新すると、a.aaa.com が読み込まれることがあります。これは設定が有効であることを意味します。