695 Views
March 30, 24
スライド概要
なんとなく理解するActivity Pub - インスタンスを添えてJMLT vol.7 in Sapporo Yuhei Kobayashi @ynstg
$ whois noko1024.net - 小林 侑平 (@ynstg / @noko1024) 釧路工業高等専門学校 創造工学科 電気工学分野 4(2)年 道内の勉強会やイベントに出没 株式会社TAIAN でアルバイト中(バックエンド) 今日は分散型SNSのお話をします
実はSNSを運営しています おやすみすきー ( oyasumi.ski ) - 100アカウント (DAU 10アカウント) 約100サーバーと連合中 In/Out : 10万/1万くらい (1日あたり)
ことのはじまり
障害対応の様子
ちゃんと分散型SNSを学ぼう
分散型SNSって知ってますか? 異なる運営者に分権化・分散化されているSNSのこと 複数のソーシャル・ウェブサイトの連合として構成されており、 各サイトのユーザーは連合内の他のサイトのユーザーと通信をすることができる - Mastodon Misskey Bluesky など ↔ 中央集権型SNS (Facebook,Twitter,Instagram…)
サーバー間の相互連携 (連合) のおはなし MastodonやMisskeyで採用されているプロトコルがActivity Pub W3Cが策定 1. 2. サーバー⇔サーバー間の連合プロトコル クライアント⇔サーバー間のプロトコル この2つが定義されている
Activity Pub の概要
Activity Pub の重要なキーワード ✱ ✱ ✱ Actor Object Activity Actor が Object を Activity する
ActorのInbox / Outbox 全てのユーザーアカウントはActorと表現される 全てのActorは次のものをもつ ✱ ✱ inbox: 世界中からメッセージを受け取る場所 outbox: 他へメッセージを送る場所 実際にはただのAPIのエンドポイント
つまり... - アリスはボブにメッセージを送るためにボブのinbox に POST できる (サーバからサーバ →連合のみ) - アリスはアリスの最新のメッセージを読むためにアリスのinbox を GET できる (クライアントからサーバ) - アリスは世界中にメッセージを送るためにアリスのoutbox に POST できる (クライアントからサーバ) - アリスはボブ(あるいは少なくともアリスが読むことを許されている人)がどんなメッセージを 書いたかを見るためにその人のoutbox を GET できる (クライアントからサーバ or サーバからサーバ)
メッセージ...? - 実際はObject → Activity Streams で定義された JSON-LD (JSON for Linked Data) - ActivityもObjectClassの拡張として定義されている Alice が Note を Createする Bob が AliceのNote を Like する
改めて Activity Pubの概要
なるほど ちょっと立ち戻って
これって何が起きていた?
inbox queue が詰まる inbox , outboxに到着したオブジェクトたちはキューに追加され、 非同期で処理されている →他のサーバーから到着したオブジェクトを自分のタイムラインに反映するのが遅れ ていた とりあえず 他のサーバーに迷惑をかけていなかったので一安心 ちなみに... misskeyだと Bull mastodon だと Sidekiq が担当
ちょっと付録 『Actor が Object を Activity する』 どうやって真正性を証明しよう? → HTTP Signatures を付けて署名しています