UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Next.js】エッジコンピューティング

Next.js 12に関連して、エッジコンピューティングについてのお話を聞く機会があったのでメモ

Vercelのエッジサービス

Vercelのエッジサービスは以下の3つで、Next.js 12 でEdge Functionsが新しく追加された

  • Edge Network
  • Serverless Functions
  • Edge Functions

Edge Functionsの特徴は以下

  • Cloudflare Workersベース
  • Next.js 12の新しいミドルウェアに使われる
  • New Streaming SSRとRSCでも使われる

Cloudflare Workersとは?

  • V8 Isolate ランタイム
  • Web APIベース

V8とは?

V8の構成

  • Engine
    • JavaScript処理系の実装
    • プロセスごとにロードされる
  • Isolate
    • Engineのインスタンス
    • Isolateごとに独立したJSヒープ、JSスタック、GCなどを持つ
    • あるIsolateをある時点で実行できるスレッドは一つだけ
  • Context
    • Isolateの中のグローバル変数(window, self, global)の空間
    • Contextごとに独立した組み込みオブジェクト(Object, Arrayなど)も持てる

このV8の構成に関して、Node.js起動時を例に図に表すと以下になっている

f:id:uggds:20211208192255p:plain:w200

もしWorkerスレッドも起動する時は以下のようになる

f:id:uggds:20211208195256p:plain:w600

このようにNode.jsの場合はIsolateとスレッドは1対1に紐付けられるのだが、

f:id:uggds:20211208195605p:plain:w600

Cloudflare Workersの場合は上の図のように、デプロイされた関数ごとにIsolateを作り、Isolateは任意のスレッドで実行される

この仕組みにより実行が早いとのこと(Not Cold Starts)

Not Cold Starts

仮想マシンベースからコンテナベースになったときにも起動が早いと盛り上がったが、このIsolateベースは起動なくすぐに実行することができるのでNot Cold Startsと呼ばれる(呼んでいる)みたい

f:id:uggds:20211208203655p:plain

Vercel Edge Functionsを利用する場合

Vercel Edge FunctionsはCloudflare Workersベースなので、この仕組みが利用できる

また、New Streaming SSRもRSCもこのEdge Functionsにデプロイされる

Vercelではなくてもこの流れが来そうなので引き続き注目していきたい