保安: Misskey.ioの迷惑な配送遅延の連合不具合とその暫定?解消

Misskey/person
概要

前回: 報道: Misskey.ioの突然の負荷テストは連合サーバーに大迷惑? | GNU social JP Web

保安: Misskey.ioでのネットワーク障害と暫定復旧 | GNU social JP Web」で以前紹介したMisskey.ioのネットワーク障害が実はまだ解消できていなくて、年末年始に特に問題になっていて、一旦解消したとの報道があったので紹介します。

【解消済み:不具合】11月下旬~1月5日まで続いたMisskey.ioの連合の不具合について|Misskey.io|pixivFANBOX」と以下の投稿で報告されていました。

11月下旬から1/5まで続いていたようです。減少としては、3日程前のMisskey.ioでの投稿が遅延してリモートサーバーに届くというものです。タイムラグでの投稿で、一種のスパムの大量送信のような状態になっており、迷惑がる声も多数見かけました。

「長期にわたる不具合により、ユーザーの皆様と連合先のFediverseの皆様に大変ご迷惑をおかけしました。」運営側も迷惑をかけたとの認識があるようです。

いろいろごちゃごちゃと原因について書いてありますが、結局「ジョブの増加速度が減少速度を上回ってパンクした」というシンプルな問題です。

gihyo.jpのMisskey連載第4回: Bullmqを使ったジョブキューの実装 | GNU social JP Web」で登場したBullMQが、現在の規模では対応しきれないそうです。

一旦、配送用の新規サーバーをたてて、1/7に全部解消したものの、根本的な問題は未解決なので暫定です。新たなメッセージキューシステムを導入計画とのことで、これが完了するまではあくまで暫定解消で、また再発する可能性があるような報告でした。

報告

今回の問題のやや細かい話が以下で報告されていました。

avatar
とんこう科学部(予備)|natureofmad_test@p1.a9z.dev
(おそらくだけど)ioがジョブキューシステムを変更しても一般的なMisskeyサーバーに対してはオーバースペックなので本流に導入しないほうが良いのかもしれない もしくはconfigファイルでジョブキューを切り替えられる仕様にした上で両方対応させるか
avatar
とんこう科学部(予備)|natureofmad_test@p1.a9z.dev
BullMQはio規模になるとどうあがいても貧弱らしい
avatar
とんこう科学部(予備)|natureofmad_test@p1.a9z.dev
どこがおかしいんだろう Misskeyのコードベース?(←やばい) ioの独自改造?(←知らね) ioのハードウェア?(←最近インフラ変わったから?) それとも年末で廃止したサーバーが410出さずに詰まった?
avatar
ジョブキューの時間計算量が実行中(待機中ではない)のジョブの数に比例するという性能特性があり、かつ時間計算量がタイムアウトの閾値を超えるとジョブの完了処理がコケるようになり、原理的に2度と状況が改善方向に向かうことはないという性能劣化の正帰還ができあがっていた(ので、全部一度引っこ抜いて待機列に詰め直した)
avatar
具体的にはこの一行の時間計算量が active リスト(実行中のジョブリスト)の要素数に比例してます。完了したジョブをリストから取り除く処理なんだけれど、増えた待機ジョブに対応してワーカーを増やしまくるなどして実行中のジョブがひとたび急増すると、ここの処理が激重になり、タイムアウトするようになり、つまりジョブは2度と完了せず、不幸が訪れる。ジョブに増加に対応しようとして逆に首が締まる最悪のループに入るわけです。
https://github.com/taskforcesh/bullmq/blob/0a70f4cf7ba21c18c55390d47069335c305559af/src/commands/moveToFinished-14.lua#L117

いろいろ細かいことがごちゃごちゃ書いていますが、本質は冒頭に述べたことです。一般ユーザーやMisskey以外のユーザーはあまり意識する必要のない話です。

反響

今回の配送の遅延に関して以下で反響がありました。

avatar
やぁ、misskey.ioのキュー凄いねえ。 いま、だいたいfedibird.comに11時間半(ほぼ半日)ぐらい遅れて届いてる……というかもはや止まっているような速度だね。 ActivityPubの投稿の連合は、投稿者のサーバ側が、各ユーザーのフォロワーのいるサーバに新規の投稿があったことを伝える(相手サーバにPOSTする)仕組みです。 misskey.ioで1,100万個の外部配送が待機中になっている状況で、少しずつしか消化されないので、どんどん遅れが増えていってます。 ちなみにmisskey.ioで投稿のURLを拾ってきてそれを検索すると個別にfetchできるので、配送を待たずに受け取ることはできます。 誰かがブーストした場合も、まだ受け取っていなければ個別にfetchするので、それも届いたりします。 村上さんや運営のアナウンスがあったら、他鯖でブースト(リノート)することで伝えて回るっていうことはできるかな。あとはあんまりやっても仕方ないか……。 ま、個人的に自分の投稿を流したいサーバにもって来ちゃうっていう使い方はできますけどw
636cf4a1c2f687af.png

当たり前の話ですが、喜ぶ人はいないくて、迷惑がる声が多かったです。X/Twitterの大規模障害が1か月ほど継続していると思えば、その迷惑さが比較できるでしょう。

結論

Misskey.ioの障害でした。

ミニサーバーなら、連合しているサーバーがそんなに多くもないので、影響は限定的です。が、メガサーバーでの障害は、連合する他の多くのサーバーにも影響があり、大迷惑です。

今後もこういう迷惑行為があるでしょうから、私は早く潰れて消えてほしいと思っていますし、Misskey.ioを使うことでこういう迷惑行為に加担しないでほしいと思います。

時間の無駄なので、Misskey関係の情報はあまり扱わない方針ですが、今回は比較的話題だったので紹介でした。

Comments

  1. This Article was mentioned on web.gnusocial.jp

Ads Blocker Image Powered by Code Help Pro

広告ブロッカー検知/Ads Blocker Detected

このサイトは会費と広告で運営されています。[Bronze=月220円以上に登録] するか、広告ブロッカーを無効にしてください。

This site is operated by membership and advertise. Please [register at least Bronze=220 JPY/month], or disable ads blocker.

Copied title and URL