3 điểm bởi GN⁺ 2024-04-03 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-04-03
Ý 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.

    • Sử dụng Pyodide để biên dịch Python sang WebAssembly, đóng gói vào Workerd, và cố gắng tăng tốc thời gian khởi động bằng cách dùng V8 snapshot.
    • Thời gian khởi động nguội (cold start) của Python trên Cloudflare Workers trong trường hợp tốt nhất là khoảng 1 giây.
    • Thông báo lần này giúp đo lường mức độ quan tâm đối với việc chạy Python trên Edge, nhưng vẫn có một số nhược điểm:
      • Chỉ giới hạn ở một phiên bản Python/Pyodide duy nhất.
      • Việc phân giải package phụ thuộc vào workerd và khá rắc rối.
      • Có sự phụ thuộc mang tính cấu trúc vào thế giới JS/V8, nên có thể là thách thức khi muốn giảm thời gian khởi động nguội.
    • Dù có những nhược điểm này, đây vẫn là một nỗ lực đáng hoan nghênh, và người bình luận mong chờ những ứng dụng thú vị sẽ được tạo ra từ đó.
  • 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.

    • Có câu hỏi 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.
  • Đá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.

    • Người bình luận muốn port ứng dụng Django của mình sang dùng cơ sở dữ liệu D1 của Cloudflare.
  • Có ý kiến cho rằng sẽ hữu ích nếu có so sánh hiệu năng với JS worker.

    • Người bình luận muốn biết các trade-off đại khái, đồng thời lo ngại rằng việc phải đi qua nhiều lớp có thể khiến tốc độ chậm hơn.
  • 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 lzma là có chủ ý hay chỉ là ngẫu nhiên.

    • Điều này có liên quan đến tin tức công nghệ gần đây.
  • 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.

    • Hiện tại mã WASM chạy bên trong ngữ cảnh JS, nhưng người bình luận dự đoán rằng trong tương lai nó sẽ được triển khai trực tiếp lên runtime WASM mà không cần đi qua container.
  • 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.

    • Họ nói rằng việc thiếu hỗ trợ Python là trở ngại chính khiến họ chưa thể xây dựng thêm nhiều thứ trên Cloudflare, và muốn thử bản cập nhật này.
  • 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.

    • Người bình luận nghĩ đến trường hợp có nhiều mã không phải pure Python nên phải tự build lại thủ công, đồng thời hy vọng việc Cloudflare chấp nhận nền tảng này sẽ giúp đưa thêm nhiều package vào hơn.