shubham shaw

約10年にわたり、エンタープライズソフトウェアのデプロイに関する私のメンタルモデルは、アプリケーションとその実行に必要なすべてのオペレーティングシステムファイルをまとめた軽量パッケージであるコンテナを中心に回っていました。最近、私はC#や従来のクラウド環境という快適な領域から一歩踏み出して、根本的に異なるアプローチを取る技術を探ることにしました。それはサーバー上のWebAssemblyです。

ほとんどのエンジニアは、WebAssembly(Wasmと略されることが多い)を、RustやC++などの言語をウェブブラウザ内でネイティブに近い速度で実行できるように設計された、コンパクトな機械可読コードのバイナリ命令形式として知っています。私が興味を持ったのは、Wasmがウェブページからサーバーインフラストラクチャ、特にエッジコンピューティング(ネットワーク遅延を減らすためにユーザーの近くに物理的に配置されたサーバーでデータを処理することを意味します)へと移行している点です。

この移行は、WASI(WebAssembly System Interface)と呼ばれる新しい標準に依存しています。これは、Wasmプログラムがウェブブラウザの外部でホストサーバーのファイルシステム、クロック、メモリと安全にやり取りできるようにする標準化されたルールのセットです。WASIを、隔離されたプログラムがマシンの残りの部分へのアクセス権を与えることなく、オペレーティングシステムに特定のリソースを要求できるようにするセキュアなトランスレータとして想像できます。

エンタープライズマイクロサービス(ネットワーク上で通信する小さな独立したソフトウェアサービス)の管理に何年も携わってきた私にとって、設計哲学の違いは際立っています。従来のコンテナは、基盤となるオペレーティングシステムの一部を含むため、多くの余分な重量を運びます。数百メガバイトのディスク容量を必要とし、起動までに顕著な遅延を要することがよくあります。一方、WebAssemblyバイナリにはコンパイルされたアプリケーションのロジックのみが含まれます。通常、数メガバイト程度のサイズで、1ミリ秒未満で実行を開始します。

従来のコンテナを、作業を開始する前に駐車、荷降ろし、セットアップに時間を要する、満載の引っ越しトラックだと考えてみてください。WebAssemblyバイナリは、展開した瞬間に形になる軽量のポップアップテントに近いものです。

RustとサーバーサイドWasmランタイムを使用してシンプルなバックエンドサービスを書く最近の実験では、コールドスタートのパフォーマンスは驚くべきものでした。コールドスタートとは、サーバーが着信トラフィックを処理するためにアプリケーションの新しいインスタンスを起動するときに発生する初期遅延です。控えめなハードウェア上で数百の隔離されたタスクをほぼゼロ遅延かつ最小限のメモリ消費で起動できることは、イベント駆動型ワークフローにとってエキサイティングな可能性を開きます。

同時に、新興技術の探求は実際のトレードオフに直面することを意味します。エコシステムはまだライフサイクルの初期段階にあります。実行中のWasmバイナリのデバッグは、成熟したエンタープライズ開発環境が提供するスムーズなステップバイステップの体験をまだ提供していません。さらに、確立されたデータベースドライバやテレメトリライブラリ(システムアクティビティのログ記録やエラーの追跡に使用されるツール)は、Wasm環境向けにまだ適応中です。

私はWebAssemblyがすべてのエンタープライズワークロードの従来のコンテナをすぐに置き換えるとは考えていません。むしろ、それは特にインスタントスタートアップ時間が最も重要となる高密度、低遅延タスクのための、ツールボックス内の強力な新しいツールのように感じられます。このエコシステムがどのように機能するかを学ぶ時間を取ることは、サーバーアーキテクチャにおけるイノベーションの余地がまだどれだけ残っているかを思い起こさせる素晴らしい機会でした。

バックエンドインフラストラクチャの変化を追っているエンジニアの皆さん、ブラウザの外部でWebAssemblyを現在テストしていますか?また、プロジェクトでの使用を妨げている欠けている機能やツールのギャップは何ですか?

webassembly #rust #backend #devto