AWSアマゾンクラウドパートナー: AWSクラウドフロントの高度なプレイを公開: Edge @ Lambdaを利用してエッジノードでカスタマイズされた方向性を実現
国境を越えた電気商、海外の独立駅や大流量の海外Appをプレイした友人は
Amazonクラウドフロント (AWSのグローバルCDN)
知らないに違いない。普段は、大きな「静的キャッシュシールド」として使われています。画像をキャッシュしたり、ビデオを加速したり、悪意のあるDDoS攻撃をブロックしたりします。
クラウドフロントの理解が「静的キャッシュ」にとどまっていれば、本当に暴れる。
今日は高級なハードコアの遊び方を話します
Lambda @ Edge
。簡単に言えば、カスタマイズされたコード (Node.jsまたはPython) をAWSの世界中の何百ものCDNエッジノードに直接「送信」することができます。要求はまだあなたの発信元サーバに届かず、ユーザーに最も近いCDNノードで、コードはすでに実行され、カスタマイズされた分流、リダイレクト、コンテンツの修正が完了しています。
これは、ソースサーバがビジネスロジックのストレスの90% を分担するだけでなく、グローバルユーザーの応答遅延を最大限に圧縮するのに役立ちます。私たちはでたらめを言うことなく、直接整理しましょう。
第一段階: Lambda @ Edgeの4つのトリガータイミングがわかります
エッジノードで模様を出すには、まず死んで、CloudFrontの完全な要求チェーンを覚えておく必要があります。1つの要求がユーザーの携帯電話からデータを入手するまで、全部で経過する
4つのレベル
。Lambdaコードを任意のレベルに正確に挿入できます
Viewer Request (視聴者リクエスト): ユーザーはCDNノードにリクエストを送信したばかりです。この時点でCDNは自分がキャッシュされているかどうかをチェックしておらず、コード挿入はここで最適である: A/Bテスト分流、特定の悪意のあるIPのブロック、古いURLのリダイレクト。
Origin Request (発信元要求):CDNノードがチェックしたところ、キャッシュがないことがわかり、無理に発信元サーバにデータを取る準備ができた。コード挿入は、ソースパスを動的に修正し、ユーザーデバイス (携帯電話/パソコン) に応じて要求を別のソースステーションに転送するのに適しています。
Origin Response (ソース局応答): ソース局サーバはCDNノードにデータを吐き出し、キャッシュに保存する準備をした。コードはここに挿入するのに適しています。特定のHTTPレスポンスヘッダ、セキュリティポリシー注入を洗浄または追加します。
Viewer Response (視聴者応答):CDNノードは、データをユーザーのブラウザに正式に返信する予定です。コード挿入は、パーソナライズされた、キャッシュに合わない断片的なデータを動的に注入するのに適しています。
第二段階: 実戦演習 ― エッジスクリプトを利用して知能A/Bテスト分流を実現する
口だけではただの見せかけだ。私たちは直接企業レベルの高級シーンを復元します。会社のフロントエンドは新機能をリリースして、やる必要があります
A/Bテスト
。世界中のユーザーにアクセスしてもらいたいです。
[Ht
Tps: // yourcompan
Y _ html]
エイチティー
Tps: // yourcompany.com/index.html)
時:
ユーザーの50% が古いページに残っています。
ユーザーの50% が静かに新しいページにドレナージされています。
ハード要求:全過程のユーザーブラウザのアドレスバーのURLは変更できず、ソースサーバに判断に参加させることはできず、CDNの端ですべて処理される。
このニーズは、Lambdaを溶接するのに最適です
Viewer Request (視聴者リクエスト)
検問所
ステップ1:
Us-east-1
地域でLambda関数を作成する
鉄則警告: あなたの業務が世界のどこにあっても、Lambda @ Edgeは「バージニア北部(us-east-1) 」地域で作成しなければならない。そうでなければ、グローバルCDNノードに導入できない。
AWSコンソールにログインし、us-east-1に切り替えて、新しいLambda関数を作成します。
実行言語はNode.jsを選択します (エッジ関数は実行速度に非常に要求され、Node.jsが優先されます)。
権限については、実行ロールでedgelambda.amazonaws.comのサービス主体がこの関数を呼び出すことを許可する必要があります。
次のコア魔改論理コードを書き込みます
配置をクリックして保存します。
第3段階: コードをグローバル・エッジ・ノードに「送信」する
コードが書かれたので、どうやって世界のCDNノードに立ち上げるのか?
Lambda関数ページの右上にある「action」-> 「Deploy to Lambda @ Edge」をクリックします。
配置パラメータの設定: Distribution: 既存のCloudFrontインスタンスIDを選択します。Cache Behavior: 特定のキャッシュ動作を選択します (デフォルト * や/index.htmlなど)。クラウドフロントイベント: Viewer Requestを選択することを躊躇しません。
チェックして弾倉を確認し、「配置」をクリックします。
この時、AWSはクラウドで自動配布プログラムを起動して、あなたの数十行のNode.jsコードを数分で世界の数百のCDNエッジノードにコピーし、同期します。
第四段階: テスト検証とエッジプレイのピット血涙歴
導入が完了したら、世界各地のネットワークを使って狂ったようにサイトを更新します。アドレスバーは永遠に表示されます
インデックス.html
を選択しますが、画面上は古いバージョンと新しいバージョンをランダムに切り替えます。ソースサーバのログはきれいで、A/Bテストが発生したことさえ知らず、すべてのストレスがCDNノードによって最先端で解決された。
でも興奮してすべてのビジネスにLambda @ Edgeを適用する準備をしています
以前は、このいくつかの「エッジ実行」による残酷な制限を食べなければならなかった。そうでなければ、うっかりCDN全体が崩壊する
1.厳格な「体板」と時間制限
エッジノードは究極の応答速度を追求するために、コードに残された資源は非常にけちん坊である
Viewer Request/Responseの段階でコードを追加すると、パッケージのサイズは1MBを超えることはできません。実行タイムアウト時間は5秒を超えることはできません。使用できるメモリは128MBしかありません。
エッジノードに複雑な深さ学習モデルを書いたり、従来のリモート高遅延データベースに接続したりすることを期待しないでください。エッジコードの原則は、どれだけ短くても短くても、どれだけ速くてもよいということです。
2.生産データベースに直接接続しないようにする
Lambda @ Edgeがユーザーが要求するたびに、北京やオレゴンにある物理MySQLデータベースに多国籍で接続してユーザーの資料を調べるとCDNがもたらす加速的な優位性は、高いネットワークの多国籍遅延によってすべて抹殺される。
正しい方法: データを読み書きする必要がある場合は、Amazon DynamoDB Global Tables (グローバル分散NoSQLデータベース) を使用するか、機能が制限されているが、より高速なcloudfrontkeyvalue store (KVS) を利用してください。
3.財布に気をつけてください
Lambda @ Edgeは「要求回数」と「実行時間 (ミリ秒レベル) 」で計算されます。もしあなたのサイトには毎日数億のPVトラフィックがあり、すべてのトラフィックが複雑なViewer Requestスクリプトをトリガーすると、月末のLambda請求書があなたを痛める可能性があります。
お金を節約する奥の手: 簡単なHTTPリダイレクトをしたり、国コードに基づいてパスを書き換えたり、HSTSハイジャック防止などのセキュリティ応答ヘッダを追加したりするだけでは、cloudfrontetorsを優先的に使用します。Lambda @ Edgeの低軽量版で、実行速度はミリ秒レベルで、コストはLambda @ Edgeの数分の1にすぎず、us-east-1で導入する必要はない。
まとめ
高度な遊び方のベールをはがすと、Lambda @ Edgeの本質は「
計算能力の前置き
」。A/Bテスト、盗難防止チェーン検査、モバイル端末適応リダイレクトなどのロジックを中心化されたサーバから剥離し、グローバルに配布されたエッジノードに置くことであなたは堅固で無限の弾力性のあるフロントエンド防御線を獲得しただけでなく、最低のアーキテクチャコストで全世界のユーザーの滑らかな体験を交換しました。
