Tích hợp Python vào Cloudflare Workers: sử dụng Pyodide và WebAssembly
- Giờ đây có thể sử dụng Python trên Cloudflare Workers.
- Khác với hỗ trợ các ngôn ngữ ngoài JavaScript trước đây, trình triển khai Python được tích hợp trực tiếp vào runtime
workerd.
- Hỗ trợ tất cả các binding như Vectorize, Workers AI, R2, Durable Objects.
- Có thể import một phần của các gói Python phổ biến như FastAPI, Langchain, Numpy.
- Không cần bước build riêng hay toolchain bên ngoài.
Không chỉ đơn thuần là biên dịch sang WebAssembly
- Cloudflare Workers đã hỗ trợ WebAssembly từ năm 2018.
- Chỉ biên dịch ngôn ngữ sang WebAssembly hoặc JavaScript là chưa đủ.
- Cần hỗ trợ hệ sinh thái package mà lập trình viên đã quen dùng.
Vòng đời của Python Worker
- Pyodide được tích hợp sẵn trong
workerd, cho phép viết mã Python.
- Chỉ định tệp
.py qua tệp Wrangler.toml và chạy npx wrangler@latest dev, runtime sẽ tự động chèn Pyodide.
Trình thông dịch Python được tích hợp trong runtime Workers
- CPython là trình triển khai tham chiếu của Python, còn Pyodide là bản port của CPython sang WebAssembly.
- Pyodide cung cấp phần lớn thư viện chuẩn của Python và cung cấp FFI để có thể gọi trực tiếp JavaScript API.
Sức mạnh của Pyodide và giao diện hàm ngoài (FFI)
- FFI của Pyodide cho phép truy cập các tính năng JavaScript từ Python.
- Nhờ đó có thể dùng ngay các package như FastAPI và Langchain.
Vì sao dynamic linking là thiết yếu, static linking là chưa đủ
- Nhiều package Python dùng C FFI để import các thư viện native.
- Nhờ dynamic linking, Pyodide có thể hỗ trợ nhiều package Python có phụ thuộc vào thư viện native.
Hỗ trợ thư viện máy chủ và máy khách
- Python có nhiều thư viện HTTP client phổ biến như httpx, urllib3, requests, nhưng trên Pyodide chúng không hoạt động mặc định.
- Các thư viện client bất đồng bộ có thể thực hiện request bằng Fetch API.
Import package Python
- Python Workers hỗ trợ một tập con các package Python do Pyodide cung cấp trực tiếp.
- Chỉ cần thêm package vào tệp
requirements.txt.
Rút ngắn thời gian khởi động nguội bằng snapshot bộ nhớ
- Trong quá trình chèn Pyodide vào Worker và tải lên Cloudflare, snapshot bộ nhớ được tạo ra để rút ngắn thời gian khởi động nguội.
Đảm bảo tương lai cho phiên bản Pyodide và ngày tương thích
- Có thể chủ động chọn các hành vi mới và những thay đổi có khả năng không tương thích ngược bằng cách dùng ngày tương thích và cờ tương thích.
Cách binding hoạt động trong Python Workers
- Pyodide cung cấp FFI cho JavaScript, cho phép dùng trực tiếp các object, method, function của JavaScript từ Python.
Bắt đầu với Python Workers
- Hỗ trợ thực sự cho một ngôn ngữ lập trình mới đòi hỏi khoản đầu tư lớn vượt xa mức "hello world".
- Python là ngôn ngữ lập trình phổ biến thứ hai sau JavaScript, và Cloudflare đang liên tục mở rộng hỗ trợ package Python cũng như cải thiện hiệu năng.
Ý kiến của GN⁺
- Việc Cloudflare hỗ trợ Python Workers là một bước tiến quan trọng giúp mở rộng việc sử dụng Python trong kiến trúc serverless. Điều này mang lại nhiều sự linh hoạt và lựa chọn hơn cho các lập trình viên Python, đồng thời mở ra cơ hội xây dựng ứng dụng nền tảng đám mây mà không cần phụ thuộc vào JavaScript.
- Việc tích hợp Python với WebAssembly thông qua Pyodide mở ra những khả năng mới để chạy mã Python trong trình duyệt và môi trường serverless. Điều này có thể tạo ảnh hưởng lớn tới hệ sinh thái Python, đặc biệt thúc đẩy việc sử dụng Python trong các lĩnh vực như khoa học dữ liệu và machine learning, nơi JavaScript không chiếm ưu thế.
- Công nghệ dynamic linking và snapshot bộ nhớ giúp rút ngắn thời gian tải ban đầu và cung cấp cách chia sẻ tài nguyên hiệu quả. Đây là một cải tiến hiệu năng quan trọng, đặc biệt trong các hệ thống phân tán quy mô lớn.
- Việc quản lý phiên bản thông qua ngày tương thích và cờ tương thích mang lại một cách linh hoạt để tiếp nhận tính năng mới và bản cập nhật mà vẫn giữ được sự ổn định cho mã hiện có. Đây là yếu tố quan trọng với các doanh nghiệp vận hành dịch vụ trong dài hạn.
- Khi Cloudflare mở rộng hỗ trợ cho Python Workers, các lập trình viên Python sẽ có thêm nhiều lựa chọn khi tích hợp với dịch vụ đám mây hiện có hoặc phát triển dịch vụ mới. Điều này cho thấy Python có thể đóng vai trò quan trọng trong lĩnh vực serverless computing.
1 bình luận
Ý kiến trên Hacker News
Phản hồi tích cực cho rằng thật đáng mừng khi Cloudflare đang dành nhiều sự quan tâm hơn cho việc chạy Python trên Edge thông qua WebAssembly.
Có ý kiến cho rằng Cloudflare cung cấp những tính năng rất tốt về hosting và database, nhưng chưa thực sự thành công trong việc tiếp thị bản thân như một nền tảng cho lập trình viên.
Đánh giá tích cực từ trải nghiệm từng dùng JS workers qua Cloudflare: dễ dùng và rất nhanh.
Có ý kiến cho rằng sẽ hữu ích nếu có so sánh hiệu năng với JS worker.
Có ý kiến cho rằng với việc Pyodide đang nhận được sự hỗ trợ nghiêm túc, đã xuất hiện hy vọng Python có thể trở thành một lựa chọn thay thế thực sự cho JavaScript ở frontend.
Có câu hỏi liệu demo dùng
lzmalà có chủ ý hay chỉ là ngẫu nhiên.Có ý kiến đánh giá đây là yếu tố thay đổi cuộc chơi cho việc chạy các tác vụ liên quan đến AI trên Cloudflare, và họ đã chờ điều này từ lâu.
Có ý kiến mong Cloudflare triển khai workers không chỉ giới hạn ở JS workers mà còn coi WASM là công dân hạng nhất.
Người bình luận cho biết đã có kết quả tốt khi dùng CF Pages để xây dựng các trang tĩnh, và bị thu hút bởi đề xuất LLM-as-a-service mã nguồn mở của Cloudflare.
Có ý kiến thắc mắc việc bị giới hạn chỉ dùng các package của Pyodide sẽ ảnh hưởng thế nào đến những bản build không hề đơn giản.