แบ็กเอนด์ของ Meta Threads สร้างขึ้นด้วย Python 3.10
(twitter.com/llanga)"คุณทราบไหมว่าแบ็กเอนด์ของ #MetaThreads สร้างขึ้นด้วย #Python 3.10?
โดยมันทำงานอยู่บนฟอร์ก #Cinder ของ Instagram และฟอร์กนี้มีฟีเจอร์ที่น่าสนใจหลายอย่างซึ่งแตกต่างจาก Python 3.10 ทั่วไป เช่น JIT compiler, โมดูล lazy loading และ static module ที่คอมไพล์ล่วงหน้า"
1 ความคิดเห็น
ความเห็นจาก Hacker News
ฟังดูค่อนข้างย้อนแย้งสำหรับคนที่บอกว่า “Python ไม่เร็วพอสำหรับ production backend” เพราะบริษัทเดียวกันนี้ก็เคยรันโซเชียลเน็ตเวิร์กขนาดใหญ่ที่สุดด้วย PHP + MySQL มาก่อน
ตัว virtual machine ที่ทำ JIT ก็เขียนด้วย C++ ทั้งหมด และ MySQL distribution ก็เป็น internal fork ที่แก้ไขหนักมากเพื่อการสเกล ระบบมีทั้งการแยก storage/compute, sharding, storage engine บน RocksDB แทน InnoDB, และ Raft สำหรับ synchronous replication
มีงานวิศวกรรมระดับยอดเยี่ยมถูกใส่เข้าไปมากจริง ๆ เพื่อทำให้ backend infrastructure สเกลได้
แหล่งอ้างอิงที่น่าอ่าน:
[1] https://engineering.fb.com/2016/08/31/core-data/myrocks-a-sp...
[2] https://research.facebook.com/file/529018501538081/hhvm-jit-...
[3] https://research.facebook.com/file/700800348487709/HHVM_ICPE...
ให้นึกถึงพวก functional helper, การรันแบบ asynchronous บนหลายพันคอร์, และ spanning tree ที่พาดข้ามดาต้าเซ็นเตอร์ผ่าน SSH เป็นต้น พูดนอกเรื่องนิดหนึ่ง ของดีหลายอย่างที่ผมใช้ตอนนั้น Evan Priestley เป็นคนทำ และเขายังเป็นคนสร้าง Phabricator กับระบบทรงพลังอีกหลายตัวด้วย
“รันอยู่บน Cinder fork ของ Instagram ซึ่งมีทั้ง JIT, โมดูลแบบ lazy-loading, static module ที่ precompile แล้ว และการเปลี่ยนแปลงที่น่าสนใจอีกหลายอย่างเมื่อเทียบกับ Python 3.10 แบบดั้งเดิม”
นี่คือสิ่งที่อยู่ในทวีต
ส่วนตัวผมไม่ค่อยสนว่าคนจะใช้ภาษาอะไร ถ้ามีเงินก็แค่เพิ่มเซิร์ฟเวอร์ ทุกคนก็รู้กันอยู่แล้ว อย่างน้อยก็จนกว่า CFO กับ CTO จะตั้งเป้าโปรเจกต์ใหญ่ถัดไปเป็น “ลดต้นทุน” โดยอ้างภาวะเศรษฐกิจถดถอย
น่าแปลกที่ในปี 2023 เรายังมานั่งเถียงกันเรื่อง “ความพร้อมสำหรับ production” ของภาษาโปรแกรมกระแสหลักอยู่ มันเหมือนการแข่งขันว่าใครเป็น “เด็กคูล” มากกว่า
ส่วนที่ต้องการประสิทธิภาพสูงมากจริง ๆ อยู่ในบริการฝั่ง aggregate และ recommendation ที่ทำด้วย C++ หลายตัว แต่ตัวเว็บเซิร์ฟเวอร์เองก็คือ Django อย่างเหมาะสม
แล้วทำไมถึงเลือก Django? ผมเคยใช้กับโปรเจกต์เล็ก ๆ แต่รู้สึกว่ามันไม่ได้เร็วมาก เลยคิดว่าคงไม่เหมาะกับแอปใหญ่แบบนี้ อยากรู้ข้อดีข้อเสีย
ทำไมไม่ทำด้วย C++ หรือ Rust ไปเลย? ถึงจะเอาส่วนหนักไปทำด้วยภาษาคอมไพล์แล้ว Python จะไม่กลายเป็นตัวจำกัดเวลา response เหรอ? ผมเป็นมือใหม่ คำถามอาจจะใสซื่อไปหน่อย
“รันอยู่บน Cinder fork ของ Instagram ซึ่งมีทั้ง JIT, โมดูลแบบ lazy-loading, static module ที่ precompile แล้ว และการเปลี่ยนแปลงที่น่าสนใจอีกหลายอย่างเมื่อเทียบกับ Python 3.10 แบบดั้งเดิม”
เพราะงั้นมันก็ไม่ใช่แค่ Python 3.10 ล้วน ๆ เสียทีเดียว
ผมไม่รู้ว่า Facebook ยังอยากแบก fork นี้ต่อไปเรื่อย ๆ ไหม แต่ฝั่ง CPython เองก็เปิดรับการ merge ฟีเจอร์ลักษณะนี้ถ้ามันสมเหตุสมผล
มันช่างประชดดีที่บทความเกี่ยวกับ backend ของ Threads ไปโผล่อยู่บน Twitter
เข้าใจมุกใช่ไหม? Threads, threading…? โอเค ผมไปเองก็ได้
ต่อให้มันเป็นโพสต์บน Threads ก็คงส่งเข้า HN ไม่ได้อยู่ดี
มันยังไม่เปิดกว้างบนเว็บ แต่บอกว่าในอนาคตจะมี
เห็นได้ชัดว่าแบ็กเอนด์มีส่วนที่ทับซ้อนกันพอสมควร https://www.threads.net/t/C เป็นโพสต์แรกของ Instagram แต่ก็แสดงใน Threads ด้วย และมีจำนวนไลก์เท่ากับบน Instagram ทุกประการ
แต่ https://www.threads.net/@kevin กลับบอกว่าไม่มี threads
Python ก็เป็นแค่เว็บเซิร์ฟเวอร์เท่านั้น องค์ประกอบที่อ่อนไหวต่อประสิทธิภาพจริง ๆ อย่าง edge proxy, load balancer, backend service, database, cache และ storage service ส่วนใหญ่เป็น C++
เคยทำงานกับ Cinder และงานฝั่งเว็บเซิร์ฟเวอร์ ถ้ามีคำถามเชิงเทคนิคก็ตอบได้ :)
แต่ในกรณีนี้ latency เป็นปัญหาใหญ่ และตามปกติแล้วก็ลดลำดับความสำคัญของการ optimize ลงเพื่อให้ไปถึง MVP ก่อน
เลยสงสัยว่า Cinder ใช้กับการ optimize การสตรีมข้อมูลแบบเรียลไทม์ได้ไหม หรือจริง ๆ แล้วการถามแบบนี้หมายความว่าผมยังไม่เข้าใจ use case เอง
อนึ่ง เราใช้ Django ด้วย และตอนนี้ก็แอบคิดว่าควรเปลี่ยนไป FastAPI ตั้งแต่แรกไหม แต่นั่นเป็นอีกคำถามหนึ่ง
อยากรู้รายละเอียดเรื่องการ rollout มากกว่านี้ ตอนนี้มี ผู้ใช้ใหม่มากกว่าหนึ่งล้านคนต่อชั่วโมง เพิ่มเข้ามา ซึ่งค่อนข้างมหาศาล
ถึงอย่างนั้นก็น่าจะยังมีรายละเอียดน่าสนใจอีกมากที่อยากฟัง
ผู้ใช้ใหม่เพิ่มขึ้นไม่กี่ล้านคนยังไม่ถึง 0.1% ของทั้งหมดเลย อยู่ในช่วงความผันผวนที่คาดการณ์ได้สบาย ๆ
https://github.com/twitter/the-algorithm/pull/447 อันนี้ห้ามลืมเด็ดขาด
Threads คือการนำแบ็กเอนด์/API ของ Instagram มาใช้ซ้ำ Instagram เองก็ พัฒนาบน Python มาตั้งแต่แรก เพราะงั้น Threads เลยใช้ Python ไปด้วย
แต่นั่นไม่ได้แปลว่าถ้าจะสร้างแอปใหม่แบบนี้ คุณควรเลือก Python ทั้งที่มีทางเลือกอื่นซึ่งไม่ต้องพึ่ง internal fork อยู่แล้ว ถ้าอ่านโพสต์เต็มจะเข้าใจได้ค่อนข้างง่าย แต่ UI ของ Hacker News ที่ชวนให้อ่านแค่หัวข้อน่าจะทำให้ประเด็นบิดเบือนไป