ผสานรวม Python เข้ากับ Cloudflare Workers: ใช้ Pyodide และ WebAssembly
- ตอนนี้สามารถใช้ Python บน Cloudflare Workers ได้แล้ว
- ต่างจากการรองรับภาษาอื่นนอกเหนือจาก JavaScript ก่อนหน้านี้ โดยตัวรัน Python ถูกผสานรวมเข้ากับรันไทม์ workerd โดยตรง
- รองรับ binding ทั้งหมด เช่น Vectorize, Workers AI, R2 และ Durable Objects
- สามารถนำเข้าแพ็กเกจ Python ยอดนิยมบางส่วน เช่น FastAPI, Langchain และ Numpy ได้
- ไม่จำเป็นต้องมีขั้นตอน build แยกต่างหากหรือทูลเชนภายนอก
มากกว่าการคอมไพล์เป็น WebAssembly
- Cloudflare Workers รองรับ WebAssembly มาตั้งแต่ปี 2018
- การคอมไพล์ภาษาไปเป็น WebAssembly หรือ JavaScript เพียงอย่างเดียวไม่เพียงพอ
- จำเป็นต้องรองรับระบบนิเวศของแพ็กเกจที่นักพัฒนาคุ้นเคย
วงจรชีวิตของ Python Worker
- Pyodide ถูกฝังมาใน workerd ทำให้สามารถเขียนโค้ด Python ได้
- ระบุไฟล์ .py ผ่านไฟล์ Wrangler.toml แล้วรัน
npx wrangler@latest dev จากนั้นรันไทม์จะฉีด Pyodide ให้โดยอัตโนมัติ
Python interpreter ที่ฝังอยู่ใน Workers runtime
- CPython คือ implementation อ้างอิงของ Python และ Pyodide คือการพอร์ต CPython ไปยัง WebAssembly
- Pyodide มี Python standard library เกือบทั้งหมด พร้อม FFI ที่สามารถเรียกใช้ JavaScript API ได้โดยตรง
เวทมนตร์ของ Pyodide และ Foreign Function Interface (FFI)
- FFI ของ Pyodide ช่วยให้ Python เข้าถึงความสามารถของ JavaScript ได้
- ทำให้สามารถใช้แพ็กเกจอย่าง FastAPI และ Langchain ได้ทันที
เหตุใด dynamic linking จึงจำเป็น และ static linking ยังไม่เพียงพอ
- แพ็กเกจ Python จำนวนมากใช้ C FFI เพื่อนำเข้า native library
- ด้วย dynamic linking ทำให้ Pyodide รองรับแพ็กเกจ Python จำนวนมากที่มี dependency เป็น native library ได้
การรองรับไลบรารีฝั่งเซิร์ฟเวอร์และไคลเอนต์
- Python มีไลบรารี HTTP client ยอดนิยมมากมาย เช่น httpx, urllib3 และ requests แต่ใน Pyodide จะไม่ทำงานโดยปริยาย
- ไลบรารีไคลเอนต์แบบ asynchronous สามารถใช้ Fetch API เพื่อส่งคำขอได้
การนำเข้าแพ็กเกจ Python
- Python Workers รองรับส่วนย่อยของแพ็กเกจ Python ที่ Pyodide มีให้โดยตรง
- เพียงเพิ่มแพ็กเกจลงในไฟล์
requirements.txt
ลดเวลา cold start ด้วย memory snapshot
- ระหว่างกระบวนการฉีด Pyodide เข้าไปใน Worker และอัปโหลดไปยัง Cloudflare จะมีการสร้าง memory snapshot เพื่อลดเวลา cold start
รองรับอนาคตด้วยเวอร์ชันของ Pyodide และ compatibility date
- ใช้ compatibility date และ compatibility flag เพื่อให้เลือกใช้งานพฤติกรรมใหม่และการเปลี่ยนแปลงที่อาจไม่รองรับย้อนหลังได้อย่างชัดเจน
วิธีที่ binding ทำงานใน Python Workers
- Pyodide มี FFI สำหรับ JavaScript ทำให้สามารถใช้ object, method และ function ของ JavaScript ได้โดยตรงจาก Python
เริ่มต้นใช้งาน Python Workers
- การรองรับภาษาโปรแกรมใหม่อย่างแท้จริงต้องอาศัยการลงทุนมากกว่าระดับ "hello world"
- Python เป็นภาษาโปรแกรมยอดนิยมรองจาก JavaScript และ Cloudflare กำลังเดินหน้าขยายการรองรับแพ็กเกจ Python และปรับปรุงประสิทธิภาพอย่างต่อเนื่อง
ความเห็นของ GN⁺
- การรองรับ Python Workers ของ Cloudflare เป็นพัฒนาการสำคัญที่ขยายการใช้งาน Python ในสถาปัตยกรรม serverless ซึ่งมอบความยืดหยุ่นและทางเลือกมากขึ้นให้แก่นักพัฒนา Python และเปิดโอกาสในการสร้างแอปพลิเคชันบนคลาวด์ได้โดยไม่ต้องพึ่ง JavaScript
- การผสานรวม Python เข้ากับ WebAssembly ผ่าน Pyodide เปิดความเป็นไปได้ใหม่ในการรันโค้ด Python ทั้งในเบราว์เซอร์และสภาพแวดล้อมแบบ serverless ซึ่งอาจส่งผลอย่างมากต่อระบบนิเวศของ Python โดยเฉพาะในด้าน data science และ machine learning ที่ JavaScript ไม่ได้ครองความนิยมเหนือกว่า
- เทคโนโลยี dynamic linking และ memory snapshot ช่วยลดเวลาโหลดเริ่มต้นและเปิดทางให้แชร์ทรัพยากรได้อย่างมีประสิทธิภาพ ซึ่งถือเป็นการปรับปรุงประสิทธิภาพที่สำคัญโดยเฉพาะในระบบกระจายขนาดใหญ่
- การจัดการเวอร์ชันผ่าน compatibility date และ flag มอบวิธีที่ยืดหยุ่นในการรองรับฟีเจอร์ใหม่และอัปเดตต่าง ๆ พร้อมคงเสถียรภาพของโค้ดเดิมไว้ ซึ่งเป็นองค์ประกอบสำคัญสำหรับองค์กรที่ให้บริการระยะยาว
- เมื่อ Cloudflare ขยายการรองรับ Python Workers มากขึ้น นักพัฒนา Python ก็จะมีตัวเลือกมากขึ้นในการเชื่อมต่อกับบริการคลาวด์เดิมหรือพัฒนาบริการใหม่ ซึ่งแสดงให้เห็นว่า Python สามารถมีบทบาทสำคัญในโลก serverless computing ได้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
มีความเห็นเชิงบวกว่าเป็นเรื่องน่ายินดีที่ Cloudflare ให้ความสนใจกับการรัน Python บน Edge ผ่าน WebAssembly มากขึ้น
มีความเห็นว่า Cloudflare มีฟีเจอร์ด้านโฮสติงและฐานข้อมูลที่ยอดเยี่ยม แต่ยังไม่ค่อยประสบความสำเร็จมากนักในการทำการตลาดตัวเองในฐานะแพลตฟอร์มสำหรับนักพัฒนา
มีการประเมินในเชิงบวกว่าเคยลองใช้ JS workers ผ่าน Cloudflare มาแล้ว และพบว่าใช้งานง่ายและเร็วมาก
มีความเห็นว่าการเปรียบเทียบประสิทธิภาพกับ JS worker น่าจะเป็นประโยชน์
มีความเห็นว่าเมื่อ Pyodide ได้รับการสนับสนุนอย่างจริงจัง ก็เริ่มเห็นความหวังว่า Python อาจกลายเป็นทางเลือกแท้จริงของ JavaScript บนฝั่งฟรอนต์เอนด์ได้
มีคำถามว่าการเดโมด้วย lzma เป็นความตั้งใจหรือเป็นเพียงความบังเอิญ
มีความเห็นว่านี่คือ game changer สำหรับการรันงานด้าน AI บน Cloudflare และรอสิ่งนี้มานานแล้ว
มีความเห็นว่าอยากให้ Cloudflare ทำ workers ที่ไม่ได้จำกัดอยู่แค่ JS workers และปฏิบัติต่อ WASM ในฐานะพลเมืองชั้นหนึ่ง
มีความเห็นว่าได้ผลลัพธ์ที่ดีจากการใช้ CF Pages สร้างเว็บไซต์แบบสแตติก และรู้สึกสนใจข้อเสนอ LLM-as-a-service แบบโอเพนซอร์สของ Cloudflare
มีความเห็นว่าสงสัยว่าข้อจำกัดที่ใช้ได้เฉพาะแพ็กเกจของ Pyodide จะส่งผลต่อบิลด์ที่ซับซ้อนมากกว่าปกติอย่างไร