2 पॉइंट द्वारा GN⁺ 2023-07-07 | 1 टिप्पणियां | WhatsApp पर शेयर करें

"क्या आपको पता है कि #MetaThreads का बैकएंड #Python 3.10 पर बनाया गया है?

यह Instagram के #Cinder fork पर चल रहा है, और इस fork में JIT compiler, lazy-loading modules, precompiled static modules जैसी कई दिलचस्प सुविधाएँ शामिल हैं, जो सामान्य Python 3.10 से अलग हैं।"

1 टिप्पणियां

 
GN⁺ 2023-07-07
Hacker News की राय
  • जो लोग कहते हैं कि “Python production backend के लिए पर्याप्त तेज़ नहीं है”, उनके लिए यह काफ़ी विडंबनापूर्ण है। आखिर उसी कंपनी ने PHP + MySQL से बने अब तक के सबसे बड़े social network को चलाया है

    • तकनीकी रूप से यह सही है, लेकिन उन्होंने बहुत लंबे समय से plain PHP को वैसे का वैसा नहीं चलाया। HHVM JIT के ज़रिए उसे x86 code में बदला जाता था और मशीन पर native रूप से चलाया जाता था, और उस पर काफ़ी optimization भी किए गए थे
      JIT चलाने वाली virtual machine भी पूरी की पूरी C++ में है, और MySQL distribution भी scalability के लिए काफ़ी बदला हुआ internal fork है। इसमें storage/compute separation, sharding, InnoDB की जगह RocksDB-आधारित storage engine, synchronous replication के लिए Raft जैसी चीज़ें शामिल हैं
      backend infrastructure को scalable बनाने के लिए इसमें वाकई बहुत शानदार engineering लगाई गई थी
      देखने लायक सामग्री:
      [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...
    • मैं Facebook के शुरुआती engineers में था, और शुरुआती Facebook का PHP, वेबसाइट templates में इस्तेमाल होने वाले PHP जैसा बिल्कुल नहीं था। उसमें हर तरह की विशेष libraries थीं, जो कहीं अधिक परिष्कृत programming style को संभव बनाती थीं
      functional helpers, हज़ारों cores पर asynchronous execution, SSH का इस्तेमाल करके datacenters के पार spanning tree जैसी चीज़ें सोचिए। वैसे, जिन बेहतरीन चीज़ों का मैं इस्तेमाल करता था, उनमें से काफ़ी Evan Priestley ने बनाई थीं, और उन्होंने Phabricator तथा कई और शक्तिशाली systems भी बनाए
    • सही बात है। plain Python काफ़ी तेज़ नहीं था, इसलिए और काम करना पड़ा
      “यह Instagram के Cinder fork पर चल रहा है, जिसमें JIT, lazy-loading modules, precompiled static modules, और plain Python 3.10 की तुलना में कई दिलचस्प बदलाव शामिल हैं”
      यह ट्वीट में कहा गया था
      मुझे व्यक्तिगत रूप से फ़र्क नहीं पड़ता कि लोग कौन-सी language इस्तेमाल करते हैं। पैसे हों तो और servers जोड़ सकते हैं, यह सब जानते हैं। बस तब तक, जब तक CFO और CTO मंदी का हवाला देकर अगले बड़े project के लिए “cost cutting” तय न कर दें
      2023 में भी mainstream programming languages की “production readiness” पर बहस होना हैरानी की बात है। यह कुछ “cool kids” वाली प्रतिस्पर्धा जैसा लगता है
    • आप उसी कंपनी की बात कर रहे हैं जिसे वास्तव में scale करने के लिए दो PHP implementations और एक C++ transpiler बनाना पड़ा था, है न?
    • language choice पर बहस अक्सर पेड़ देखकर जंगल भूल जाने जैसी होती है। Python की जगह C++ चुनकर nanoseconds या cycles बचाना, network boundary पर cache service या database पढ़ने में milliseconds गंवाने की तुलना में बहुत मामूली हो जाता है
  • जिन हिस्सों में वास्तव में बहुत performance चाहिए, वे कई C++-आधारित aggregation और recommendation services में हैं। लेकिन webserver सही मायनों में Django है

    • इस विषय में मेरी सच में बहुत दिलचस्पी है। webserver के Django होने की बात आपको कैसे पता चली, यह जानना चाहता हूँ। मैंने ढूँढने की कोशिश की, लेकिन कुछ मिला नहीं
      Django क्यों इस्तेमाल करेंगे? मैंने इसे छोटे projects में इस्तेमाल किया है, लेकिन यह बहुत तेज़ नहीं लगा और मुझे लगा कि इतने बड़े app के लिए यह उपयुक्त नहीं होगा। इसके फ़ायदे-नुकसान जानना चाहूँगा
      इसे C++ या Rust में क्यों नहीं बनाया गया? भले ही भारी हिस्से compiled language में बनाए गए हों, क्या Python response time को सीमित नहीं करेगा? मैं amateur हूँ, इसलिए सवाल भोला हो सकता है
    • उन्होंने Django इस्तेमाल करने का फ़ैसला किया, यह दिलचस्प और अच्छा है, लेकिन मैं source जानना चाहता हूँ
    • Django webserver नहीं बल्कि WSGI/ASGI framework है। असल में HTTP termination किससे हो रहा है, यह जानने की जिज्ञासा है
    • मैं जानना चाहता हूँ कि codebase में type annotations और type checking का कितना इस्तेमाल होता है
    • अगर मैं ग़लत हूँ तो कृपया सुधार दें, लेकिन Django webserver नहीं है। यह gunicorn जैसे app server और nginx जैसे webserver के साथ इस्तेमाल किया जाने वाला framework है
  • “यह Instagram के Cinder fork पर चल रहा है, जिसमें JIT, lazy-loading modules, precompiled static modules, और plain Python 3.10 की तुलना में कई दिलचस्प बदलाव शामिल हैं”
    यानी यह पूरी तरह सिर्फ़ Python 3.10 नहीं है

    • मैंने Cinder से CPython में code port किया है। इस fork में कुछ ऐसे optimizations हैं जिन्हें CPython में आसानी से डाला जा सकता है, और Facebook भी features port करने के लिए खुला है
      Facebook इस fork को लगातार बनाए रखना चाहता है या नहीं, यह पता नहीं, लेकिन CPython पक्ष ऐसे features को merge करने के लिए खुला है, अगर वे उचित हों
    • यह भी याद रखना चाहिए कि Python 3.10, 3.1 से 9 major versions आगे है
    • सख़्ती से कहें तो Python implementation नहीं, बल्कि एक specification है
  • Threads backend पर एक पोस्ट Twitter पर आई है, यह अपने-आप में विडंबनापूर्ण है

    • अगर असली विडंबना ढूँढनी हो, तो वह यह है: Threads नाम का app, Python पर चल रहा है जिसमें global interpreter lock है जो threading को कठिन बनाता है
      समझे? Threads, threading…? ठीक है, मैं निकलता हूँ
    • Threads, Instagram की तरह mobile-only app है। desktop browser पर Threads को वास्तव में इस्तेमाल नहीं किया जा सकता, इसलिए शायद इसे Twitter post के रूप में साझा किया गया
      भले ही यह Threads post होती, HN पर शायद इसे submit नहीं किया जा सकता था
    • अभी तक कोई web app नहीं है। लगता है कि सीधे किसी Thread से link किया जा सकता है, लेकिन वह सिर्फ़ linked post दिखाता है, discussion tree जैसी चीज़ें नहीं
      यह अभी web पर खुला नहीं है। कहा गया है कि कभी न कभी होगा
    • इसे downvote क्यों किया जा रहा है? यह एक जायज़ टिप्पणी है
    • क्या अभी Threads का web-based version है, या सिर्फ़ app ही है?
  • यह साफ़ है कि backend कुछ हद तक ओवरलैप करता है। https://www.threads.net/t/C पहला Instagram पोस्ट है, लेकिन यह Threads पर भी दिखता है, और इसमें Instagram जितने ही likes हैं
    लेकिन https://www.threads.net/@kevin पर दिखता है कि कोई threads नहीं हैं

  • Python बस एक webserver है। वास्तव में performance-sensitive components जैसे edge proxy, load balancer, backend services, database, cache, और storage services ज़्यादातर C++ में हैं

    • जो webserver सभी requests या ज़्यादातर requests को संभालता है, उसे मैं सिस्टम का performance-sensitive हिस्सा मानूँगा। Python से Go में सिर्फ़ दोबारा लिख देने से ही कई मामलों में 2~3x performance improvement मिल जाता है, और FAANG scale पर इससे hardware cost में बड़ा फ़र्क पड़ सकता है
    • Python को ठीक इसी तरह इस्तेमाल करने के लिए बनाया गया था, और काफ़ी पहले से इसे हमेशा ऐसे ही इस्तेमाल किया जाता रहा है
  • मैंने Cinder और webserver पर काम किया है। अगर कोई technical questions हों तो मैं जवाब दे सकता हूँ :)

    • जानना चाहता हूँ कि क्या Cinder real-time streaming optimization में मदद कर सकता है। हम UDP stream लेते थे, फिर कई gstreamer और nvidia deepstream के जादू से गुज़रने के बाद stream पर real-time में machine learning inference चलाते थे। मेरी समझ से एक senior developer ने इसे Python में implement किया था
      लेकिन यहाँ latency बड़ी समस्या थी, और हमेशा की तरह MVP तक पहुँचने के लिए optimization priority कम कर दी गई थी
      इसलिए जानना चाहता हूँ कि क्या Cinder को real-time data streaming optimization के लिए इस्तेमाल किया जा सकता है, या फिर ऐसा पूछना ही यह दिखाता है कि मैं use case को ठीक से नहीं समझ रहा
      वैसे हमने Django भी इस्तेमाल किया था, और अब सोचता हूँ कि क्या हमें FastAPI पर जाना चाहिए था। वह अलग सवाल है
    • जानना चाहता हूँ कि CPython में merge होने की उम्मीद वाले features में से सबसे बड़ा impact और सबसे ज़्यादा संभावना वाला कौन-सा है
    • जानना चाहता हूँ कि क्या Django, Cython, Numpy वाले stack के लिए Cinder recommend करेंगे
    • क्या webserver वाले हिस्से को थोड़ा और detail में समझा सकते हैं? क्या यह WSGI implement करता है?
    • Cinder से किसे फ़ायदा हो सकता है? यह किस तरह के workloads के लिए उपयुक्त है? README से यह थोड़ा कम समझ आता है
  • rollout के बारे में और detail जानना चाहता हूँ। हर घंटे 10 लाख से कहीं ज़्यादा नए users जुड़ रहे हैं, जो काफ़ी जबरदस्त है

    • मुझे लगता है कि अभी expected growth के शुरुआती कुछ हफ़्तों, शायद कुछ महीनों, को संभालने के लिए इन्होंने काफ़ी overprovisioning की होगी
      फिर भी, यक़ीनन कई दिलचस्प details होंगी जिन्हें सुनना अच्छा लगेगा
    • Meta के सभी products में monthly active users 3.8 billion हैं
      कुछ million नए users कुल का 0.1% भी नहीं हैं। यह पूरी तरह expected fluctuation range के अंदर है
    • यह बस shared Meta infrastructure पर चल रहा है, जिसे इसी scale को संभालने के लिए बनाया गया है
  • https://github.com/twitter/the-algorithm/pull/447 को कभी नहीं भूलना चाहिए

    • आख़िरकार दोनों के बीच एक फ़र्क तो आ ही गया
  • Threads, Instagram के backend/API का reuse है। Instagram शुरू से ही Python-based था, इसलिए Threads भी Python इस्तेमाल कर रहा है
    इसका मतलब यह नहीं कि अगर आप आज ऐसा app नया बना रहे हैं, और internal fork की ज़रूरत नहीं है, तो आपको Python ही चुनना चाहिए। पूरी post पढ़ें तो यह काफ़ी आसानी से समझ आता है, लेकिन लगता है Hacker News का “सिर्फ़ title पढ़ो” UI इसे थोड़ा distort कर रहा है

    • शांत रहो। Python काफ़ी अच्छी language है