概要
前回: 報道: Misskey.ioの突然の負荷テストは連合サーバーに大迷惑? | GNU social JP Web。
「保安: Misskey.ioでのネットワーク障害と暫定復旧 | GNU social JP Web」で以前紹介したMisskey.ioのネットワーク障害が実はまだ解消できていなくて、年末年始に特に問題になっていて、一旦解消したとの報道があったので紹介します。
「【解消済み:不具合】11月下旬~1月5日まで続いたMisskey.ioの連合の不具合について|Misskey.io|pixivFANBOX」と以下の投稿で報告されていました。
このところ発生した、misskey.ioの外部配送が遅延していた原因など、時系列で技術面の詳しいことが報告されてるよ。
https://misskeyhq.fanbox.cc/posts/7266127あわせてKOBA789さんの投稿もみとくといいかも。 [参照]
11月下旬から1/5まで続いていたようです。減少としては、3日程前のMisskey.ioでの投稿が遅延してリモートサーバーに届くというものです。タイムラグでの投稿で、一種のスパムの大量送信のような状態になっており、迷惑がる声も多数見かけました。
「長期にわたる不具合により、ユーザーの皆様と連合先のFediverseの皆様に大変ご迷惑をおかけしました。」運営側も迷惑をかけたとの認識があるようです。
いろいろごちゃごちゃと原因について書いてありますが、結局「ジョブの増加速度が減少速度を上回ってパンクした」というシンプルな問題です。
「gihyo.jpのMisskey連載第4回: Bullmqを使ったジョブキューの実装 | GNU social JP Web」で登場したBullMQが、現在の規模では対応しきれないそうです。
一旦、配送用の新規サーバーをたてて、1/7に全部解消したものの、根本的な問題は未解決なので暫定です。新たなメッセージキューシステムを導入計画とのことで、これが完了するまではあくまで暫定解消で、また再発する可能性があるような報告でした。
報告
今回の問題のやや細かい話が以下で報告されていました。
(おそらくだけど)ioがジョブキューシステムを変更しても一般的なMisskeyサーバーに対してはオーバースペックなので本流に導入しないほうが良いのかもしれない もしくはconfigファイルでジョブキューを切り替えられる仕様にした上で両方対応させるか とんこう科学部(予備)|natureofmad_test@p1.a9z.dev
BullMQはio規模になるとどうあがいても貧弱らしい とんこう科学部(予備)|natureofmad_test@p1.a9z.devどこがおかしいんだろう Misskeyのコードベース?(←やばい) ioの独自改造?(←知らね) ioのハードウェア?(←最近インフラ変わったから?) それとも年末で廃止したサーバーが410出さずに詰まった? とんこう科学部(予備)|natureofmad_test@p1.a9z.dev
ジョブキューの時間計算量が実行中(待機中ではない)のジョブの数に比例するという性能特性があり、かつ時間計算量がタイムアウトの閾値を超えるとジョブの完了処理がコケるようになり、原理的に2度と状況が改善方向に向かうことはないという性能劣化の正帰還ができあがっていた(ので、全部一度引っこ抜いて待機列に詰め直した)
結論としては詰め直せばええということなのだけれど、そこに至るまでの調査は大変だった。みなさんお疲れさまでした……
具体的にはこの一行の時間計算量が active リスト(実行中のジョブリスト)の要素数に比例してます。完了したジョブをリストから取り除く処理なんだけれど、増えた待機ジョブに対応してワーカーを増やしまくるなどして実行中のジョブがひとたび急増すると、ここの処理が激重になり、タイムアウトするようになり、つまりジョブは2度と完了せず、不幸が訪れる。ジョブに増加に対応しようとして逆に首が締まる最悪のループに入るわけです。 https://github.com/taskforcesh/bullmq/blob/0a70f4cf7ba21c18c55390d47069335c305559af/src/commands/moveToFinished-14.lua#L117
いろいろ細かいことがごちゃごちゃ書いていますが、本質は冒頭に述べたことです。一般ユーザーやMisskey以外のユーザーはあまり意識する必要のない話です。
反響
今回の配送の遅延に関して以下で反響がありました。
やぁ、misskey.ioのキュー凄いねえ。 いま、だいたいfedibird.comに11時間半(ほぼ半日)ぐらい遅れて届いてる……というかもはや止まっているような速度だね。 ActivityPubの投稿の連合は、投稿者のサーバ側が、各ユーザーのフォロワーのいるサーバに新規の投稿があったことを伝える(相手サーバにPOSTする)仕組みです。 misskey.ioで1,100万個の外部配送が待機中になっている状況で、少しずつしか消化されないので、どんどん遅れが増えていってます。 ちなみにmisskey.ioで投稿のURLを拾ってきてそれを検索すると個別にfetchできるので、配送を待たずに受け取ることはできます。 誰かがブーストした場合も、まだ受け取っていなければ個別にfetchするので、それも届いたりします。 村上さんや運営のアナウンスがあったら、他鯖でブースト(リノート)することで伝えて回るっていうことはできるかな。あとはあんまりやっても仕方ないか……。 ま、個人的に自分の投稿を流したいサーバにもって来ちゃうっていう使い方はできますけどw
misskey見えなくなって絵文字っぽいコマンドだらけのユザネとか投稿が見えなくて助かる ミスキードメブロ検討中
自分がうざいんじゃなくて、古いどうでもいい投稿にリアクションつけたれたら嫌だろうなと思って日付確認するのが面倒 aqz/tamaina|aqz@p1.a9z.devn日前のioの投稿が余裕で流れてきてうざい aqz/tamaina|aqz@p1.a9z.dev
3日前のmisskey.ioの投稿流れてくるの、飛行機事故にざわめいているタイムラインが再現されてヤバイね。
Misskey.ioから緊急地震速報botの投稿がぽろぽろ入ってきて時系列があれなのであれ
当たり前の話ですが、喜ぶ人はいないくて、迷惑がる声が多かったです。X/Twitterの大規模障害が1か月ほど継続していると思えば、その迷惑さが比較できるでしょう。
結論
Misskey.ioの障害でした。
ミニサーバーなら、連合しているサーバーがそんなに多くもないので、影響は限定的です。が、メガサーバーでの障害は、連合する他の多くのサーバーにも影響があり、大迷惑です。
今後もこういう迷惑行為があるでしょうから、私は早く潰れて消えてほしいと思っていますし、Misskey.ioを使うことでこういう迷惑行為に加担しないでほしいと思います。
時間の無駄なので、Misskey関係の情報はあまり扱わない方針ですが、今回は比較的話題だったので紹介でした。
詳細プロフィール。SNS: X Twitter/GS=gnusocialjp@gnusocial.jp/WP=gnusocialjp@web.gnusocial.jp。2022-07-17からgnusocial.jpとweb.gnusocial.jpのサイトを運営しています。WordPressで分散SNSに参加しています。このアカウントの投稿に返信すると、サイトのコメント欄にも反映されます。
Comments
This Article was mentioned on web.gnusocial.jp