3 ポイント 投稿者 GN⁺ 2024-04-03 | 1件のコメント | WhatsAppで共有

PythonをCloudflare Workersに統合: PyodideとWebAssemblyを活用

  • Cloudflare WorkersでPythonが使えるようになった。
  • 従来のJavaScript以外の言語サポートとは異なり、Python実装がworkerdランタイムに直接統合されている。
  • Vectorize、Workers AI、R2、Durable Objectsなど、すべてのバインディングに対応している。
  • FastAPI、Langchain、Numpyなど人気のPythonパッケージの一部を取り込める。
  • 別途ビルド工程や外部ツールチェーンは不要。

WebAssemblyへコンパイルするだけでは足りない

  • Cloudflare Workersは2018年からWebAssemblyをサポートしている。
  • 言語をWebAssemblyやJavaScriptへコンパイルするだけでは十分ではない。
  • 開発者が慣れ親しんだパッケージエコシステムをサポートする必要がある。

Python Workerのライフサイクル

  • Pyodideがworkerdに組み込まれており、Pythonコードを書ける。
  • Wrangler.tomlファイルで.pyファイルを指定し、npx wrangler@latest devを実行すると、ランタイムがPyodideを自動で注入する。

Workersランタイムに組み込まれたPythonインタープリタ

  • CPythonはPythonの参照実装であり、PyodideはCPythonをWebAssemblyへ移植したもの。
  • PyodideはPython標準ライブラリの大部分を提供し、JavaScript APIを直接呼び出せるFFIも提供する。

Pyodideと外部関数インターフェース(FFI)の魔法

  • PyodideのFFIにより、PythonからJavaScript機能へアクセスできる。
  • これによってFastAPIやLangchainのようなパッケージをそのまま利用できる。

なぜ動的リンクが不可欠なのか、静的リンクでは不十分

  • 多くのPythonパッケージはC FFIを使ってネイティブライブラリを取り込む。
  • 動的リンクにより、Pyodideはネイティブライブラリ依存を持つ多くのPythonパッケージをサポートできる。

サーバーおよびクライアントライブラリのサポート

  • Pythonにはhttpx、urllib3、requestsなど人気のHTTPクライアントライブラリが多いが、Pyodideではデフォルトでは動作しない。
  • 非同期クライアントライブラリはFetch APIを使ってリクエストを実行できる。

Pythonパッケージの取り込み

  • Python Workersは、Pyodideが直接提供するPythonパッケージのサブセットをサポートする。
  • requirements.txtファイルにパッケージを追加するだけでよい。

メモリスナップショットでコールドスタート時間を短縮

  • PyodideをWorkerへ注入してCloudflareへアップロードする過程でメモリスナップショットを生成し、コールドスタート時間を短縮する。

Pyodideのバージョンと互換性日付に対する将来性の確保

  • 互換性日付と互換性フラグを使い、新しい動作や、場合によっては後方互換性のない変更を明示的に選択できるようにする。

Python Workersでのバインディングの仕組み

  • PyodideはJavaScript向けのFFIを提供しており、PythonからJavaScriptオブジェクト、メソッド、関数などを直接利用できる。

Python Workersを始める

  • 新しいプログラミング言語への真のサポートには、"hello world"を超える大きな投資が必要だ。
  • PythonはJavaScriptに次いで人気のあるプログラミング言語であり、CloudflareはPythonパッケージのサポート拡大と性能改善に継続的に取り組んでいる。

GN⁺の見解

  • CloudflareのPython Workers対応は、サーバーレスアーキテクチャにおけるPython活用を広げる重要な進展である。これはPython開発者により高い柔軟性と選択肢を提供し、JavaScriptに依存せずクラウドベースのアプリケーションを構築できる機会を開く。
  • Pyodideを通じたPythonのWebAssembly統合は、ブラウザおよびサーバーレス環境でPythonコードを実行する新たな可能性を示している。これはPythonエコシステムに大きな影響を与え得るものであり、特にデータサイエンスや機械学習のようにJavaScriptが支配的でない分野で、Python利用を後押しする可能性がある。
  • 動的リンクとメモリスナップショット技術は、初期ロード時間を短縮し、リソースを効率的に共有する方法を提供する。これは特に大規模分散システムにおける重要な性能改善を意味する。
  • 互換性日付とフラグによるバージョン管理は、既存コードの安定性を保ちながら新機能や更新を受け入れられる柔軟な方法を提供する。これは長期的にサービスを運用する企業にとって重要な要素である。
  • CloudflareがPython Workersへの対応を拡大するにつれ、Python開発者は既存のクラウドサービスと統合したり、新しいサービスを開発したりする際に、より多くの選択肢を持てるようになる。これはPythonがサーバーレスコンピューティング分野で重要な役割を果たし得ることを示している。

1件のコメント

 
GN⁺ 2024-04-03
Hacker Newsの意見
  • CloudflareがEdge上でWebAssemblyを通じてPythonを実行することに、より注力しているのはうれしいという好意的な反応。

    • Pyodideを使ってPythonをWebAssemblyにコンパイルし、Workerdにバンドルして、V8スナップショットで起動時間の高速化を試みている。
    • Cloudflare Workers上のPythonのコールドスタート時間は、最良の場合でも約1秒。
    • 今回の発表によってEdgeでのPython実行への関心を測れる一方で、いくつかの欠点もある。
      • 1つのPython/Pyodideバージョンにしか対応しない。
      • パッケージ解決がworkerd依存で扱いづらい。
      • 構造的にJS/V8の世界に依存しており、コールドスタート時間の短縮が課題になりうる。
    • こうした欠点があるにもかかわらず、このような試みは歓迎であり、そこから生まれる素晴らしいアプリに期待している。
  • Cloudflareはホスティングやデータベースに関して優れた機能を提供しているが、開発者プラットフォームとして自社を売り込むことにはあまり成功してこなかった、という意見。

    • CloudflareがGoogle Cloud Runのような、言語非依存のコンテナホスティングサービスを提供しているのかという質問がある。
  • CloudflareでJS workersを使ったことがあり、使いやすく非常に高速だったという好意的な評価。

    • 自分のDjangoアプリをCloudflareのD1データベースを使って移植したいと考えている。
  • JS workerとの性能比較があると助かる、という意見。

    • 複数レイヤーをまたぐため遅くなる可能性を懸念しつつ、おおよそのトレードオフを知りたがっている。
  • Pyodideが本格的な支援を受けることで、PythonがフロントエンドでJavaScriptの真の代替になりうるという希望が見えてきた、という意見。

  • lzmaを使ったデモが意図的なのか、それとも単なる偶然なのかという質問がある。

    • これは最近の技術ニュースに関連している。
  • Cloudflare上でAI関連の処理を実行するうえでゲームチェンジャーだと評価し、長い間これを待ち望んでいたという意見。

  • CloudflareがJS workersに限定されず、WASMを第一級市民として扱うworkersを実装してほしい、という意見。

    • 現在はJSコンテキスト内でWASMコードが実行されているが、将来的にはコンテナを介さず直接WASMランタイムへデプロイされるだろうという見通し。
  • CF Pagesを使って静的サイトを作ることで良い結果を得ており、CloudflareのオープンソースなLLM-as-a-service提案に魅了されている。

    • Pythonサポートの不足が、Cloudflare上でより多くのものを構築できなかった主な理由だと述べ、今回のアップデートを試してみたいとしている。
  • Pyodideパッケージのみを使うという制限が、簡単ではないビルドにどのような影響を与えるのか気になる、という意見。

    • 純粋なPythonではないコードが多く、手動で再ビルドしなければならないケースを思い浮かべつつ、Cloudflareの採用がより多くのパッケージの取り込みにつながることを期待している。