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