icon

「サーバあれ」

icon

@risahana こん!

icon

ログボ

icon

いま、昨日の12:00ぐらいの投稿が流れてきてるね。

icon

@kamisuke おはよう、王

icon

@takt_kr サーバ内は元気に動いているので、直接使っている人は普通に使えてるんですよ。ほとんど不便に感じてないという。

2024-01-04 08:08:58 まきはらの投稿 makihara@fedibird.com
icon

今日から仕事のみんなにお手入れ中の猫ちゃんを見せてあげよう

布団の上に座って尻を舐める猫
Attach image
ハッと顔をあげてこっちみてる猫
Attach image
icon

@takt_kr 流れては来てるんだけど、ものすごく遅いです。 [参照]

Web site image
投稿の参照(1件) by のえる (@noellabo@fedibird.com)
icon

@takt_kr 外部配送に遅延が出ている旨はアナウンスされているので、解消できない何らかの事情があるんじゃないかと思います。

icon

今日は臨時増設したサーバを減らそうかと思ってるんだけど、その前にmisskey.ioの未配送Activity流してくれないかなーw(そう都合良くはいかん)

icon

Mastodonの管理画面でmisskey.ioのとこみると、fedibird.comの場合でフォロー合計46,237って出るんだけど、これは延べ人数。

たとえばしゅうまい君をfedibird.comからフォローしている人は1,186いるんだけど、しゅうまい君の投稿はそれぞれ1回だけmisskey.ioからこちらに送られてきて、それをこちらで1,186人のフォロワーに配る仕組みになっているのね。

だからユニークユーザー数も重要で、こちらは15,156。

15,156人分の溜まっている投稿を受け取って、46,237人に配るわけ。

fedibird.comの場合、フォロワーへ配る他に、各種の購読の処理が加わる。一般的なMastodonサーバでも、ハッシュタグのフォローの処理は加わる。

実際にmisskey.ioの15,156人から24時間にどのぐらいの投稿が配送されてくるのか調べると、1月2日の24時間でみると2,908人が行った29,354件の投稿になる。この数字も面白いね。

ちなみに、misskey.ioの配送の中には投稿だけじゃなくて絵文字リアクションとか投稿削除とかフォローリクエストとか承認とか、いろんなものが混じっているはずなので、投稿件数ではないよ。リアクションの割合は多そうだねえ。

icon

いまのMastodonはリモートから配送されてきた投稿について、まずmastodon-web(puma)が受け取って、送信元の身元確認などを行ったあと、ingressキューに積む。

ingressキューで順番に処理していくんだけど、重複を無視したりして、新規投稿ならデータベースに投稿データとして保存する。

で、この保存した投稿データを内部で配送する。配送はdefaultキューに積んで、順番に処理する。フォローしている人のホームとかリスト、公開タイムライン(連合やローカル、ハッシュタグ)などに差し込む処理ね。

タイムラインに差し込まれるときに、redisのpub/sub channelsを使って、ストリーミングで繋がっているブラウザ・クライアントに結果を流し込む処理を行う。ストリーミングはnode.jsで動いている本体とは別のプロセスが処理するので、redisを仲介にして分離されている。

新規投稿じゃない場合、たとえば絵文字リアクションとかお気に入りなら、ingressキューのワーカーの段階でredisに通知をpubしてストリーミング経由でブラウザ・クライアントに流す。

そういう感じ。

で、もの凄く大量の処理が必要なときに、どこがボトルネックになるかってことを見極めるのが重要なのね。

icon

fedibird.comの場合、ingressキューが詰まる現象というのは見たことがなくて、基本的にdefaultキューが処理仕切れなくて溢れるよ。

でも元凶はingressキューからdefaultキューに投げられる大量の配送処理なので、ingressキューをわざと絞り込んで、処理を遅延させて負荷を軽くすることはできる。

defaultの処理が追いつかなくて死にそうだったら、一時的にingressキューを止めちゃうっていう手もあるよ。

特定のサーバからの処理がキツければ、たとえばlow_priority_ingressキューを別に作って、そこで処理件数を制限しながらゆっくり処理する。で、pumaの方でmisskey.ioから来たActivityだけlow_priority_ingressに積むって感じ。

ま、fedibird.comでは今回、流れてくるものなら全力で処理する方針だけどね。

このingressキューは、mastodon.socialが大量流入で人口爆発したときに生み出されたやつで、これで調整するようにしたらしいよ。重くて動かない状態から、サーバ内動作はなんとかなる、というところまで回復させたりね。

icon

こういう状況のときに、大きいサーバ……というか、リモートフォローの多い、生きたユーザーをたくさん抱えたサーバは、処理量が多くなるので、そこがネックになりやすい。

webもかなり重くなるので、リモート投稿を受け付けるプロセスと、直接の利用者がAPI利用するプロセスをわけておくと、APIの応答性を守れたりするよ。

あとmstdn.jpでよく発生していたと思うけど、負荷が高まってくると画像のアップロードがコケるようになるんだけど、これもバックグラウンド処理があるからで、分離しておくと安定した動作を確保できる。fedibird.comでやってるよ。

まあそんな感じで、多少ソフトウェアの機能を調整したり、どうプロセスを分割して、どこにどのぐらいのリソースを割くようにするか調整するなど、運用って工夫次第なんだ。

あけおめ負荷試験もそうだし、地震も、他鯖の詰まりもそうだけど、そういうのを貴重なデータにして、仮説を立てておいて結果を検証し、改良を重ねて知見を積み上げていくんだよ。

で、ボトルネックは改善すると別の場所に移動するので、あとはバランスとりかな。

misskey.ioはピーキーなサーバなので、そのへん難しいだろうね。構成変更したときにバランスが崩れやすい。ま、任せるしかないけど! がんばえ!

icon

misskey.io側の方針も出てないし、一応、もう一日だけ臨時増設サーバ維持しておきますかねー。

icon

@rosylilly 外部配送、24時間遅れぐらい。

icon

@MaySoMusician misskey.io側が詰まってるので!

2024-01-04 21:24:44 画眩の投稿 ggagen@pawoo.net
icon

このアカウントは、notestockで公開設定になっていません。