Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
1週間で作るActivityPubリレーサーバ
Search
S.H.
December 21, 2024
0
39
1週間で作るActivityPubリレーサーバ
第6回 Fediverse Linux Users Group 勉強会
S.H.
December 21, 2024
Tweet
Share
More Decks by S.H.
See All by S.H.
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
140
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
17
Mastodon on Ruby master
gamelinks007
0
68
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
250
ユーザーから見たLrama
gamelinks007
0
180
Contributing to the Ruby Parser
gamelinks007
2
880
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
The Invisible Side of Design
smashingmag
298
50k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
GitHub's CSS Performance
jonrohan
1030
460k
Into the Great Unknown - MozCon
thekraken
33
1.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
Being A Developer After 40
akosma
87
590k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Transcript
1週間で作るActivityPub リレーサーバ S.H. 第6回 Fediverse Linux Users Group 勉強会 2024-12-21
自己紹介 S.H. Rubyにたまにパッチを投げてる人 2017年ごろから鯖缶やってる人 最近リレーサーバを作った
今日話すこと リレーサーバについて 開発の背景 作ったもの
リレーサーバ
ActivityPubリレーサーバの仕組み リレーサーバに参加しているサーバからの公開投 稿を受け取る 受け取った公開投稿をリレーサーバに参加してい る別のサーバに配送する
リレーサーバのメリット Fediverseのサーバ同士が連合しやすくなる 特にお一人様鯖や小規模な鯖の場合は連合が 強化される
リレーサーバのデメリット 外部から流れてくる投稿の数が増え、サーバへ の負荷が増加する 投稿によっては画像もあるためディスクの容量 も使ってしまう リレーサーバ自体もそれなりに負荷がかかる
現状のリレーサーバ実装(1) 有名な実装は大きく二つ pub-relay(Crystal) Activity-Relay(Go)
現状のリレーサーバ実装(2) Node.jsやRustの実装もある ActivityPub Relay(Node.js) AodeRelay(Rust)
現状のリレーサーバの課題(1) リレーサーバの数よりもFediverseのサーバの 数が多い 特定のリレーサーバに参加しがち リレーサーバから配送される投稿数も増加しや すい リレーサーバ自体と参加サーバへの負荷が増加 しやすい
現状のリレーサーバの課題(2) リレーサーバの実装があまりない アクティブにメンテナンスされているのは3つ Activity-Relay(Go) ActivityPub Relay(Node.js) AodeRelay(Rust)
現状のリレーサーバの課題(3) RedisやPostgreSQLが必要 建てるのに気合がいる 簡単に建てれないのでリレーサーバの数が増え ない
開発の背景
リレーサーバを作りたかった リレーサーバにRubyの実装がない 厳密にはあるが現在はメンテナンスされていな い Rubyが好きな人間としてはRubyの実装を作り たい 去年末くらいから頑張ってたけど開発が止まっ てたの再開したい
リレーサーバの分散化 簡単に建てれるリレーサーバがあれば負荷を分 散できる? 小規模なリレーサーバを建てれると良いので は?
RubyWorld Conference 2024 Mastodon開発チームのAndy Piperさんが 来る ActivityPubやFediverseの話がしたい CFPは落ちたのでヘイシャのスポンサー枠でLTが できそう このタイミングに合わせてリレーサーバ実装の話
をするとよいのでは?
リレーサーバのプロトタイプ おそらく現存する唯一のRuby実装 プロトタイプのためテストがなかった RailsやRubyのアップデートが大変そう リレーサーバ開発時の知見をフィードバックでき そう
経緯のまとめ リレーサーバをRubyで作りたい リレーサーバの分散化ができないか試したい RubyWorld Conferenceでの話すきっかけ 作り プロトタイプ版へのフィードバックに活かせそう
この時点で11月上旬
RubyWorld Conference 2024は 12月頭
実装に割ける時間があま りない
1週間くらいでなんとかな らないか
Rails 8ならできる
One Person Framework Kamalでのデプロイの簡略化 ThrusterというNginx + Let’s Encryptな ツール Solid
QueueでのRedisが不要なジョブ処理 SQLiteを本番環境で使える
Kamalでのデプロイ 基本的にDockerとGitさえあればデプロイでき る gracefulにデプロイするためダウンタイム無し
Thrusterでのメンテコスト削減 NginxやApacheの代わりにRailsに導入され た Let’s Encryptで証明書の自動発行をしてく れる 証明書の自動更新のサポート
Solid Queueでのジョブ処理 DBをジョブキューとして使う Redisがいらない
SQLiteを本番環境で利用 リレーサーバで保存するデータはあまりない 参加サーバの情報や ジョブのデータ バックアップが簡単 機密データとかないのでSQLiteで充分
1週間で実装とデプロイ
作ったもの
ActivityPub Relay
機能 Mastodon/Misskeyのリレーに対応 ハッシュタグリレーとして運用できるオプション 購読サーバの管理画面 ジョブの管理画面
便利な点 Kamalを使っているためデプロイが非常に簡単 RedisやDBを建てる面倒くささから解放された メモリ1GB CPU 1コアでサクサク動く
今後の機能案 Pleroma/Akkomaのリレーへの対応 承認機能 ブロック機能 サーバ情報を取得する定期ジョブ 画像解析して該当の画像のみ配送する機能
今後の展望 リレーサーバの分散のためにユーザーを増やし たい ドキュメント化されていない機能などを充実 リレーサーバ自体の数も増やしたい
開発メンバー現状二名
人手が欲しい!!
仲間を募集中!!