rust.connpass.com での発表内容です。
自己紹介
- id: dekokun (twitter, hatena)
- SREやってます
CDNのDはdekokunのD
って最近ずっと言ってます。これからCDN周りに力を入れていくぞという思い。詳しくは以下エントリに書いてます。
Fastlyのedge computing環境 Terrariumの紹介
そもそもedge computingとは
コンピューティングリソースを利用者の端末に近いネットワークの周縁部(エッジ)に配置することにより、低遅延応答、分散処理、トラフィック最適化などを実現するものと言える
(参照: https://www.icr.co.jp/newsletter/wtr348-20180329-sadaka.html )
この発表では、特にCDNの各edge上でユーザの書いたプログラムが動く環境を指して "edge computing" と言っています
Terrariumについて
- WebAssemblyベースのedge computingプラットフォーム(まだ実験的なサービス
- Rust/TypeScript/Cからwasmファイルを生成し、Terrariumの中で動いているLucetがwasmファイルをネイティブコードに変換し、実行している
- Lucetはコンパイラかつ実行環境。高速に起動することが特徴。最近発表されて WebAssemblyが50マイクロ秒以下で起動する「Lucet」。コンパイラとランタイムをFastlyがオープンソースで公開 というエントリが最近バズってましたね
ログインなしで触れる、最初から様々なアプリケーション例があり簡単にデプロイできる
Terrarium - Fastly Labs にアクセスすると、いろいろなサンプルが出てきて簡単にデプロイできる
ポチポチでデプロイ完了デモ
コマンドラインツールでデプロイも可能
以下の私の作ったデモ画像を見ると、デプロイがCLIだけでできるのが分かる。 github.com
KVSも使える
lowreal.net 5分で中身が消え去る。キャッシュ的用途に使うことを想定されていると思う。
中の作り
Terrariumのruntimeはいくつかの関数を定義しており、Rustから使えるようにCのFFIを使用してそれらを宣言する必要がある(このあたりで行っている: https://wasm.fastlylabs.com/docs/rust/http_guest/hostcalls/raw/index.html ) それをこのまま使うとunsafeなので、fastlyの提供しているhttp_guest crate内にwrapperがありユーザは主にそれ経由でTerrariumとやり取りすることになる。 wasm.fastlylabs.com
また、私の書いたコードを見ると分かるように、 guest_app_kvs!
というマクロが、Terrariumのruntimeとユーザの書いたコードとの橋渡しを行ってくれている。マクロ内部では、runという名前の関数が定義され、主にpanic handlerとメモリ管理関数の設定をしている。
// 前略 pub fn user_entrypoint(kvs: &mut KVStore, req: &Request<Vec<u8>>) -> Response<Vec<u8>> { // 中略 Response::builder() .status(200) .header("Content-Type", "text/html") .body(body.as_bytes().to_owned()) .unwrap() } guest_app_kvs!(user_entrypoint); # これ
今後も目が離せないedge computing
今回、Rust LTということでRustと親和性の高いTerrariumの話をしましたが、他にもedge computing環境はどんどんでてきており、目が離せません。 Terrarimu自体もまだサービスで使えるわけではないので、サービスで使う時はどんな感じになるかも大変楽しみです!
ありがとうございました
enjoy !