1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Akamai EdgeWorkersでCDNのキャッシュを活用しつつ動的な処理を実現する

Posted at

キャッシュと動的な処理

「オリジンサーバーの負荷が問題になったためCDNでキャッシュするようにして負荷低減に成功した。しかしながら最近、キャッシュしているページに対して動的な処理を入れたいという要件が出てきた」
通常このようなケースでは、Edgeサーバーにおけるキャッシュを無効化してオリジンサーバーで動的な処理を行う必要があります。この場合、Edgeサーバーでキャッシュができずオリジンサーバーの負荷軽減ができないジレンマに陥りますが、AkamaiのEdge ComputingソリューションであるEdgeWorkersを利用すると、CDNのキャッシュを活かしながら同時にEdgeサーバー上で動的な処理を実行できます。

EdgeWorkersとは

EdgeWorkersでは、AkamaiのEdgeサーバーでリクエスト受信やレスポンス送信などのイベントハンドラで、独自にコーディングしたJavaScriptを実行できます。クライアントの近くのEdgeサーバーで処理を行うためレイテンシが小さく、世界中に数十万台のサーバーが配置され、自動で分散駆動するしくみのためスケーリングを気にしなくて良いというメリットがあります。

参考: EdgeWorkers:Akamaiのエッジサーバー上でJavascriptで書いたコードが実行可能に

サンプル

ここでは、キャンペーンでの広告表示のためアクセス元の国の言語の情報をCookieに持たせる、という処理を書いてみます。

import { SetCookie } from 'cookies'

export function onClientResponse(request, response) {
    let value = 'en'
    if (request.userLocation.country == 'JP') {
        value = 'ja'
    } else if ( request.userLocation.country == 'ES' ||
                request.userLocation.continent == 'SA') {
        if (request.userLocation.country != 'BR') {
            value = 'es'
        }
    }

    const cookie = new SetCookie()
    cookie.name = 'campaign_lang'
    cookie.value = value
    cookie.path = '/'
    cookie.maxAge = 30 * 24 * 60 * 60
    response.setHeader('Set-Cookie', cookie.toHeader())
}

EdgeWorkersを呼び出すよう設定

CDN側の配信設定からEdgeWorkersを呼び出します。
ew.png

おわりに

今回のサンプルは非常に簡単なものですが、今まではオリジンサーバーでやっていた処理をCDNキャッシュと同時にEdgeサーバー上で実行することで、オリジンサーバーの負荷軽減・パフォーマンス向上が期待できます。アプリケーションの最適化などの検討時にEdge Computingも選択肢に含めてみてはいかがでしょうか。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?