さて本題。
Mastodonのリレーであるpub-relayは、最初の頃はsidekiqを使っていたのですが、途中でジョブキューを使わない仕組みに変更されました。
リレーは失敗したジョブを再試行しない(即座にあきらめちゃう)ので、sidekiqを使わなくても大丈夫ではあるのですが、このことで、失敗した場合の対応に弱くなっていました。
どこかのサーバが障害を起こしていると、リレーの処理が詰まるのです……。
そこで、サーキットブレーカーを導入しました。
Crystalでは、Rubyでいうところのgemに相当するshardというのがありまして、そこで公開されているcircuit_brakerというshardを利用しています。
@alex Pleroma is easy to understand with the built-in actors available. Mastodon is a bit more complicated.
From the standpoint of implementing relays, the bottleneck is that Pleroma does not do JSON-LD signatures. Everything needs to be delivered via Announce Activity, so there will be a lot of fetching between servers. Signed Objects can be transferred directly, so the load is less.
All Pleroma servers have a built-in relay, eg https://gleasonator.com/relay It makes hosting a bit easier.