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
36
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
130
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
Why Our Code Smells
bkeepers
PRO
335
57k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Producing Creativity
orderedlist
PRO
341
39k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
GitHub's CSS Performance
jonrohan
1030
460k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Unsuck your backbone
ammeep
669
57k
Raft: Consensus for Rubyists
vanstee
137
6.7k
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のリレーへの対応 承認機能 ブロック機能 サーバ情報を取得する定期ジョブ 画像解析して該当の画像のみ配送する機能
今後の展望 リレーサーバの分散のためにユーザーを増やし たい ドキュメント化されていない機能などを充実 リレーサーバ自体の数も増やしたい
開発メンバー現状二名
人手が欲しい!!
仲間を募集中!!