Open syuilo opened 1 year ago
みんな移行はコスト高いって言ってるけど自分はそう思ってない(フロントエンドをReactに書き換えるとかの方がコスト高そう)
私は開発に参加していないので何も言えない立場なのですが、まずこのような大きな課題よりほかの比較的小さな課題(今あげられているIssueなど)にリソースを割くべきなのではないかと思います job queueなどの問題(#11001 や #11000 )を解決すればnode.jsをやめなくとも多少なりにはパフォーマンス改善に繋がると思います 外野から失礼しました。
みんな移行はコスト高いって言ってるけど自分はそう思ってない(フロントエンドをReactに書き換えるとかの方がコスト高そう)
少なくともここだけはちょっと同意する
上2つの両方に同意
私は開発に参加していないので何も言えない立場なのですが、まずこのような大きな課題よりほかの比較的小さな課題(今あげられているIssueなど)にリソースを割くべきなのではないかと思います job queueなどの問題を解決すればnode.jsをやめなくとも多少なりにはパフォーマンス改善に繋がると思います 外野から失礼しました。
今の自分の能力では今のパフォーマンスがほぼ限界で、これ以上パフォーマンスを改善するアイデアが無くなりつつある
https://github.com/saschanaz/kissmey
最近全然すすんでないですが、興味ある方いましたらmisskey-devで共同作業してみたいです(各エンドポイントをRustにしてNode+Rust hybrid状態で少しずつRustに移行する)
Issueを建てたということは、Rustでパフォーマンスが上がる可能性が弱くて、Rust以外の選択肢が欲しいと言うことと解釈している。どんどんやめるべき理由を書いていくよ私は。
Rustで効果が出るのがほぼ確実であると予測しているなら、今すぐゴリゴリ移植なり簡単なActivityPub実装を書くなりするべきじゃないの。
Node.js使っててネガティブな意見もらうことはあってもポジティブな意見もらうことが全くないのよね
インタプリタ型でなおかつ動的型付けである以上永遠につきまといますね。 もっともNode.jsで採用されているV8 JavaScript engine はJIT風になっているそうですが。
みんな移行はコスト高いって言ってるけど自分はそう思ってない(フロントエンドをReactに書き換えるとかの方がコスト高そう)
確かにフロントエンドをBlazorで書き直すよりは楽そうですね。 でもRustにこだわる理由を思いつきません。
Rustで効果が出るのがほぼ確実であると予測しているなら、
仮にそうだったとしても、この手の話題では予測を避けるべきです。
パフォーマンステストがないのでRust移植でパフォーマンスが上がっても証明ができない問題はあります (#9937)
Mastodonはどうやってテストしてるのか気になります
通りすがり失礼します Rust移植も別になしではないですが、Misskeyの移植を全面的に進める決定をする前に、ActivityPubサーバーとして認識される最小限の機能をRustで実装してみて、速度比較をしてみるといいかもしれません(いわゆるプロトタイプ).
パフォーマンステストがないのでRust移植でパフォーマンスが上がっても証明ができない問題はあります
Mastodonはどうやってテストしてるのか気になります
そのための前提としてこれが必要ですが
各エンドポイント
APIのエンドポイント…?意味あるの…?
とりあえずDeno/Bunはお手軽だからそのうち試す
通りすがり失礼します Rust移植も別になしではないですが、Misskeyの移植を全面的に進める決定をする前に、ActivityPubサーバーとして認識される最小限の機能をRustで実装してみて、速度比較をしてみるといいかもしれません(いわゆるプロトタイプ).
これをやることで、移植にかかるコストも見積もることができます. 私としては移植ってコストめちゃめちゃ高いという認識なんですが、(手戻りがあまり大きくならない範囲で)実際にやってみることでコストを測ってみませんか.
(部分的にRustなどネイティブモジュールにするにしても、複雑な処理系とかバックグラウンド処理、ストリーミング処理を書き換えるのかなと思っていた)
今の自分の能力では今のパフォーマンスがほぼ限界で、これ以上パフォーマンスを改善するアイデアが無くなりつつある
こういう理由なら焦らないでよき、というお気持ち
地道に調査していけばそのうちパフォーマンスの問題点も解決策もみつけられるはずだし、Rustに移植したからと言ってその問題点がわかったり、解決策が見つかるわけでもないので。
APIのエンドポイント…?意味あるの…?
(部分的にRustなどネイティブモジュールにするにしても、複雑な処理系とかバックグラウンド処理、ストリーミング処理を書き換えるのかなと思っていた)
(複雑な処理をRustでして、それを使うエンドポイントごとRustにしたらwasmとかで頭痛くならないので)
(複雑な処理をRustでして、それを使うエンドポイントごとRustにしたらwasmとかで頭痛くならないので)
その処理のコードが複雑であるかどうかと、その処理においてCPU (やIO) がボトルネックになっているかどうかというのは別の問題です。
LemmyがRustで実装されてるからRustであることが性能に大きな影響を与えているのなら参考になるかも
wasmとかで頭痛くならない
複雑な処理って普通はNestモジュールや関数になっているのだからAPIから呼び出しても頭が痛くなることはない気がするけど…
あとAPIエンドポイントってスクリプト言語で書いたほうが保守性がいいのでは…?
あとAPIエンドポイントってスクリプト言語で書いたほうが保守性がいいのでは…?
保守性と「スクリプト言語」であることに相関があるとは思えません。
あとAPIエンドポイントってスクリプト言語で書いたほうが保守性がいいのでは…?
これなしで
「どうしてNodeではダメなのか」がまだ明確じゃないのは問題かも
RustよりNode.jsのほうが開発の敷居が低いように思うので個人的にはNode.jsであることにかなりポジティブだよ〜
みんな移行はコスト高いって言ってるけど自分はそう思ってない(フロントエンドをReactに書き換えるとかの方がコスト高そう)
少なくともここだけはちょっと同意する
自分たちで書いたコードを愚直に置き換えること自体は苦痛ではなさそうだけど、パッケージ(ライブラリ)の代替を探すのが苦痛そうかつ書き換えが面倒そうなのと、ビルドした後のバイナリがめっちゃ肥大化するんじゃないかというのが不安
純Rustの場合、async runtimeなど独自の実装の学習が必要なので、メインはTypescriptを維持したほうがいいと思います。
少し調べてみたのですが、Rustでは非同期処理の実装が乱立しているみたいですね。 純Rustになった後で大揉めする原因になると思うので、私も純Rust案には賛同出来ないです。
Deno とか Bun に移行するなら前座としてルーター Hono にしたらリクエスト受ける部分がちょっと早くなったりしないかなと思っています https://github.com/honojs/hono (Misskeyの場合にFastifyとどっちが早いかは知らない)
まあまずスロークエリ含めたDB周り何とかしたほうがいいと思いますが…
あと JSON-LD on Rust はなんか面倒そう (予想) なのでその辺の検証をしっかりやったほうがいいかも
Deno とか Bun に移行するなら前座としてルーター Hono にしたらリクエスト受ける部分がちょっと早くなったりしないかなと思っています https://github.com/honojs/hono (Misskeyの場合にFastifyとどっちが早いかは知らない)
そういえば思い出したが今は koa でエイヤではなく NestJS に移行したので NestJS 用の hono のアダプターとか作らないといけなくて面倒?
Nestjsをフルで使ってはいなくて主にDI部分だけ使ってるからそこは大丈夫かも
Rustの話題と聞いて流れてきたRustaceanです。
今までの議論を読んだ感じ、Rustに移行する動機が弱いかなと思います。 最近大企業が他言語からRustに移行する事例はちょいちょいあるんですが、どれもちゃんとプロファイリングをやって「今の言語ではどうしても解決できないパフォーマンス上の問題がある」という結論に至ったうえでやっている印象があります。 例:Discord(https://discord.com/blog/why-discord-is-switching-from-go-to-rust)
上でも言われているようにプロファイリングをしてみて、CPUバウンドなのかIOバウンドなのか、GCのタイミングで遅くなったりするのかなどを洗い出したほうがいいのでしょうね。
JavaScriptは「GC付きのスクリプト言語」という印象からパフォーマンス上目の敵にされがちですが、実のところどの処理系でも「JavaScriptという遅い言語をいかに速く動かすか」という努力がされていてそこまで遅くない、という評判がコンパイル型言語界隈でも聞こえてくるような状況です。
NodeをBunに変えてみるとかなら割と簡単な気もしますが、実装言語を変えるというのはかなり重い判断になると思います。
↑(個人開発では自分もとりあえず言語やフレームワークをえいやで変えてみたりするので、気持ちはわかる……)
Rustaceanとしての個人的感情を言えばRustで書かれたものが世間に広がったら面白いが、それはそれとしてRustは銀の弾丸ではないので「とりあえずRustで書き直そうぜ!(Rewrite It In Rust)」には賛同しかねる、という立場です。
開発言語の話とはズレるけど、ここまでDBが足引っ張ってないか気にしてないのが気になるかも。 言語変えたいの話をするなら、せめてどのエンドポイントがどのくらい遅いのか、リクエスト時間中Node.jsのどこが遅いのか、くらいは把握したい所・・・。 (ここ以外のissueですでに議論済みだったらごめんなさい。見つけられなかった。)
感覚的にはDBで詰まってない?とは思ってて、実際上で出たSlowQueryは全部平均30秒超えてるし、大半ブラウザには届いてないはずでは?と思う所。 max_exec_timeに至っては16時間くらい回ってるときもあって、どう考えても無駄っぽい。 それならクエリ実行時にstatement_timeoutしただけでマシになるんでは?とか。 下手に居座るノードがあるより、timeoutエラー頻発でいいからさっさと返したほうがいいはずと思っているので。
それならクエリ実行時にstatement_timeoutしただけでマシになるんでは?とか。
既に設定されている
このIssueは『パフォーマンスを改善したい』と『開発体験を高めたい』の2つを解決しようとしてる 前者の『パフォーマンス』に関してはスロークエリが一番てっとり早そう 後者の『開発体験』はちょっと難しくて、仕事ではない個人のやる気ドリブンの開発では、その技術使ってテンションがあがるか・ワクワクするかが一番大事だと思う
それならクエリ実行時にstatement_timeoutしただけでマシになるんでは?とか。
既に設定されている
確かに確認したら記述は1年前からありました。失礼しました。
ただioのslowQuery(であってるよね?)でそれを超えるクエリがあるなら、 ここが機能せずに流れてるクエリがあるということかも?とかそういう方向をみたいかも。 ただメインで運用しているのは村上さんなので管轄違うとかそういう所がある?外野からだとなんとも・・・。
企業とかではなくほぼ個人プロジェクトってところもあるので、作者がRustを試してみたいって言ったらそれが尊重されるべきだとも思うんですけどね
企業とかではなくほぼ個人プロジェクト
190人+Dependabotははたして「個人」なのでしょうか。
190人+Dependabotははたして「個人」なのでしょうか。
個人かどうかじゃなくて、そこは「商業・営利」と、「趣味・同人」とかの違いだと思うので・・・。 極端な話、 syuilo さんは責務を負ってないとも言える。 (今のFanboxで運用されている環境が本当にそうか?というのはあるが、MisskeyHQとの関係性が良くも悪くも曖昧)
メンバーの立場から見る限り、私は少なくとも現体制は個人(同人的)プロジェクトと表現するのが適切だと思うけど
misskey-dev と io さんの関係は現在はしゅいろが io に住んでいることぐらいしか関係がないぐらい、グループとしては別物であって、例え io さんがどれぐらいの規模感で運営されていようと、それに misskey-dev が追従している(できている)わけではない。 それが課題だとしてもどのみちオフトピなので、この話はこれぐらい説明すればもう十分ですか?
最終的にリーダーが「僕はこうしたいからこうします!」というのは全然アリだとは思う。 オープンソースなので、気に入らない人は自分でフォークしてやっていく手もあるので。
こうやってIssueが開かれた以上意見を求めているのかな?と思ってやってきただけの外野なので、方針を強制する気はないということを後出しながら表明しておきます。
ただ、一人のRustaceanとしては、見切り発車した結果「Rustで書き直してみたけど思ったより良くならないな〜」とがっかりされてしまうのではないか、という危惧があって一連のコメントをするに至ったかたちです。
Summary
Node.jsはパフォーマンス上の問題があるため
Goとかでもいいけど