2 ポイント 投稿者 GN⁺ 2023-07-07 | 1件のコメント | WhatsAppで共有

"#MetaThreadsのバックエンドが #Python 3.10 で構築されていることをご存じですか?

Instagramの #Cinder フォーク上で動作しており、このフォークにはJITコンパイラ、遅延読み込みモジュール、事前コンパイル済みの静的モジュールなど、通常のPython 3.10とは異なるいくつもの興味深い機能が含まれています。"

1件のコメント

 
GN⁺ 2023-07-07
Hacker Newsの意見
  • 「Pythonは本番バックエンドには十分高速ではない」と言う人たちにとっては、なかなか皮肉だ。同じ会社が PHP + MySQL で作った最大規模のソーシャルネットワークを運営してきたのだから

    • 技術的にはその通りだが、ずっと前から素のPHPをそのまま動かしていたわけではない。HHVM JIT で x86 コードに変換し、マシン上でネイティブ実行しており、最適化もかなり入っていた
      JITを行う仮想マシン自体もすべてC++で、MySQLディストリビューションもスケーラビリティのために大きく改変した社内フォークだ。ストレージ/計算分離、シャーディング、InnoDBの代わりにRocksDBベースのストレージエンジン、同期レプリケーションのためのRaftのようなものが入っている
      バックエンドインフラをスケーラブルにするために、本当に見事なエンジニアリングが数多く投入されていた
      参考になりそうな資料:
      [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エンジニアだったが、初期FacebookのPHPはウェブサイトのテンプレートに使っていたPHPとはまったく別物だった。ずっと洗練されたプログラミングスタイルを可能にする 専用ライブラリ があらゆる形で存在していた
      関数型ヘルパー、数千コアでの非同期実行、SSHを使ってデータセンターをまたぐスパニングツリーのようなものを思い浮かべればいい。余談だが、私が使っていた優れたもののかなり多くはEvan Priestleyが作ったもので、彼はPhabricatorやほかの強力なシステムも作っていた
    • その通り。素のPythonは十分速くなかったので、さらに多くの作業が必要だった
      「Instagramの Cinderフォーク 上で動作しており、そこにはJIT、遅延ロードモジュール、事前コンパイル済み静的モジュール、素のPython 3.10に対するいくつもの興味深い変更が含まれている」
      これはツイートにあった内容だ
      個人的には、人がどの言語を使おうと気にしない。金があればサーバーを増やせばいいというのは誰でも分かっている。ただし、CFOとCTOが景気後退を理由に次の大きな課題を「コスト削減」に設定するまでは、だが
      2023年にもなって主流プログラミング言語の「本番対応性」を議論していることに驚く。まるで「イケてる子たち」の競争みたいだ
    • 実際にスケールさせるために PHP実装を2つ とC++トランスパイラを作らなければならなかった、あの会社のことだよね?
    • 言語選択は木を見て森を見ずになりがちだ。Pythonの代わりにC++を選んでナノ秒やサイクルを節約しても、キャッシュサービスやデータベースを読むために ネットワーク境界 でミリ秒を使っていることに比べればかすんでしまう
  • 実際に大きな性能が必要な部分は、複数のC++ベースの集計・推薦系サービスにある。しかしウェブサーバーはちゃんと Django

    • この話題には本当に興味がある。ウェブサーバーがDjangoだとどうやって分かったのか気になる。探してみたが見つけられなかった
      なぜDjangoを使うのだろう? 小さなプロジェクトで使ったことはあるが、あまり速くなく、こういう大規模アプリには向かないと思っていた。長所と短所を知りたい
      なぜC++やRustで作らなかったのだろう? 重い部分をコンパイル言語で作っていたとしても、Pythonがレスポンス速度を制限しないのだろうか? アマチュアなので素朴な質問かもしれない
    • Djangoを使うことにしたというのは興味深くてうれしいが、出典 が知りたい
    • Djangoはウェブサーバーではなく WSGI/ASGIフレームワーク だ。実際にHTTP終端を何で処理しているのか気になる
    • コードベースで 型アノテーション と型チェックをどれくらい使っているのか気になる
    • 間違っていたら訂正してほしいが、Djangoはウェブサーバーではない。gunicornのようなアプリサーバーやnginxのようなウェブサーバーと一緒に使う フレームワーク
  • 「InstagramのCinderフォーク上で動作しており、そこにはJIT、遅延ロードモジュール、事前コンパイル済み静的モジュール、素のPython 3.10に対するいくつもの興味深い変更が含まれている」
    つまり完全にただの Python 3.10 というわけではない

    • CinderからCPythonへコードを移植したことがある。このフォークにはCPythonへ比較的簡単に入れられる最適化がいくつかあり、Facebookも機能移植には前向きだ
      Facebookが今後もフォークを維持したいのかは分からないが、CPython側は妥当であればそうした機能をマージすることに前向きだ
    • Python 3.10は 3.1よりメジャーバージョンが9つ 先であることも覚えておくべきだ
    • 厳密に言えば、Pythonは実装ではなく 仕様
  • Threadsバックエンドに関する記事がTwitterに上がっているのは皮肉だ

    • 本当の皮肉を探すならこれだ。Threads というアプリを、スレッディングを難しくするグローバルインタプリタロックのあるPythonで動かしていること
      分かるでしょ? Threads、threading……? はい、失礼しました
    • ThreadsはInstagramのように モバイル専用アプリ だ。デスクトップブラウザでは実際にはThreadsを使えないので、だからTwitterの投稿として共有されたのだと思う
      たとえThreadsの投稿だったとしても、HNには投稿できなかったはずだ
    • ウェブアプリはまだない。Threadに直接リンクできるようではあるが、リンクされたものしか表示されず、議論ツリーのようなものも見られない
      まだウェブには開かれていない。いずれ開く予定だと言われている
    • なぜこれを低評価するの? 妥当な指摘だ
    • 今のThreadsには ウェブ版 があるのか、それともアプリだけなのか?
  • バックエンドがある程度重なっているのは明らかだ。https://www.threads.net/t/C は最初のInstagram投稿だが、Threadsでも表示され、Instagramとまったく同じいいね数になっている。
    ただし https://www.threads.net/@kevin にはthreadsがないと表示される

  • Pythonは単なるWebサーバーだ。本当に性能に敏感なコンポーネントである エッジプロキシ、ロードバランサー、バックエンドサービス、データベース、キャッシュ、ストレージサービスの大半はC++だ

    • すべて、または大半のリクエストを処理するWebサーバーは、システムの中でも性能に敏感な部分だと思う。PythonからGoに単純に書き直すだけでも、多くの場合 2〜3倍の性能向上 が得られ、FAANG規模ではハードウェアコストに大きな差を生みうる
    • それこそがまさにPythonが使われるよう意図された方法で、昔からずっとそう使われてきた
  • CinderとWebサーバーの仕事をしていた。技術的な質問があれば答えられる :)

    • Cinderが リアルタイムストリーミング の最適化に役立つのか気になる。私たちはUDPストリームを受け取り、いくつかのgstreamerとnvidia deepstreamの魔法を通して、ストリームに対してリアルタイムで機械学習推論を実行していた。主任開発者がPythonで実装したと理解している。
      ただ、ここではレイテンシが大きな問題で、いつものようにMVPに到達するため最適化の優先度は下げていた。
      なので、Cinderをリアルタイムデータストリーミングの最適化に使えるのか、それともこういう質問自体がユースケースを理解していないことを意味するのか気になる。
      ちなみにDjangoも使っていたが、今になってFastAPIに替えるべきだったのかとも思う。それは別の質問だ
    • CPythonにマージされてほしい機能のうち、影響が最も大きく、可能性も高いもの は何か気になる
    • Django、Cython、Numpyで構成されたスタックに Cinder の利用を勧めるか気になる
    • Webサーバー側をもう少し詳しく説明してもらえる? WSGI を実装するの?
    • Cinderは誰が恩恵を受けられるのか? どんな種類の ワークロード に向いているのか? READMEだけでは少し物足りない
  • ロールアウトについてもっと詳しく知りたい。毎時 100万人をはるかに超える新規ユーザー が追加されていて、かなりすごい

    • 今は予想される成長の最初の数週間、あるいは数か月をさばくために、かなり 過剰プロビジョニング しているのだと思う。
      それでも、聞いてみたい興味深い詳細は確実にたくさんあるはずだ
    • Meta製品全体の月間アクティブユーザーは 38億人 だ。
      新規ユーザーが数百万人増える程度では全体の0.1%にも満たない。十分に予測可能な変動範囲内だ
    • その規模を処理するよう作られた 共有Metaインフラ の上で、単に動いているだけだ
  • https://github.com/twitter/the-algorithm/pull/447 は絶対に忘れてはならない

    • ついに両者の違いが1つできたな
  • ThreadsはInstagramのバックエンド/APIを再利用したものだ。Instagramは最初から Pythonベース だったので、ThreadsもPythonを使うことになった。
    だからといって、社内フォークを必要としない代替案がある状況で、この種のアプリを新しく作る際にPythonを選ぶべきだという意味ではない。本文全体を見ればかなり簡単に分かるが、Hacker Newsの「見出しだけを見る」UIが話を歪めている気がする

    • 落ち着け。Python は十分に良い言語だ