2 poin oleh GN⁺ 2023-07-07 | 1 komentar | Bagikan ke WhatsApp

"Tahukah Anda bahwa backend #MetaThreads dibangun dengan #Python 3.10?

Backend ini berjalan di fork #Cinder milik Instagram, yang mencakup berbagai fitur menarik yang berbeda dari Python 3.10 biasa, seperti compiler JIT, modul lazy loading, dan modul statis yang telah diprakompilasi."

1 komentar

 
GN⁺ 2023-07-07
Komentar Hacker News
  • Cukup ironis bagi pihak yang bilang “Python tidak cukup cepat untuk backend produksi”. Perusahaan yang sama sudah lama mengoperasikan jejaring sosial terbesar yang dibuat dengan PHP + MySQL

    • Secara teknis itu benar, tetapi mereka sudah lama tidak menjalankan PHP murni apa adanya. Dengan HHVM JIT, kode diubah menjadi kode x86 dan dijalankan secara native di mesin, dan banyak optimisasi juga sudah ditambahkan
      Mesin virtual yang melakukan JIT itu sendiri juga seluruhnya ditulis dalam C++, dan distribusi MySQL-nya pun merupakan fork internal yang dimodifikasi besar-besaran demi skalabilitas. Ada pemisahan storage/compute, sharding, mesin penyimpanan berbasis RocksDB alih-alih InnoDB, serta hal-hal seperti Raft untuk replikasi sinkron
      Benar-benar banyak engineering hebat yang dituangkan untuk membuat infrastruktur backend bisa diskalakan
      Referensi yang layak dibaca:
      [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...
    • Saya adalah engineer Facebook di masa awal, dan PHP di Facebook saat itu sama sekali berbeda dari PHP yang dipakai untuk template website. Ada berbagai macam library khusus yang memungkinkan gaya pemrograman yang jauh lebih canggih
      Bayangkan helper fungsional, eksekusi asinkron di ribuan core, spanning tree lintas data center menggunakan SSH, dan semacamnya. Sebagai catatan tambahan, banyak hal bagus yang saya pakai dibuat oleh Evan Priestley, dan dia juga membuat Phabricator serta berbagai sistem kuat lainnya
    • Betul. Python murni memang tidak cukup cepat, jadi perlu pekerjaan tambahan
      “Berjalan di atas fork Cinder milik Instagram, yang mencakup JIT, modul lazy-loading, modul statis yang sudah dikompilasi sebelumnya, dan berbagai perubahan menarik dibanding Python 3.10 murni”
      Itu isi tweet-nya
      Secara pribadi saya tidak terlalu peduli orang memakai bahasa apa. Semua orang tahu kalau punya uang, tinggal tambah server. Setidaknya sampai CFO dan CTO menjadikan “penghematan biaya” sebagai proyek besar berikutnya dengan alasan resesi
      Mengejutkan juga bahwa pada 2023 orang masih memperdebatkan “kesiapan produksi” bahasa pemrograman arus utama. Rasanya seperti kompetisi “anak keren”
    • Maksudmu perusahaan yang untuk benar-benar bisa scale sampai harus membuat dua implementasi PHP dan sebuah transpiler ke C++ itu?
    • Memilih bahasa sering kali jadi gagal melihat gambaran besarnya. Memilih C++ alih-alih Python demi menghemat nanodetik atau beberapa siklus jadi terasa sepele dibanding menghabiskan milidetik di batas jaringan saat membaca dari layanan cache atau database
  • Bagian yang benar-benar butuh performa tinggi sebenarnya ada di berbagai layanan agregasi dan rekomendasi berbasis C++. Tetapi web server-nya memang Django

    • Saya sangat tertarik dengan topik ini. Penasaran dari mana diketahui bahwa web server-nya Django. Sudah saya cari tapi tidak ketemu
      Kenapa memakai Django? Saya pernah memakainya di proyek kecil, tetapi rasanya tidak terlalu cepat dan saya kira tidak cocok untuk aplikasi sebesar ini. Saya ingin tahu kelebihan dan kekurangannya
      Kenapa tidak dibuat dengan C++ atau Rust? Walaupun bagian berat dibuat dengan bahasa terkompilasi, bukankah Python tetap akan membatasi latensi respons? Mungkin ini pertanyaan naif dari amatir
    • Menarik dan menyenangkan kalau benar mereka memilih Django, tapi saya ingin tahu sumbernya
    • Django itu bukan web server, melainkan framework WSGI/ASGI. Saya penasaran apa yang sebenarnya menangani terminasi HTTP-nya
    • Saya penasaran seberapa banyak mereka menggunakan anotasi tipe dan type checking di codebase mereka
    • Tolong koreksi kalau saya salah, tetapi Django bukan web server. Itu framework yang dipakai bersama app server seperti gunicorn dan web server seperti nginx
  • “Berjalan di atas fork Cinder milik Instagram, yang mencakup JIT, modul lazy-loading, modul statis yang sudah dikompilasi sebelumnya, dan berbagai perubahan menarik dibanding Python 3.10 murni”
    Jadi ini memang bukan sepenuhnya hanya Python 3.10 biasa

    • Saya pernah mem-porting kode dari Cinder ke CPython. Di fork ini ada beberapa optimisasi yang cukup mudah dimasukkan ke CPython, dan Facebook juga terbuka untuk mem-porting fitur
      Saya tidak tahu apakah Facebook ingin terus mempertahankan fork ini, tetapi pihak CPython terbuka untuk menggabungkan fitur-fitur semacam itu jika memang masuk akal
    • Perlu juga diingat bahwa Python 3.10 itu 9 versi mayor di depan 3.1
    • Kalau mau sangat teknis, Python itu adalah spesifikasi, bukan implementasi
  • Ironis juga bahwa tulisan tentang backend Threads diunggah ke Twitter

    • Kalau mau mencari ironi yang sesungguhnya, ini dia. Aplikasi bernama Threads justru dijalankan dengan Python yang punya global interpreter lock, yang membuat threading jadi sulit
      Paham kan? Threads, threading…? Oke, saya keluar sendiri
    • Threads, seperti Instagram, adalah aplikasi khusus mobile. Di browser desktop orang memang belum bisa benar-benar memakai Threads, jadi mungkin itulah sebabnya ini dibagikan lewat postingan Twitter
      Bahkan kalau itu postingan Threads pun, kemungkinan besar tidak akan bisa disubmit ke HN
    • Belum ada web app-nya. Sepertinya bisa membuat tautan langsung ke thread, tetapi yang ditampilkan hanya postingan yang ditautkan dan tidak ada hal seperti pohon diskusi
      Masih belum benar-benar terbuka di web. Katanya suatu saat nanti akan dibuka
    • Kenapa ini di-downvote? Ini poin yang fair
    • Saat ini apakah ada versi berbasis web untuk Threads, atau masih hanya aplikasi?
  • Jelas ada tumpang tindih backend sampai tingkat tertentu. https://www.threads.net/t/C adalah postingan Instagram pertama, dan itu juga terlihat di Threads, dengan jumlah like yang persis sama seperti di Instagram
    Tapi di https://www.threads.net/@kevin tertulis tidak ada thread

  • Python hanyalah webserver. Komponen yang benar-benar sensitif terhadap performa seperti edge proxy, load balancer, layanan backend, database, cache, dan layanan penyimpanan sebagian besar ditulis dalam C++

    • Webserver yang menangani semua atau sebagian besar request jelas merupakan bagian sistem yang sensitif terhadap performa. Dalam banyak kasus, hanya dengan menulis ulang dari Python ke Go saja bisa menghasilkan peningkatan performa 2~3x, dan pada skala FAANG itu bisa membuat perbedaan besar pada biaya hardware
    • Itulah tepatnya cara Python memang dimaksudkan untuk digunakan, dan memang sejak dulu selalu digunakan seperti itu
  • Saya pernah mengerjakan Cinder dan webserver. Kalau ada pertanyaan teknis, saya bisa jawab :)

    • Saya penasaran apakah Cinder bisa membantu untuk optimasi streaming real-time. Kami menerima stream UDP, lalu melalui berbagai sihir gstreamer dan nvidia deepstream, kami menjalankan inferensi machine learning secara real-time pada stream tersebut. Setahu saya, developer senior mengimplementasikannya dalam Python
      Tapi di sini latensi adalah masalah besar, dan seperti biasa prioritas optimasi diturunkan demi mencapai MVP
      Jadi saya penasaran apakah Cinder bisa dipakai untuk optimasi streaming data real-time, atau apakah pertanyaan ini sendiri berarti saya belum memahami use case-nya
      Sebagai catatan, kami juga memakai Django, meski sekarang saya jadi bertanya-tanya apakah seharusnya beralih ke FastAPI. Itu pertanyaan terpisah
    • Saya penasaran fitur apa yang dampaknya paling besar dan peluangnya paling tinggi untuk digabungkan ke CPython
    • Saya penasaran apakah Anda akan merekomendasikan Cinder untuk stack yang terdiri dari Django, Cython, dan Numpy
    • Bisa jelaskan lebih detail soal sisi webserver? Apakah ini mengimplementasikan WSGI?
    • Siapa yang bisa mendapat manfaat dari Cinder? Cocok untuk jenis beban kerja seperti apa? README saja terasa agak kurang
  • Saya ingin tahu lebih banyak soal rollout-nya. Jumlah pengguna baru yang jauh melebihi 1 juta orang per jam itu cukup luar biasa

    • Menurut saya, saat ini mereka pasti sudah melakukan overprovisioning besar-besaran untuk menahan beberapa minggu pertama pertumbuhan yang diantisipasi, mungkin bahkan beberapa bulan
      Meski begitu, pasti masih banyak detail menarik yang layak didengar
    • Total pengguna aktif bulanan di seluruh produk Meta adalah 3,8 miliar
      Beberapa juta pengguna baru bahkan tidak sampai 0,1% dari total itu. Masih dalam rentang fluktuasi yang cukup bisa diprediksi
    • Ini hanya berjalan di atas infrastruktur Meta bersama yang memang dibangun untuk menangani skala itu
  • https://github.com/twitter/the-algorithm/pull/447 tidak boleh dilupakan

    • Akhirnya sekarang ada satu perbedaan di antara keduanya
  • Threads mendaur ulang backend/API Instagram. Instagram sejak awal memang berbasis Python, jadi itulah alasan Threads juga menggunakan Python
    Tapi itu tidak berarti Python harus dipilih saat membuat aplikasi seperti ini dari nol, apalagi jika ada alternatif yang tidak membutuhkan fork internal. Jika membaca keseluruhan artikelnya, ini cukup mudah dipahami, tetapi UI Hacker News yang mendorong orang “hanya membaca judul” tampaknya membuatnya terdistorsi

    • Tenang saja. Python adalah bahasa yang cukup bagus