Cloudflare Workers hiện có thể viết bằng Python
(blog.cloudflare.com)- Cloudflare Workers hỗ trợ viết bằng Python dưới dạng open beta, mở rộng mô hình vốn xoay quanh JavaScript bằng cách tích hợp trực tiếp Pyodide vào workerd, runtime Workers mã nguồn mở
- Python Workers hỗ trợ ngay từ ngày đầu các binding hiện có như Vectorize, Workers AI, R2, Durable Objects, đồng thời có thể import một số package Python như FastAPI, Langchain, Numpy
- Nền tảng triển khai dựa trên Pyodide, bản port WebAssembly của CPython; thông qua FFI giữa JavaScript và Python, mã Python có thể xử lý Request, Response, Fetch API và các binding tài nguyên của Cloudflare
- Cloudflare chạy import tại thời điểm triển khai và tạo snapshot bộ nhớ tuyến tính WebAssembly để giảm chi phí khởi tạo Pyodide và package, qua đó hạ cold start của Python Worker cơ bản xuống dưới 1 giây
- Phiên bản Python cùng các bản cập nhật Pyodide/package được quản lý bằng Compatibility Dates và Compatibility Flags; Worker còn ở một bản phát hành Python đã hết thời hạn hỗ trợ 5 năm sẽ tự động được chuyển sang bản phát hành Python cũ kế tiếp
Open beta Python Workers
- Python Workers hiện có thể dùng dưới dạng open beta trên Cloudflare Workers
- Khác với các hỗ trợ ngôn ngữ ngoài JavaScript trước đây, phần triển khai Python được tích hợp trực tiếp vào runtime workerd
- Các binding Cloudflare được hỗ trợ ngay từ ngày đầu bao gồm:
- Python Workers có thể import một số package Python phổ biến như FastAPI, Langchain, Numpy
- Không cần bước build riêng hay toolchain bên ngoài
Chỉ biên dịch sang WebAssembly là chưa đủ
- Workers đã hỗ trợ WebAssembly từ năm 2018, và mỗi Worker chạy trong V8 isolate, tức engine JavaScript giống Chrome
- Về nguyên tắc, nhiều ngôn ngữ, gồm cả Python, có thể chạy trên Workers nếu trước hết được biên dịch sang WebAssembly hoặc JavaScript
- Ứng dụng thực tế cần nhiều hơn việc chạy “hello world”, và việc hỗ trợ hệ sinh thái package mà lập trình viên quen dùng là rất quan trọng
- Python Workers là hình thái ban đầu trong nỗ lực hỗ trợ các ngôn ngữ ngoài JavaScript như công dân hạng nhất trên Workers
Luồng thực thi của Python Worker
- Khi Pyodide được tích hợp vào workerd, Python Worker có thể xử lý request bằng handler
on_fetch - Trong
wrangler.toml, chỉ định file.pylàmmainvà đặtcompatibility_flags = ["python_workers"] - Khi chạy
npx wrangler@latest dev, runtime Workers xử lý các việc sau:- Xác định phiên bản Pyodide cần thiết dựa trên compatibility date
- Tạo isolate cho Worker và tự động inject Pyodide
- Cung cấp mã Python cho Pyodide
- Môi trường thực thi Python được xử lý nội bộ và do nền tảng cung cấp, tương tự JavaScript Workers
Vì sao Pyodide phù hợp với Workers
- Pyodide là bản triển khai port CPython sang WebAssembly, diễn giải mã Python mà không biên dịch trước sang định dạng khác
- Cung cấp phần lớn thư viện chuẩn Python, đồng thời cung cấp giao diện hàm ngoại lai (FFI) cho phép gọi JavaScript API từ Python
- Được thiết kế để build interpreter lõi và từng module Python native thành các module WebAssembly riêng biệt, có thể liên kết động ở runtime
- Nhiều Workers chạy trên cùng một máy có thể chia sẻ code footprint của module, điều này quan trọng với môi trường Cloudflare chạy hàng nghìn Workers trên mỗi máy
- Phần lớn ngôn ngữ nhắm đến WebAssembly hiện vẫn chưa hỗ trợ liên kết động, nên mỗi ứng dụng thường phải chứa bản sao runtime ngôn ngữ riêng của mình
Pyodide và liên kết động WebAssembly
- Vì WebAssembly là môi trường sandbox tách khỏi host runtime, các tác vụ ngoài tính toán thuần túy như đọc file phải do môi trường runtime cung cấp và module phải import
- Target WebAssembly của LLVM được chia thành ba loại:
wasm32-unknown-unknown: không cung cấp thư viện chuẩn C hay giao diện system callwasm32-wasi: sử dụng giao diện hệ thống chuẩn do runtime WASI triển khaiwasm32-unknown-emscripten: định nghĩa các import cần thiết và xuất kèm thư viện JavaScript triển khai chúng
- Pyodide dùng Emscripten để cung cấp interpreter CPython, FFI Python-JavaScript và các package Python bên thứ ba được biên dịch sang WebAssembly
- Trong các target này, hiện chỉ Emscripten hỗ trợ liên kết động
- WASI chưa hỗ trợ trừu tượng liên kết động
dlopen/dlsymmà CPython sử dụng
FFI nối Python và JavaScript
- Ví dụ Python Worker lấy
Responsecủa JavaScript bằngfrom js import Response - FFI của Pyodide cho phép Python truy cập mọi tính năng JavaScript, giúp giảm vấn đề Python Workers thua kém JavaScript Workers về mặt tính năng
- Các kiểu bất biến như chuỗi và số được chuyển đổi trong suốt giữa hai ngôn ngữ, còn object có thể thay đổi được bọc bằng proxy phù hợp
- Khi một object JavaScript được truyền sang Python, Pyodide kiểm tra các protocol JavaScript mà object đó hỗ trợ và cấu thành động một class triển khai protocol Python tương ứng
- Nếu hỗ trợ protocol lặp của JavaScript thì cũng hỗ trợ protocol lặp của Python
- Nếu là Promise hoặc thenable thì trong Python trở thành object awaitable
- Trong luồng xử lý request, object JavaScript
Requestđi vào cũng được bọc thànhJsProxymà mã Python có thể truy cập, còn giá trị trả về của handler Python được chuyển đổi thành object JavaScriptResponse
Liên kết động và package Python
- Nhiều package Python nạp thư viện native thông qua C FFI, và để hoạt động trong runtime Workers thì các thư viện này phải được biên dịch sang WebAssembly
- Pyodide được build bằng Emscripten để override C FFI của Python; khi package cố tải thư viện native, runtime Workers sẽ tải module WebAssembly do nó cung cấp
- Liên kết động cho phép Pyodide hỗ trợ nhiều package Python có phụ thuộc thư viện native
- Liên kết tĩnh phải tải toàn bộ mã cần thiết trước khi chạy binary, còn liên kết động là cách chỉ trả chi phí khi cần
- Workers tạo cho mỗi Worker một filesystem trông giống bản phân phối Python ở runtime, nhưng các file nền tảng được chia sẻ giữa các Workers
- Hiện tại, file được chia sẻ giữa các Workers nhưng vẫn được sao chép cho mỗi isolate mới; trong tương lai, họ cho rằng có thể chia sẻ nhiều underlying resource hơn bằng kỹ thuật copy-on-write
Hỗ trợ thư viện HTTP client và server
- Python có nhiều thư viện HTTP client như httpx, urllib3, requests, nhưng chúng không hoạt động mặc định trong Pyodide
- Các thư viện này dùng socket thô, trong khi mô hình bảo mật của trình duyệt và CORS không cho phép điều đó, nên trong runtime Workers cần một cách khác
-
Client bất đồng bộ
- Các thư viện có thể gửi request bất đồng bộ như aiohttp và httpx có thể dùng Fetch API của Workers
- Cloudflare patch các thư viện bằng Pyodide FFI để chúng dùng Fetch API của JavaScript
- Bản patch httpx gồm chưa đến 100 dòng code
-
Client đồng bộ và giới hạn
- Nhiều Python API là đồng bộ, và trong trường hợp này không thể trực tiếp dùng Fetch API bất đồng bộ
- urllib3 đã nhận đóng góp để hỗ trợ trình duyệt Pyodide, sử dụng
Atomics.wait()và fetch worker thread, hoặc XMLHttpRequest đồng bộ - Cloudflare Workers hiện không hỗ trợ worker threads và
XMLHttpRequestđồng bộ, nên hai cách tiếp cận này không hoạt động trong Python Workers - Hiện tại chưa hỗ trợ request đồng bộ
-
WebAssembly Stack Switching
- WebAssembly có một đề xuất stage 3 bổ sung khả năng chuyển đổi stack, và V8 đã có triển khai
- Các contributor của Pyodide đã bổ sung hỗ trợ stack switching từ tháng 9/2022 và tính năng này gần như đã sẵn sàng
- Khi hỗ trợ này được đưa vào,
run_synccủa Pyodide có thể block để chờ awaitable hoàn tất, mở ra hướng hỗ trợ request đồng bộ
FastAPI và ASGI
- FastAPI là thư viện được dùng nhiều để định nghĩa server Python, và sử dụng giao thức ASGI
- Ứng dụng FastAPI không trực tiếp đọc hoặc ghi socket; thông thường một ASGI server như uvicorn sẽ đảm nhiệm việc xử lý socket thô
- Nhờ cấu trúc này, FastAPI có thể chạy trên Cloudflare Workers mà không cần patch hoặc thay thế chính FastAPI
- Chỉ cần thay uvicorn bằng một ASGI server có thể chạy bên trong Workers
- Bản triển khai ban đầu nằm trong asgi.py của workerd, và được đưa vào fork Pyodide do Cloudflare duy trì
- Cloudflare dự định bổ sung thêm tính năng và test coverage rồi upstream lên Pyodide
Import gói Python
- Python Workers hỗ trợ một số gói Python do Pyodide cung cấp trực tiếp
- Các gói được hỗ trợ gồm numpy, httpx, FastAPI, Langchain và các gói khác
- Để import gói, hãy thêm tên gói vào
requirements.txtmà không kèm số phiên bản - Phiên bản cụ thể của gói do Pyodide trực tiếp cung cấp
- Hiện tại có thể dùng gói trong quá trình phát triển local, và trong vài tuần tới sẽ có thể deploy Workers với các dependency được định nghĩa trong
requirements.txt - Cloudflare cho biết sẽ duy trì fork Pyodide riêng để cung cấp các patch dành riêng cho runtime Workers, đồng thời đưa các thay đổi lên upstream Pyodide
Cold start và memory snapshot
- Bản thân Pyodide có kích thước 6.4MB, và các gói Python cũng có thể khá lớn
- Nếu đưa nguyên Pyodide vào Worker rồi upload lên Cloudflare, chi phí load isolate mới sẽ lớn, khiến cold start chậm
- Trên máy tính nhanh và mạng tốt, Pyodide mất khoảng 2 giây để khởi tạo trong trình duyệt, gồm 1 giây cho mạng và 1 giây cho CPU
- Khi chạy
npx wrangler@latest deploy, quá trình deploy hoạt động như sau- Wrangler upload code Python và
requirements.txtlên Workers API - Runtime Workers xác thực code Python và các dependency
- Tạo isolate mới và tự động inject Pyodide cùng các gói được chỉ định
- Quét và thực thi các câu lệnh import trong code Worker, rồi tạo snapshot bộ nhớ tuyến tính WebAssembly của Worker
- Deploy snapshot này cùng code Python lên mạng lưới Cloudflare
- Thực thi top-level scope giống như JavaScript Worker
- Wrangler upload code Python và
- Khi có request đến, snapshot này được load để bootstrap Worker trong isolate, nhờ đó tránh được chi phí khởi tạo đắt đỏ
- Cold start của Python Worker cơ bản giảm xuống dưới 1 giây
-
Tái sử dụng snapshot
- Hiện tại snapshot bộ nhớ được tạo khi upload Python Worker là riêng cho Worker đó, và không thể chia sẻ với các Python Workers khác dù phần lớn nội dung giống nhau
- Cloudflare cho rằng có thể tạo sẵn một snapshot dùng chung duy nhất và nạp trước vào pool pre-warmed isolate nơi runtime Pyodide đã được load
- Với cách này, Python Worker cũng tiến gần hơn tới mô hình runtime được cung cấp on-demand như JavaScript Worker
- Cloudflare xem việc tái sử dụng snapshot là biện pháp lớn nhất để tiếp tục giảm cold start trong phần còn lại của năm 2024
Quản lý phiên bản Python bằng Compatibility Dates
- Cloudflare Workers có mô hình kỳ vọng rằng một Worker đã deploy một lần sẽ tiếp tục chạy mà không cần cập nhật
- Tính ổn định này được cung cấp thông qua Compatibility Dates và Compatibility Flags
- Trong Python, Pyodide và CPython mỗi bên đều có phiên bản, và phiên bản mới có thể bao gồm breaking change
- Phiên bản Python mới được phát hành vào tháng 8 hằng năm, còn phiên bản Pyodide mới được phát hành sau đó 6 tháng
- Khi được thêm vào Workers, phiên bản Pyodide mới sẽ được đặt sau Compatibility Flag và chỉ được kích hoạt sau Compatibility Date được chỉ định
- Các bản phát hành Python có thời gian hỗ trợ 5 năm, và những phiên bản Python đã hết thời gian hỗ trợ sẽ không còn được áp dụng bản vá bảo mật
- Python Worker vẫn ở lại một bản phát hành Python cũ sau 5 năm sẽ tự động được chuyển sang bản phát hành Python cũ kế tiếp
- Cloudflare kỳ vọng trong hầu hết trường hợp Python Worker sẽ tiếp tục chạy mà không gặp vấn đề, nhưng khuyến nghị cập nhật compatibility date định kỳ để luôn nằm trong thời gian hỗ trợ
- Giữa các bản phát hành Python, các gói cũng sẽ được cập nhật và bổ sung theo cùng cơ chế opt-in; ví dụ flag có dạng
python_3.17_packages_2025_03_01
Binding của Python Workers
- Nhờ Pyodide FFI, có thể truy cập trực tiếp các đối tượng, phương thức và hàm JavaScript từ Python
- Với cấu trúc này, toàn bộ binding API cho tài nguyên Cloudflare được hỗ trợ trong Python Workers ngay từ ngày đầu
- Đối tượng
envcủa Python handler là một đối tượng JavaScript, và Pyodide cung cấp API proxy xử lý việc chuyển đổi kiểu giữa các ngôn ngữ - Với KV namespace, có thể
awaitenv.FOO.put()vàenv.FOO.get()trong Python để ghi và đọc giá trị - Web API cũng có thể được sử dụng theo cách tương tự, và các JavaScript global như
Responsecó thể được import từ modulejs
Kế hoạch cho API đậm chất Python hơn
- Cloudflare nhận thấy các dạng như
from js import Responsekhông thật sự mang phong cách Python, và có kế hoạch cung cấp API idiomatic hơn cho Python Workers - workers-rs, ra mắt năm 2021, đã cung cấp các binding mang phong cách Rust cho từng JavaScript API của Workers
- Với Python Workers, Cloudflare cũng lên kế hoạch theo hướng tương tự, trước tiên bắt đầu từ các binding Workers AI và Vectorize
- workers-rs của Rust phải sử dụng và cập nhật các dependency bên ngoài, nhưng API của Python Workers dự kiến sẽ được tích hợp trực tiếp vào Workers runtime
- Khi cập nhật compatibility date, có thể sử dụng các API mới nhất mang phong cách Python
- Cũng có khả năng cung cấp một phần raw socket API của thư viện chuẩn Python dựa trên JavaScript API
connect()của Workers - Cloudflare kỳ vọng bắt đầu nỗ lực xây dựng một serverless API được chuẩn hóa, dễ dùng cho lập trình viên Python trong khi vẫn cung cấp các chức năng tương đương JavaScript
Định hướng sắp tới
- Để hỗ trợ đúng nghĩa một ngôn ngữ lập trình mới, cần đầu tư lớn hơn nhiều so với “hello world”
- Theo khảo sát Stack Overflow 2023, Python là ngôn ngữ được sử dụng nhiều thứ hai sau JavaScript
- Cloudflare cho biết sẽ tiếp tục cải thiện hiệu năng của Python Workers và mở rộng phạm vi hỗ trợ các package Python
- Kênh phản hồi là kênh Python Workers trên Cloudflare Developers Discord và workerd GitHub discussion
1 bình luận
Ý kiến trên Hacker News
Thật đáng mừng khi Cloudflare chú ý hơn đến việc chạy Python bằng WebAssembly ở Edge
Từ góc nhìn của người từng xử lý việc chạy Python dựa trên WebAssembly ở Edge tại Wasmer, có thể tóm tắt rằng Cloudflare Workers kích hoạt Python ở Edge bằng Pyodide, tức Python được biên dịch sang WebAssembly bằng Emscripten
Kiến trúc là gắn Pyodide vào Workerd và giảm thời gian khởi động bằng snapshot của V8; trong trường hợp tốt nhất, cold start của Python khoảng 1 giây
Tuy nhiên, cách hiện tại bị ràng buộc vào phiên bản Python/Pyodide tích hợp trong Workerd, và việc phân giải package cũng gắn chặt với Workerd, nên rất có thể ở runtime chỉ cho phép các package native đã được biên dịch sẵn. Ví dụ, việc dùng một phiên bản numpy cụ thể có thể khá rắc rối
Về mặt kiến trúc, nó bị buộc vào thế giới JS/V8, nên với kiến trúc hiện tại có vẻ khó đạt được thời gian khởi động dưới 100ms
Dù vậy, tôi hoan nghênh bản phát hành này và mong mọi người sẽ tạo ra những ứng dụng tuyệt vời
https://pyodide.org/
https://github.com/cloudflare/workerd/blob/main/docs/pyodide...
https://github.com/cloudflare/workerd/pull/1875
Sửa: Đã sửa “bằng chứng khái niệm” thành “bản phát hành” theo giải thích của đội Cloudflare
Chúng tôi dự định cập nhật khá thường xuyên các package như langchain hoặc numpy được nhắc đến
Sẽ tốt hơn nếu bạn giải thích thêm vì sao cho rằng V8 là yếu tố giới hạn. V8 là một runtime WebAssembly mạnh mẽ, và phần lớn các tối ưu hóa đang được lên kế hoạch không phụ thuộc nhiều vào engine bên dưới
Ngoài ra, đây không phải bằng chứng khái niệm mà là một bản beta sẽ tiếp tục được cải thiện cho tới GA
https://wasmer.io/templates?language=python
Cloudflare có nhiều thứ tốt ở mảng hosting và cơ sở dữ liệu, nhưng có vẻ họ không làm marketing tốt với tư cách một nền tảng dành cho lập trình viên, nên Vercel hoặc Netlify đã chiếm được khá nhiều mức độ nhận biết
Ngoài ra, tôi tò mò liệu Cloudflare có cung cấp dịch vụ hosting container không phụ thuộc ngôn ngữ như Google Cloud Run hay không
Giá cả và sản phẩm đều tuyệt vời
Một số tính năng hoàn toàn không hoạt động, một số khác chỉ được hỗ trợ một phần
Nếu phải dành thời gian phát triển quý giá để xử lý các vấn đề như vậy, thì những nền tảng thay thế như Vercel, Netlify, Deno Deploy mượt mà hơn với nhu cầu của đội, và giúp dễ tập trung vào phát triển hơn là vấn đề hạ tầng
Chi phí băng thông của Vercel và Netlify đắt hơn hầu hết nhà cung cấp cloud khoảng 40–50 lần, còn ở Cloudflare thì băng thông gần như không thành chi phí
Lượt gọi Edge function ở Vercel và Netlify cũng đắt gấp 6 lần Cloudflare. Con số này chưa tính chi phí thời gian compute vốn miễn phí ở Cloudflare
Gần như lý do duy nhất khiến Vercel phổ biến là vì đó là nơi tốt nhất để host NextJS, và có lẽ vì vậy mà họ khiến việc triển khai NextJS ở nơi khác trở nên khó khăn
Tôi đã dùng Workers trong production khoảng 4 năm và thích nó, nhưng phần lớn ứng dụng vẫn đang chạy trong container
Tôi đã dùng JS Workers trên một site đặt phía sau Cloudflare, thấy dễ dùng và rất nhanh. Tôi muốn chuyển toàn bộ ứng dụng Django phía sau site sang dùng cả cơ sở dữ liệu D1
Do lưu lượng thấp nên vẫn ở gói miễn phí, nhưng vì việc xây dựng quá dễ nên tôi cũng sẵn lòng trả tiền
Sẽ hữu ích nếu có so sánh hiệu năng với JS Worker. Thú vị thật, nhưng vì có nhiều tầng đan xen nên có vẻ tiềm ẩn khả năng chậm hơn
Tôi không kỳ vọng hiệu năng ngang nhau, nhưng sẽ tốt hơn nếu biết được đại khái các đánh đổi
Hiện tại cold start của Python chậm hơn JavaScript Worker cùng kích thước. Worker “Hello World” cơ bản viết bằng JavaScript có thời gian cold start gần như bằng 0, còn Python Worker thì dưới 1 giây
Lý do là khi có request đến, phải nạp Pyodide vào Worker theo kiểu on-demand; bài blog mô tả công việc nhằm làm cho Pyodide sẵn sàng trước để giảm điều này
Tuy nhiên, sau khi Python Worker kết thúc cold start, khác biệt trở nên gần như ở phần rìa, và tùy vào những gì xảy ra trong request, có thể chỉ là vài mili giây
Khi băng qua “bridge” giữa JavaScript và WebAssembly, chẳng hạn lúc thực hiện I/O hoặc tác vụ bất đồng bộ, sẽ có một chút chi phí. Nhưng nên nghĩ ở mức micro giây chứ không phải mili giây, và nói chung là rất nhỏ
Những người dùng Worker nhạy cảm về hiệu năng hiện cũng đã viết bằng Rust: https://github.com/cloudflare/workers-rs cái này cũng dựa vào bridge giữa JavaScript và WebAssembly
Trình thông dịch Python dựa trên WebAssembly mà Pyodide cung cấp không nhanh bằng các tối ưu hóa đã được tích lũy suốt nhiều năm để làm JavaScript chạy nhanh trong V8. Dù vậy, Pyodide vẫn còn ở giai đoạn đầu so với engine JS của V8, và có những phần có vẻ còn nhiều dư địa cải thiện hiệu năng. Chúng tôi muốn đưa các cải tiến hiệu năng lên upstream, và cũng có một số đề xuất WebAssembly hữu ích
Tôi tò mò không biết việc chọn lzma để thể hiện tính cách ly là có chủ ý, hay chỉ tình cờ vì tin công nghệ tuần trước
https://news.ycombinator.com/item?id=39865810
Có vẻ sẽ là một thay đổi rất lớn cho việc chạy các tác vụ liên quan đến AI trên Cloudflare. Tôi đã chờ khá lâu rồi
Nếu chưa xem, cũng đáng xem hai thông báo khác ra hôm nay
“Leveling up Workers AI: General Availability and more new capabilities”
https://blog.cloudflare.com/workers-ai-ga-huggingface-loras-...
“Running fine-tuned models on Workers AI with LoRAs”
https://blog.cloudflare.com/fine-tuned-inference-with-loras
Hôm nay tôi đã thử dùng, thấy tốt và có thể đưa vào chạy rất nhanh
Tuy nhiên, tôi thắc mắc phải làm sao để môi trường phát triển local hiểu các thư viện được tích hợp trong phần triển khai Python của CFW
Ví dụ có thư viện
asgi, và tôi muốn linter không đánh dấu nó là không thể nhận diện. Nhưng thư viện này chỉ tồn tại trong runtime của handleron_fetch, chứ thực tế không có trên máy phát triển local, nên tôi chưa tìm ra cách xử lýTôi đã có kết quả tốt khi dùng CF Pages cho site tĩnh, và các sản phẩm Cloudflare cung cấp LLM mã nguồn mở như một dịch vụ cũng rất thú vị
Lý do chính ngăn tôi xây dựng nhiều hơn trên Cloudflare là thiếu hỗ trợ Python, nên tôi rất mong được thử tính năng này
Dễ nhanh chóng đưa một thứ gì đó vào chạy, và không phải bận tâm quá nhiều về hạ tầng
Việc bổ sung Python rất đáng mừng, và sẽ tuyệt nếu Go cũng được hỗ trợ hạng nhất
Tôi tò mò giới hạn chỉ được dùng các gói Pyodide sẽ hoạt động ra sao với các build không hề đơn giản
Có nhiều mã không phải Python thuần, nên để hỗ trợ các ứng dụng production thực tế có lẽ sẽ có nhiều thứ phải build lại thủ công
Việc Cloudflare tham gia có thể giúp kéo thêm nhiều gói vào, và nếu quy luật 80/20 đúng trong trường hợp này thì có thể vẫn đủ ổn
Như bài blog cũng đã nhắc, vấn đề lớn nhất là hỗ trợ các package liên quan đến server và request. Chúng rõ ràng hữu ích trên Cloudflare Workers, nhưng lại khó port vì thường dùng raw socket và một dạng concurrency nào đó
Tôi mong CloudFlare triển khai Workers xem WASM là target hạng nhất, cùng với một API đa dụng không bị ràng buộc vào JS Workers
Hiện tại cũng có thể triển khai mã WASM, nên về cơ bản dùng được bất kỳ ngôn ngữ nào, nhưng nó không phải native mà chạy trong context JS
Có một chút overhead và sự gượng gạo trong triển khai
Tôi nghĩ cuối cùng mọi dịch vụ sẽ được triển khai trực tiếp lên runtime WASM được bảo mật hóa, thay vì container. Tương tự như dòng dịch chuyển từ image sang container
Hiện tại lợi ích của việc dùng những thứ như Rust trên Cloudflare Edge không lớn. Một phần đáng kể lợi ích về hiệu năng bị triệt tiêu bởi overhead và thời gian khởi động
Ví dụ: https://github.com/WasmEdge/WasmEdge