-
Sponsor
Sponsor misskey-dev/misskey
- Notifications
- Fork 823
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Node.jsやめる(Rustにする?) #11078
Comments
個人的にはRustよりGoのほうがまだ読み書きしやすいのでGoを推したい |
GoはGoogle製なので将来性が心配 |
なんならBunとかに置き換えるだけでもローコストで早くなったりしないのかな |
Rustもどうやら開発コミュニティでn悶着あるみたいですので、個人的にはC# (ASP.NET Core 7.0)が良いかと思います。 |
bunのfetchとBun.serveに置き換えると速度がだいぶ向上する気はしますが、Crypto周りのNode互換APIがまだ未実装なのでそこだけなんとかすれば動く気はします(node-forgeなどに頼る?) |
Node.jsのどの側面がMisskeyを遅くしているのか、そもそも本当にMisskeyが遅い原因がNode.jsなのかなどのプロファイリングをしないと、技術選定の裏付けが難しいかも |
Rustにするのは俺がRustを覚える必要があるのでやめて欲しい(などと) |
パフォーマンスのことを考えるとRustを推したいです。Goの方が読みやすいとありますが、Rustが独自のルールを導入しているだけで、慣れてくるとそんなんでも。 |
Denoを使えばNode.jsのエコシステムを使い回せるのでお得ではないかと。 どちらにせよ、現在のプロジェクト構造を180°ひっくり返すようなものなので「本当にNode.jsが原因かどうか」を精査する必要はあるかと。 |
Rustはサーバー用度にはあまり使いたくないかも 単純に一部で処理速度がほしいってことならNodeのままでC++などでaddonを作ったほうがいいかもしれない |
Rust に一票 |
ちなみにそれはもう Rust でやってる |
あと別に Go はパフォーマンス思考の言語では全然ないので意味がない |
ついでにパフォーマンスが必要ならwasm, もっと行くならffi(ただしunstable)でOK |
必要に応じてRustで作ったNodeのネイティブモジュールを読み込む今の方針でいいと思うんだけどなぁ |
それよりN+1のほうがボトルネックだと思う |
Slow Query Log いる? |
そのうちひとつを整形
サブクエリやめてPreloadすれば早くなるんじゃないかな |
少し調べてみたのですが、Rustでは非同期処理の実装が乱立しているみたいですね。 |
通りすがりの意見ですが、風のうわさで伺った「 |
Rust や Go 案にどちらかというと賛成です。 C#は、パフォーマンスの完全なコントロールを目的とするのなら、中途半端な気もします。(私は.NETを使わないので、偏見がありますが) 依存ライブラリを移行できなかったらどうしようもできないので、どちらにせよRustで作ったNodeのネイティブモジュールをパフォーマンスの影響が大きいところから採用していくという現在の方針を推し進めるのが良いかと思います。 |
メモリ関連の問題はGCのあるGoでもある程度は改善するでしょうが、GCやメモリリークの問題も考えたらGCのないRustを使う方がより良いとは思います。Rustに移行するにしても、移行や学習のコストを考えると必要な部分だけで段階的に行うのが良いと思います。 |
Rustが実際にパフォーマンスが良いかどうかは抜きにしても、一般にRustの方がパフォーマンスが良いというイメージが広まっていて、Rustで書かれているという理由で他ソフトウェアが選択されることが増えているのでMisskeyを使ってもらうためにはRustにするしかなくなってきている |
そういう理由で技術選定するのは嫌い |
本当に速くしたかったらスロークエリなんとかするほうが先じゃないですか 言語を変えてスロークエリ超えられるパフォーマンス出るなら別ですがそんなことないと思う 平均 500msかかっているクエリがある以上、言語を変えても500msかかり続けるのではないですか |
気持ちはわかるけど、そういう理由でRustに置き換えたら100%利用者が増えるとは限らないし、戦うなら他の分野で戦う方法だってあるはず 重たい作業だし、これによるメリットがデメリットを上回る可能性もある 選定する理由としてはあと2,3個無いと不安 |
(複雑な処理をRustでして、それを使うエンドポイントごとRustにしたらwasmとかで頭痛くならないので) |
その処理のコードが複雑であるかどうかと、その処理においてCPU (やIO) がボトルネックになっているかどうかというのは別の問題です。 |
LemmyがRustで実装されてるからRustであることが性能に大きな影響を与えているのなら参考になるかも |
複雑な処理って普通はNestモジュールや関数になっているのだからAPIから呼び出しても頭が痛くなることはない気がするけど… あとAPIエンドポイントってスクリプト言語で書いたほうが保守性がいいのでは…? |
保守性と「スクリプト言語」であることに相関があるとは思えません。 |
これなしで |
「どうしてNodeではダメなのか」がまだ明確じゃないのは問題かも |
RustよりNode.jsのほうが開発の敷居が低いように思うので個人的にはNode.jsであることにかなりポジティブだよ〜 |
自分たちで書いたコードを愚直に置き換えること自体は苦痛ではなさそうだけど、パッケージ(ライブラリ)の代替を探すのが苦痛そうかつ書き換えが面倒そうなのと、ビルドした後のバイナリがめっちゃ肥大化するんじゃないかというのが不安 |
|
Deno とか Bun に移行するなら前座としてルーター Hono にしたらリクエスト受ける部分がちょっと早くなったりしないかなと思っています https://github.com/honojs/hono (Misskeyの場合にFastifyとどっちが早いかは知らない) まあまずスロークエリ含めたDB周り何とかしたほうがいいと思いますが… |
あと JSON-LD on Rust はなんか面倒そう (予想) なのでその辺の検証をしっかりやったほうがいいかも |
そういえば思い出したが今は koa でエイヤではなく NestJS に移行したので NestJS 用の hono のアダプターとか作らないといけなくて面倒? |
Nestjsをフルで使ってはいなくて主にDI部分だけ使ってるからそこは大丈夫かも |
Rustの話題と聞いて流れてきたRustaceanです。 今までの議論を読んだ感じ、Rustに移行する動機が弱いかなと思います。 上でも言われているようにプロファイリングをしてみて、CPUバウンドなのかIOバウンドなのか、GCのタイミングで遅くなったりするのかなどを洗い出したほうがいいのでしょうね。 JavaScriptは「GC付きのスクリプト言語」という印象からパフォーマンス上目の敵にされがちですが、実のところどの処理系でも「JavaScriptという遅い言語をいかに速く動かすか」という努力がされていてそこまで遅くない、という評判がコンパイル型言語界隈でも聞こえてくるような状況です。 NodeをBunに変えてみるとかなら割と簡単な気もしますが、実装言語を変えるというのはかなり重い判断になると思います。 |
↑(個人開発では自分もとりあえず言語やフレームワークをえいやで変えてみたりするので、気持ちはわかる……) |
Rustaceanとしての個人的感情を言えばRustで書かれたものが世間に広がったら面白いが、それはそれとしてRustは銀の弾丸ではないので「とりあえずRustで書き直そうぜ!(Rewrite It In Rust)」には賛同しかねる、という立場です。 |
開発言語の話とはズレるけど、ここまでDBが足引っ張ってないか気にしてないのが気になるかも。 感覚的にはDBで詰まってない?とは思ってて、実際上で出たSlowQueryは全部平均30秒超えてるし、大半ブラウザには届いてないはずでは?と思う所。 |
既に設定されている |
このIssueは『パフォーマンスを改善したい』と『開発体験を高めたい』の2つを解決しようとしてる |
確かに確認したら記述は1年前からありました。失礼しました。 misskey/packages/backend/src/postgres.ts Line 204 in 61e7eb8
ただioのslowQuery(であってるよね?)でそれを超えるクエリがあるなら、 |
企業とかではなくほぼ個人プロジェクトってところもあるので、作者がRustを試してみたいって言ったらそれが尊重されるべきだとも思うんですけどね |
個人かどうかじゃなくて、そこは「商業・営利」と、「趣味・同人」とかの違いだと思うので・・・。 |
メンバーの立場から見る限り、私は少なくとも現体制は個人(同人的)プロジェクトと表現するのが適切だと思うけど |
misskey-dev と io さんの関係は現在はしゅいろが io に住んでいることぐらいしか関係がないぐらい、グループとしては別物であって、例え io さんがどれぐらいの規模感で運営されていようと、それに misskey-dev が追従している(できている)わけではない。 |
最終的にリーダーが「僕はこうしたいからこうします!」というのは全然アリだとは思う。 こうやってIssueが開かれた以上意見を求めているのかな?と思ってやってきただけの外野なので、方針を強制する気はないということを後出しながら表明しておきます。 |
ただ、一人のRustaceanとしては、見切り発車した結果「Rustで書き直してみたけど思ったより良くならないな〜」とがっかりされてしまうのではないか、という危惧があって一連のコメントをするに至ったかたちです。 |
このIssueをTwitterやFediverseなどで晒してる人達へ |
Summary
Node.jsはパフォーマンス上の問題があるため
Goとかでもいいけど
The text was updated successfully, but these errors were encountered: